Jr SoulWolf commited on
Commit ·
83339a4
1
Parent(s): e629a07
fix: Correct syntax error in ReportCard component
Browse files- backend/app.py +77 -52
- frontend/dist/assets/index-1c526412.js +0 -0
- frontend/dist/assets/index-5271bae6.css +0 -1
- frontend/dist/index.html +0 -15
- frontend/index.html +1 -2
- frontend/package-lock.json +600 -113
- frontend/package.json +13 -10
- frontend/src/App.tsx +65 -128
- frontend/src/api/aiApi.ts +20 -0
- frontend/src/components/Disclaimer.tsx +24 -0
- frontend/src/components/Header.tsx +16 -0
- frontend/src/components/InputPanel.tsx +59 -0
- frontend/src/components/ReportCard.tsx +114 -0
- frontend/src/components/ResultsPanel.tsx +70 -0
- frontend/src/components/Spinner.tsx +10 -0
- frontend/src/constants.ts +34 -0
- frontend/src/hooks/usePatientAnalysis.ts +96 -0
- frontend/src/index.css +24 -0
- frontend/src/main.tsx +1 -1
- frontend/src/types.ts +42 -0
- frontend/src/validation/schemas.ts +23 -0
- frontend/tsconfig.json +21 -0
- frontend/tsconfig.node.json +11 -0
- frontend/vite.config.ts +8 -7
backend/app.py
CHANGED
|
@@ -2,87 +2,112 @@ import os
|
|
| 2 |
import json
|
| 3 |
from fastapi import FastAPI, HTTPException
|
| 4 |
from fastapi.staticfiles import StaticFiles
|
| 5 |
-
from pydantic import BaseModel
|
| 6 |
-
import
|
| 7 |
-
from dotenv import load_dotenv
|
| 8 |
|
| 9 |
-
#
|
| 10 |
-
load_dotenv()
|
| 11 |
-
API_KEY = os.getenv("GEMINI_API_KEY")
|
| 12 |
-
# Configure the API key if it exists
|
| 13 |
-
if API_KEY:
|
| 14 |
-
genai.configure(api_key=API_KEY)
|
| 15 |
-
|
| 16 |
-
app = FastAPI()
|
| 17 |
|
| 18 |
-
# Define patient data model
|
| 19 |
class Patient(BaseModel):
|
| 20 |
patient_id: str
|
| 21 |
age: int
|
| 22 |
gender: str
|
| 23 |
-
|
| 24 |
-
|
| 25 |
comorbidities: str
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
class AnalysisRequest(BaseModel):
|
| 32 |
-
patients:
|
|
|
|
|
|
|
| 33 |
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
async def analyze_patients(request: AnalysisRequest):
|
| 37 |
if not API_KEY:
|
| 38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
analyses = []
|
| 41 |
model = genai.GenerativeModel('gemini-1.5-flash')
|
|
|
|
| 42 |
for patient in request.patients:
|
| 43 |
prompt = f"""
|
| 44 |
-
Analyze the following patient data for hospital readmission risk
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
-
|
| 48 |
-
-
|
| 49 |
-
-
|
|
|
|
| 50 |
|
| 51 |
Patient data:
|
| 52 |
- Patient ID: {patient.patient_id}
|
| 53 |
- Age: {patient.age}
|
| 54 |
- Gender: {patient.gender}
|
| 55 |
-
- Diagnosis: {patient.
|
| 56 |
- Comorbidities: {patient.comorbidities}
|
| 57 |
-
- Medications: {patient.
|
| 58 |
-
- Length of Stay: {patient.
|
| 59 |
"""
|
| 60 |
try:
|
| 61 |
response = model.generate_content(prompt)
|
| 62 |
-
# Clean the response to ensure it's valid JSON
|
| 63 |
cleaned_text = response.text.strip().replace("```json", "").replace("```", "")
|
| 64 |
-
|
| 65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
except (json.JSONDecodeError, Exception) as e:
|
| 67 |
print(f"Error processing patient {patient.patient_id}: {e}")
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
analyses.append(
|
| 74 |
-
|
| 75 |
-
"risk_label": "ERROR",
|
| 76 |
-
"risk_score": 0,
|
| 77 |
-
"contributing_factors": [f"Analysis failed. See logs for details."],
|
| 78 |
-
"recommendations": ["Check the raw Gemini response in the application logs."]
|
| 79 |
-
})
|
| 80 |
return analyses
|
| 81 |
|
| 82 |
-
#
|
| 83 |
-
@app.get("/api/health")
|
| 84 |
-
async def health_check():
|
| 85 |
-
return {"status": "healthy"}
|
| 86 |
-
|
| 87 |
-
# Serve the built frontend from the 'frontend/dist' directory
|
| 88 |
app.mount("/", StaticFiles(directory="frontend/dist", html=True), name="static")
|
|
|
|
| 2 |
import json
|
| 3 |
from fastapi import FastAPI, HTTPException
|
| 4 |
from fastapi.staticfiles import StaticFiles
|
| 5 |
+
from pydantic import BaseModel, Field
|
| 6 |
+
from typing import List, Optional, Literal
|
|
|
|
| 7 |
|
| 8 |
+
# --- Pydantic Models (matching frontend types.ts) ---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
|
|
|
| 10 |
class Patient(BaseModel):
|
| 11 |
patient_id: str
|
| 12 |
age: int
|
| 13 |
gender: str
|
| 14 |
+
hospital: str
|
| 15 |
+
primary_diagnosis: str
|
| 16 |
comorbidities: str
|
| 17 |
+
medications_at_discharge: str
|
| 18 |
+
length_of_stay_days: int
|
| 19 |
+
readmitted_within_30_days: Optional[bool] = None
|
| 20 |
|
| 21 |
+
class Analysis(BaseModel):
|
| 22 |
+
patient_id: str
|
| 23 |
+
risk_level: Literal["Low", "Medium", "High"]
|
| 24 |
+
confidence_score: float = Field(..., ge=0, le=1)
|
| 25 |
+
contributing_factors: List[str]
|
| 26 |
+
preventive_recommendations: List[str]
|
| 27 |
+
|
| 28 |
+
class BackendAnalysisSuccess(BaseModel):
|
| 29 |
+
status: Literal['success']
|
| 30 |
+
patient_id: str
|
| 31 |
+
analysis: Analysis
|
| 32 |
+
|
| 33 |
+
class BackendAnalysisError(BaseModel):
|
| 34 |
+
status: Literal['error']
|
| 35 |
+
patient_id: str
|
| 36 |
+
error: str
|
| 37 |
+
|
| 38 |
class AnalysisRequest(BaseModel):
|
| 39 |
+
patients: List[Patient]
|
| 40 |
+
|
| 41 |
+
# --- AI Configuration ---
|
| 42 |
|
| 43 |
+
load_dotenv()
|
| 44 |
+
API_KEY = os.getenv("GEMINI_API_KEY")
|
| 45 |
+
if API_KEY:
|
| 46 |
+
genai.configure(api_key=API_KEY)
|
| 47 |
+
|
| 48 |
+
app = FastAPI()
|
| 49 |
+
|
| 50 |
+
# --- API Endpoints ---
|
| 51 |
+
|
| 52 |
+
@app.post("/api/analyze", response_model=List[dict])
|
| 53 |
async def analyze_patients(request: AnalysisRequest):
|
| 54 |
if not API_KEY:
|
| 55 |
+
# Return a structured error for each patient if the API key is missing
|
| 56 |
+
return [
|
| 57 |
+
BackendAnalysisError(
|
| 58 |
+
status='error',
|
| 59 |
+
patient_id=p.patient_id,
|
| 60 |
+
error="GEMINI_API_KEY is not configured in Space secrets."
|
| 61 |
+
).dict() for p in request.patients
|
| 62 |
+
]
|
| 63 |
|
| 64 |
analyses = []
|
| 65 |
model = genai.GenerativeModel('gemini-1.5-flash')
|
| 66 |
+
|
| 67 |
for patient in request.patients:
|
| 68 |
prompt = f"""
|
| 69 |
+
Analyze the following patient data for 30-day hospital readmission risk.
|
| 70 |
+
Return the result as a single, valid JSON object with NO additional text or markdown formatting.
|
| 71 |
+
The JSON object must have these exact keys: "patient_id", "risk_level", "confidence_score", "contributing_factors", and "preventive_recommendations".
|
| 72 |
+
- "risk_level" must be one of: "Low", "Medium", "High".
|
| 73 |
+
- "confidence_score" must be a number between 0.0 and 1.0.
|
| 74 |
+
- "contributing_factors" must be a list of 3 short, precise strings.
|
| 75 |
+
- "preventive_recommendations" must be a list of 3 actionable, short strings.
|
| 76 |
|
| 77 |
Patient data:
|
| 78 |
- Patient ID: {patient.patient_id}
|
| 79 |
- Age: {patient.age}
|
| 80 |
- Gender: {patient.gender}
|
| 81 |
+
- Diagnosis: {patient.primary_diagnosis}
|
| 82 |
- Comorbidities: {patient.comorbidities}
|
| 83 |
+
- Medications: {patient.medications_at_discharge}
|
| 84 |
+
- Length of Stay: {patient.length_of_stay_days} days
|
| 85 |
"""
|
| 86 |
try:
|
| 87 |
response = model.generate_content(prompt)
|
|
|
|
| 88 |
cleaned_text = response.text.strip().replace("```json", "").replace("```", "")
|
| 89 |
+
analysis_data = json.loads(cleaned_text)
|
| 90 |
+
|
| 91 |
+
# Validate the data with our Pydantic model
|
| 92 |
+
validated_analysis = Analysis(**analysis_data)
|
| 93 |
+
|
| 94 |
+
success_response = BackendAnalysisSuccess(
|
| 95 |
+
status='success',
|
| 96 |
+
patient_id=patient.patient_id,
|
| 97 |
+
analysis=validated_analysis
|
| 98 |
+
)
|
| 99 |
+
analyses.append(success_response.dict())
|
| 100 |
+
|
| 101 |
except (json.JSONDecodeError, Exception) as e:
|
| 102 |
print(f"Error processing patient {patient.patient_id}: {e}")
|
| 103 |
+
error_response = BackendAnalysisError(
|
| 104 |
+
status='error',
|
| 105 |
+
patient_id=patient.patient_id,
|
| 106 |
+
error=f"AI model returned an invalid format or failed. Details: {str(e)}"
|
| 107 |
+
)
|
| 108 |
+
analyses.append(error_response.dict())
|
| 109 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
return analyses
|
| 111 |
|
| 112 |
+
# Serve the built frontend
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
app.mount("/", StaticFiles(directory="frontend/dist", html=True), name="static")
|
frontend/dist/assets/index-1c526412.js
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
frontend/dist/assets/index-5271bae6.css
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
*,: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:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";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}.mb-3{margin-bottom:.75rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.flex{display:flex}.grid{display:grid}.h-2{height:.5rem}.max-h-96{max-height:24rem}.max-h-\[30rem\]{max-height:30rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-6{gap:1.5rem}.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))}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-900{--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.bg-opacity-30{--tw-bg-opacity: .3}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-blue-900{--tw-gradient-from: #1e3a8a var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-black{--tw-gradient-to: #000 var(--tw-gradient-to-position)}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-5{padding-left:1.25rem}.text-center{text-align:center}.text-right{text-align:right}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.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}.uppercase{text-transform:uppercase}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-90{opacity:.9}.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}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-500:disabled{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}@media (min-width: 1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
|
|
|
|
|
frontend/dist/index.html
DELETED
|
@@ -1,15 +0,0 @@
|
|
| 1 |
-
<!doctype html>
|
| 2 |
-
<html lang="en">
|
| 3 |
-
<head>
|
| 4 |
-
<meta charset="UTF-8" />
|
| 5 |
-
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
| 6 |
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 7 |
-
<title>Prevently.ai</title>
|
| 8 |
-
<script type="module" crossorigin src="/assets/index-1c526412.js"></script>
|
| 9 |
-
<link rel="stylesheet" href="/assets/index-5271bae6.css">
|
| 10 |
-
</head>
|
| 11 |
-
<body>
|
| 12 |
-
<div id="root"></div>
|
| 13 |
-
|
| 14 |
-
</body>
|
| 15 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/index.html
CHANGED
|
@@ -2,9 +2,8 @@
|
|
| 2 |
<html lang="en">
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8" />
|
| 5 |
-
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
| 6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 7 |
-
<title>Prevently.ai</title>
|
| 8 |
</head>
|
| 9 |
<body>
|
| 10 |
<div id="root"></div>
|
|
|
|
| 2 |
<html lang="en">
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8" />
|
|
|
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 6 |
+
<title>Prevently.ai - Readmission Risk Predictor</title>
|
| 7 |
</head>
|
| 8 |
<body>
|
| 9 |
<div id="root"></div>
|
frontend/package-lock.json
CHANGED
|
@@ -8,25 +8,29 @@
|
|
| 8 |
"name": "prevently-frontend",
|
| 9 |
"version": "1.0.0",
|
| 10 |
"dependencies": {
|
| 11 |
-
"axios": "^1.
|
| 12 |
-
"
|
| 13 |
-
"react
|
| 14 |
-
"
|
|
|
|
| 15 |
},
|
| 16 |
"devDependencies": {
|
| 17 |
-
"@types/
|
| 18 |
-
"@types/react
|
| 19 |
-
"@
|
|
|
|
| 20 |
"autoprefixer": "^10.4.19",
|
| 21 |
"postcss": "^8.4.38",
|
| 22 |
-
"
|
| 23 |
-
"
|
|
|
|
| 24 |
}
|
| 25 |
},
|
| 26 |
"node_modules/@alloc/quick-lru": {
|
| 27 |
"version": "5.2.0",
|
| 28 |
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
| 29 |
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
|
|
|
| 30 |
"license": "MIT",
|
| 31 |
"engines": {
|
| 32 |
"node": ">=10"
|
|
@@ -331,10 +335,27 @@
|
|
| 331 |
"node": ">=6.9.0"
|
| 332 |
}
|
| 333 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
"node_modules/@esbuild/android-arm": {
|
| 335 |
-
"version": "0.
|
| 336 |
-
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.
|
| 337 |
-
"integrity": "sha512-
|
| 338 |
"cpu": [
|
| 339 |
"arm"
|
| 340 |
],
|
|
@@ -349,9 +370,9 @@
|
|
| 349 |
}
|
| 350 |
},
|
| 351 |
"node_modules/@esbuild/android-arm64": {
|
| 352 |
-
"version": "0.
|
| 353 |
-
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.
|
| 354 |
-
"integrity": "sha512-
|
| 355 |
"cpu": [
|
| 356 |
"arm64"
|
| 357 |
],
|
|
@@ -366,9 +387,9 @@
|
|
| 366 |
}
|
| 367 |
},
|
| 368 |
"node_modules/@esbuild/android-x64": {
|
| 369 |
-
"version": "0.
|
| 370 |
-
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.
|
| 371 |
-
"integrity": "sha512-
|
| 372 |
"cpu": [
|
| 373 |
"x64"
|
| 374 |
],
|
|
@@ -383,9 +404,9 @@
|
|
| 383 |
}
|
| 384 |
},
|
| 385 |
"node_modules/@esbuild/darwin-arm64": {
|
| 386 |
-
"version": "0.
|
| 387 |
-
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.
|
| 388 |
-
"integrity": "sha512-
|
| 389 |
"cpu": [
|
| 390 |
"arm64"
|
| 391 |
],
|
|
@@ -400,9 +421,9 @@
|
|
| 400 |
}
|
| 401 |
},
|
| 402 |
"node_modules/@esbuild/darwin-x64": {
|
| 403 |
-
"version": "0.
|
| 404 |
-
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.
|
| 405 |
-
"integrity": "sha512-
|
| 406 |
"cpu": [
|
| 407 |
"x64"
|
| 408 |
],
|
|
@@ -417,9 +438,9 @@
|
|
| 417 |
}
|
| 418 |
},
|
| 419 |
"node_modules/@esbuild/freebsd-arm64": {
|
| 420 |
-
"version": "0.
|
| 421 |
-
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.
|
| 422 |
-
"integrity": "sha512-
|
| 423 |
"cpu": [
|
| 424 |
"arm64"
|
| 425 |
],
|
|
@@ -434,9 +455,9 @@
|
|
| 434 |
}
|
| 435 |
},
|
| 436 |
"node_modules/@esbuild/freebsd-x64": {
|
| 437 |
-
"version": "0.
|
| 438 |
-
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.
|
| 439 |
-
"integrity": "sha512-
|
| 440 |
"cpu": [
|
| 441 |
"x64"
|
| 442 |
],
|
|
@@ -451,9 +472,9 @@
|
|
| 451 |
}
|
| 452 |
},
|
| 453 |
"node_modules/@esbuild/linux-arm": {
|
| 454 |
-
"version": "0.
|
| 455 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.
|
| 456 |
-
"integrity": "sha512-
|
| 457 |
"cpu": [
|
| 458 |
"arm"
|
| 459 |
],
|
|
@@ -468,9 +489,9 @@
|
|
| 468 |
}
|
| 469 |
},
|
| 470 |
"node_modules/@esbuild/linux-arm64": {
|
| 471 |
-
"version": "0.
|
| 472 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.
|
| 473 |
-
"integrity": "sha512-
|
| 474 |
"cpu": [
|
| 475 |
"arm64"
|
| 476 |
],
|
|
@@ -485,9 +506,9 @@
|
|
| 485 |
}
|
| 486 |
},
|
| 487 |
"node_modules/@esbuild/linux-ia32": {
|
| 488 |
-
"version": "0.
|
| 489 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.
|
| 490 |
-
"integrity": "sha512-
|
| 491 |
"cpu": [
|
| 492 |
"ia32"
|
| 493 |
],
|
|
@@ -502,9 +523,9 @@
|
|
| 502 |
}
|
| 503 |
},
|
| 504 |
"node_modules/@esbuild/linux-loong64": {
|
| 505 |
-
"version": "0.
|
| 506 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.
|
| 507 |
-
"integrity": "sha512-
|
| 508 |
"cpu": [
|
| 509 |
"loong64"
|
| 510 |
],
|
|
@@ -519,9 +540,9 @@
|
|
| 519 |
}
|
| 520 |
},
|
| 521 |
"node_modules/@esbuild/linux-mips64el": {
|
| 522 |
-
"version": "0.
|
| 523 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.
|
| 524 |
-
"integrity": "sha512-
|
| 525 |
"cpu": [
|
| 526 |
"mips64el"
|
| 527 |
],
|
|
@@ -536,9 +557,9 @@
|
|
| 536 |
}
|
| 537 |
},
|
| 538 |
"node_modules/@esbuild/linux-ppc64": {
|
| 539 |
-
"version": "0.
|
| 540 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.
|
| 541 |
-
"integrity": "sha512-
|
| 542 |
"cpu": [
|
| 543 |
"ppc64"
|
| 544 |
],
|
|
@@ -553,9 +574,9 @@
|
|
| 553 |
}
|
| 554 |
},
|
| 555 |
"node_modules/@esbuild/linux-riscv64": {
|
| 556 |
-
"version": "0.
|
| 557 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.
|
| 558 |
-
"integrity": "sha512-
|
| 559 |
"cpu": [
|
| 560 |
"riscv64"
|
| 561 |
],
|
|
@@ -570,9 +591,9 @@
|
|
| 570 |
}
|
| 571 |
},
|
| 572 |
"node_modules/@esbuild/linux-s390x": {
|
| 573 |
-
"version": "0.
|
| 574 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.
|
| 575 |
-
"integrity": "sha512-
|
| 576 |
"cpu": [
|
| 577 |
"s390x"
|
| 578 |
],
|
|
@@ -587,9 +608,9 @@
|
|
| 587 |
}
|
| 588 |
},
|
| 589 |
"node_modules/@esbuild/linux-x64": {
|
| 590 |
-
"version": "0.
|
| 591 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.
|
| 592 |
-
"integrity": "sha512-
|
| 593 |
"cpu": [
|
| 594 |
"x64"
|
| 595 |
],
|
|
@@ -604,9 +625,9 @@
|
|
| 604 |
}
|
| 605 |
},
|
| 606 |
"node_modules/@esbuild/netbsd-x64": {
|
| 607 |
-
"version": "0.
|
| 608 |
-
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.
|
| 609 |
-
"integrity": "sha512-
|
| 610 |
"cpu": [
|
| 611 |
"x64"
|
| 612 |
],
|
|
@@ -621,9 +642,9 @@
|
|
| 621 |
}
|
| 622 |
},
|
| 623 |
"node_modules/@esbuild/openbsd-x64": {
|
| 624 |
-
"version": "0.
|
| 625 |
-
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.
|
| 626 |
-
"integrity": "sha512-
|
| 627 |
"cpu": [
|
| 628 |
"x64"
|
| 629 |
],
|
|
@@ -638,9 +659,9 @@
|
|
| 638 |
}
|
| 639 |
},
|
| 640 |
"node_modules/@esbuild/sunos-x64": {
|
| 641 |
-
"version": "0.
|
| 642 |
-
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.
|
| 643 |
-
"integrity": "sha512-
|
| 644 |
"cpu": [
|
| 645 |
"x64"
|
| 646 |
],
|
|
@@ -655,9 +676,9 @@
|
|
| 655 |
}
|
| 656 |
},
|
| 657 |
"node_modules/@esbuild/win32-arm64": {
|
| 658 |
-
"version": "0.
|
| 659 |
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.
|
| 660 |
-
"integrity": "sha512-
|
| 661 |
"cpu": [
|
| 662 |
"arm64"
|
| 663 |
],
|
|
@@ -672,9 +693,9 @@
|
|
| 672 |
}
|
| 673 |
},
|
| 674 |
"node_modules/@esbuild/win32-ia32": {
|
| 675 |
-
"version": "0.
|
| 676 |
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.
|
| 677 |
-
"integrity": "sha512-
|
| 678 |
"cpu": [
|
| 679 |
"ia32"
|
| 680 |
],
|
|
@@ -689,9 +710,9 @@
|
|
| 689 |
}
|
| 690 |
},
|
| 691 |
"node_modules/@esbuild/win32-x64": {
|
| 692 |
-
"version": "0.
|
| 693 |
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.
|
| 694 |
-
"integrity": "sha512-
|
| 695 |
"cpu": [
|
| 696 |
"x64"
|
| 697 |
],
|
|
@@ -709,6 +730,7 @@
|
|
| 709 |
"version": "8.0.2",
|
| 710 |
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
| 711 |
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
|
|
|
| 712 |
"license": "ISC",
|
| 713 |
"dependencies": {
|
| 714 |
"string-width": "^5.1.2",
|
|
@@ -726,6 +748,7 @@
|
|
| 726 |
"version": "0.3.12",
|
| 727 |
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
| 728 |
"integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
|
|
|
|
| 729 |
"license": "MIT",
|
| 730 |
"dependencies": {
|
| 731 |
"@jridgewell/sourcemap-codec": "^1.5.0",
|
|
@@ -736,6 +759,7 @@
|
|
| 736 |
"version": "3.1.2",
|
| 737 |
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
| 738 |
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
|
|
|
| 739 |
"license": "MIT",
|
| 740 |
"engines": {
|
| 741 |
"node": ">=6.0.0"
|
|
@@ -745,12 +769,14 @@
|
|
| 745 |
"version": "1.5.4",
|
| 746 |
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
|
| 747 |
"integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
|
|
|
|
| 748 |
"license": "MIT"
|
| 749 |
},
|
| 750 |
"node_modules/@jridgewell/trace-mapping": {
|
| 751 |
"version": "0.3.29",
|
| 752 |
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
|
| 753 |
"integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
|
|
|
|
| 754 |
"license": "MIT",
|
| 755 |
"dependencies": {
|
| 756 |
"@jridgewell/resolve-uri": "^3.1.0",
|
|
@@ -761,6 +787,7 @@
|
|
| 761 |
"version": "2.1.5",
|
| 762 |
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
| 763 |
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
|
|
|
| 764 |
"license": "MIT",
|
| 765 |
"dependencies": {
|
| 766 |
"@nodelib/fs.stat": "2.0.5",
|
|
@@ -774,6 +801,7 @@
|
|
| 774 |
"version": "2.0.5",
|
| 775 |
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
| 776 |
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
|
|
|
|
| 777 |
"license": "MIT",
|
| 778 |
"engines": {
|
| 779 |
"node": ">= 8"
|
|
@@ -783,6 +811,7 @@
|
|
| 783 |
"version": "1.2.8",
|
| 784 |
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
| 785 |
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
|
|
|
| 786 |
"license": "MIT",
|
| 787 |
"dependencies": {
|
| 788 |
"@nodelib/fs.scandir": "2.1.5",
|
|
@@ -796,6 +825,7 @@
|
|
| 796 |
"version": "0.11.0",
|
| 797 |
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
| 798 |
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
|
|
|
| 799 |
"license": "MIT",
|
| 800 |
"optional": true,
|
| 801 |
"engines": {
|
|
@@ -809,6 +839,286 @@
|
|
| 809 |
"dev": true,
|
| 810 |
"license": "MIT"
|
| 811 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 812 |
"node_modules/@types/babel__core": {
|
| 813 |
"version": "7.20.5",
|
| 814 |
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
|
|
@@ -854,6 +1164,33 @@
|
|
| 854 |
"@babel/types": "^7.20.7"
|
| 855 |
}
|
| 856 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 857 |
"node_modules/@types/prop-types": {
|
| 858 |
"version": "15.7.15",
|
| 859 |
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
|
|
@@ -907,6 +1244,7 @@
|
|
| 907 |
"version": "6.1.0",
|
| 908 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
| 909 |
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
|
|
|
| 910 |
"license": "MIT",
|
| 911 |
"engines": {
|
| 912 |
"node": ">=12"
|
|
@@ -919,6 +1257,7 @@
|
|
| 919 |
"version": "6.2.1",
|
| 920 |
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
| 921 |
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
|
|
|
| 922 |
"license": "MIT",
|
| 923 |
"engines": {
|
| 924 |
"node": ">=12"
|
|
@@ -931,12 +1270,14 @@
|
|
| 931 |
"version": "1.3.0",
|
| 932 |
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
|
| 933 |
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
|
|
|
|
| 934 |
"license": "MIT"
|
| 935 |
},
|
| 936 |
"node_modules/anymatch": {
|
| 937 |
"version": "3.1.3",
|
| 938 |
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
| 939 |
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
|
|
|
| 940 |
"license": "ISC",
|
| 941 |
"dependencies": {
|
| 942 |
"normalize-path": "^3.0.0",
|
|
@@ -950,6 +1291,7 @@
|
|
| 950 |
"version": "5.0.2",
|
| 951 |
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
| 952 |
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
|
|
|
| 953 |
"license": "MIT"
|
| 954 |
},
|
| 955 |
"node_modules/asynckit": {
|
|
@@ -1011,12 +1353,14 @@
|
|
| 1011 |
"version": "1.0.2",
|
| 1012 |
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
| 1013 |
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
|
|
|
| 1014 |
"license": "MIT"
|
| 1015 |
},
|
| 1016 |
"node_modules/binary-extensions": {
|
| 1017 |
"version": "2.3.0",
|
| 1018 |
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
| 1019 |
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
|
|
|
| 1020 |
"license": "MIT",
|
| 1021 |
"engines": {
|
| 1022 |
"node": ">=8"
|
|
@@ -1029,6 +1373,7 @@
|
|
| 1029 |
"version": "2.0.2",
|
| 1030 |
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
| 1031 |
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
|
|
|
| 1032 |
"license": "MIT",
|
| 1033 |
"dependencies": {
|
| 1034 |
"balanced-match": "^1.0.0"
|
|
@@ -1038,6 +1383,7 @@
|
|
| 1038 |
"version": "3.0.3",
|
| 1039 |
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
| 1040 |
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
|
|
|
| 1041 |
"license": "MIT",
|
| 1042 |
"dependencies": {
|
| 1043 |
"fill-range": "^7.1.1"
|
|
@@ -1096,6 +1442,7 @@
|
|
| 1096 |
"version": "2.0.1",
|
| 1097 |
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
| 1098 |
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
|
|
|
|
| 1099 |
"license": "MIT",
|
| 1100 |
"engines": {
|
| 1101 |
"node": ">= 6"
|
|
@@ -1126,6 +1473,7 @@
|
|
| 1126 |
"version": "3.6.0",
|
| 1127 |
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
| 1128 |
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
|
|
|
| 1129 |
"license": "MIT",
|
| 1130 |
"dependencies": {
|
| 1131 |
"anymatch": "~3.1.2",
|
|
@@ -1150,6 +1498,7 @@
|
|
| 1150 |
"version": "5.1.2",
|
| 1151 |
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
| 1152 |
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
|
|
|
| 1153 |
"license": "ISC",
|
| 1154 |
"dependencies": {
|
| 1155 |
"is-glob": "^4.0.1"
|
|
@@ -1162,6 +1511,7 @@
|
|
| 1162 |
"version": "2.0.1",
|
| 1163 |
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
| 1164 |
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
|
|
| 1165 |
"license": "MIT",
|
| 1166 |
"dependencies": {
|
| 1167 |
"color-name": "~1.1.4"
|
|
@@ -1174,6 +1524,7 @@
|
|
| 1174 |
"version": "1.1.4",
|
| 1175 |
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
| 1176 |
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
|
|
| 1177 |
"license": "MIT"
|
| 1178 |
},
|
| 1179 |
"node_modules/combined-stream": {
|
|
@@ -1192,6 +1543,7 @@
|
|
| 1192 |
"version": "4.1.1",
|
| 1193 |
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
| 1194 |
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
|
|
|
| 1195 |
"license": "MIT",
|
| 1196 |
"engines": {
|
| 1197 |
"node": ">= 6"
|
|
@@ -1208,6 +1560,7 @@
|
|
| 1208 |
"version": "7.0.6",
|
| 1209 |
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
| 1210 |
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
|
|
|
| 1211 |
"license": "MIT",
|
| 1212 |
"dependencies": {
|
| 1213 |
"path-key": "^3.1.0",
|
|
@@ -1222,6 +1575,7 @@
|
|
| 1222 |
"version": "3.0.0",
|
| 1223 |
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
| 1224 |
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
|
|
|
|
| 1225 |
"license": "MIT",
|
| 1226 |
"bin": {
|
| 1227 |
"cssesc": "bin/cssesc"
|
|
@@ -1268,12 +1622,14 @@
|
|
| 1268 |
"version": "1.2.2",
|
| 1269 |
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
| 1270 |
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
|
|
|
|
| 1271 |
"license": "Apache-2.0"
|
| 1272 |
},
|
| 1273 |
"node_modules/dlv": {
|
| 1274 |
"version": "1.1.3",
|
| 1275 |
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
| 1276 |
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
|
|
|
|
| 1277 |
"license": "MIT"
|
| 1278 |
},
|
| 1279 |
"node_modules/dunder-proto": {
|
|
@@ -1294,6 +1650,7 @@
|
|
| 1294 |
"version": "0.2.0",
|
| 1295 |
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
| 1296 |
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
|
|
|
|
| 1297 |
"license": "MIT"
|
| 1298 |
},
|
| 1299 |
"node_modules/electron-to-chromium": {
|
|
@@ -1307,6 +1664,7 @@
|
|
| 1307 |
"version": "9.2.2",
|
| 1308 |
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
| 1309 |
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
|
|
|
| 1310 |
"license": "MIT"
|
| 1311 |
},
|
| 1312 |
"node_modules/es-define-property": {
|
|
@@ -1355,9 +1713,9 @@
|
|
| 1355 |
}
|
| 1356 |
},
|
| 1357 |
"node_modules/esbuild": {
|
| 1358 |
-
"version": "0.
|
| 1359 |
-
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.
|
| 1360 |
-
"integrity": "sha512-
|
| 1361 |
"dev": true,
|
| 1362 |
"hasInstallScript": true,
|
| 1363 |
"license": "MIT",
|
|
@@ -1368,28 +1726,29 @@
|
|
| 1368 |
"node": ">=12"
|
| 1369 |
},
|
| 1370 |
"optionalDependencies": {
|
| 1371 |
-
"@esbuild/
|
| 1372 |
-
"@esbuild/android-
|
| 1373 |
-
"@esbuild/android-
|
| 1374 |
-
"@esbuild/
|
| 1375 |
-
"@esbuild/darwin-
|
| 1376 |
-
"@esbuild/
|
| 1377 |
-
"@esbuild/freebsd-
|
| 1378 |
-
"@esbuild/
|
| 1379 |
-
"@esbuild/linux-
|
| 1380 |
-
"@esbuild/linux-
|
| 1381 |
-
"@esbuild/linux-
|
| 1382 |
-
"@esbuild/linux-
|
| 1383 |
-
"@esbuild/linux-
|
| 1384 |
-
"@esbuild/linux-
|
| 1385 |
-
"@esbuild/linux-
|
| 1386 |
-
"@esbuild/linux-
|
| 1387 |
-
"@esbuild/
|
| 1388 |
-
"@esbuild/
|
| 1389 |
-
"@esbuild/
|
| 1390 |
-
"@esbuild/
|
| 1391 |
-
"@esbuild/win32-
|
| 1392 |
-
"@esbuild/win32-
|
|
|
|
| 1393 |
}
|
| 1394 |
},
|
| 1395 |
"node_modules/escalade": {
|
|
@@ -1406,6 +1765,7 @@
|
|
| 1406 |
"version": "3.3.3",
|
| 1407 |
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
|
| 1408 |
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
|
|
|
|
| 1409 |
"license": "MIT",
|
| 1410 |
"dependencies": {
|
| 1411 |
"@nodelib/fs.stat": "^2.0.2",
|
|
@@ -1422,6 +1782,7 @@
|
|
| 1422 |
"version": "5.1.2",
|
| 1423 |
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
| 1424 |
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
|
|
|
| 1425 |
"license": "ISC",
|
| 1426 |
"dependencies": {
|
| 1427 |
"is-glob": "^4.0.1"
|
|
@@ -1434,6 +1795,7 @@
|
|
| 1434 |
"version": "1.19.1",
|
| 1435 |
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
|
| 1436 |
"integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
|
|
|
|
| 1437 |
"license": "ISC",
|
| 1438 |
"dependencies": {
|
| 1439 |
"reusify": "^1.0.4"
|
|
@@ -1443,6 +1805,7 @@
|
|
| 1443 |
"version": "7.1.1",
|
| 1444 |
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
| 1445 |
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
|
|
|
| 1446 |
"license": "MIT",
|
| 1447 |
"dependencies": {
|
| 1448 |
"to-regex-range": "^5.0.1"
|
|
@@ -1475,6 +1838,7 @@
|
|
| 1475 |
"version": "3.3.1",
|
| 1476 |
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
|
| 1477 |
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
|
|
|
|
| 1478 |
"license": "ISC",
|
| 1479 |
"dependencies": {
|
| 1480 |
"cross-spawn": "^7.0.6",
|
|
@@ -1521,6 +1885,7 @@
|
|
| 1521 |
"version": "2.3.3",
|
| 1522 |
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
| 1523 |
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
|
|
|
| 1524 |
"hasInstallScript": true,
|
| 1525 |
"license": "MIT",
|
| 1526 |
"optional": true,
|
|
@@ -1591,6 +1956,7 @@
|
|
| 1591 |
"version": "10.4.5",
|
| 1592 |
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
| 1593 |
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
|
|
|
| 1594 |
"license": "ISC",
|
| 1595 |
"dependencies": {
|
| 1596 |
"foreground-child": "^3.1.0",
|
|
@@ -1611,6 +1977,7 @@
|
|
| 1611 |
"version": "6.0.2",
|
| 1612 |
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
| 1613 |
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
|
|
|
| 1614 |
"license": "ISC",
|
| 1615 |
"dependencies": {
|
| 1616 |
"is-glob": "^4.0.3"
|
|
@@ -1674,6 +2041,7 @@
|
|
| 1674 |
"version": "2.1.0",
|
| 1675 |
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
| 1676 |
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
|
|
|
| 1677 |
"license": "MIT",
|
| 1678 |
"dependencies": {
|
| 1679 |
"binary-extensions": "^2.0.0"
|
|
@@ -1686,6 +2054,7 @@
|
|
| 1686 |
"version": "2.16.1",
|
| 1687 |
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
|
| 1688 |
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
|
|
|
|
| 1689 |
"license": "MIT",
|
| 1690 |
"dependencies": {
|
| 1691 |
"hasown": "^2.0.2"
|
|
@@ -1701,6 +2070,7 @@
|
|
| 1701 |
"version": "2.1.1",
|
| 1702 |
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
| 1703 |
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
|
|
|
|
| 1704 |
"license": "MIT",
|
| 1705 |
"engines": {
|
| 1706 |
"node": ">=0.10.0"
|
|
@@ -1710,6 +2080,7 @@
|
|
| 1710 |
"version": "3.0.0",
|
| 1711 |
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
| 1712 |
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
|
|
|
| 1713 |
"license": "MIT",
|
| 1714 |
"engines": {
|
| 1715 |
"node": ">=8"
|
|
@@ -1719,6 +2090,7 @@
|
|
| 1719 |
"version": "4.0.3",
|
| 1720 |
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
| 1721 |
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
|
|
|
| 1722 |
"license": "MIT",
|
| 1723 |
"dependencies": {
|
| 1724 |
"is-extglob": "^2.1.1"
|
|
@@ -1731,6 +2103,7 @@
|
|
| 1731 |
"version": "7.0.0",
|
| 1732 |
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
| 1733 |
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
|
|
|
| 1734 |
"license": "MIT",
|
| 1735 |
"engines": {
|
| 1736 |
"node": ">=0.12.0"
|
|
@@ -1740,12 +2113,14 @@
|
|
| 1740 |
"version": "2.0.0",
|
| 1741 |
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
| 1742 |
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
|
|
|
| 1743 |
"license": "ISC"
|
| 1744 |
},
|
| 1745 |
"node_modules/jackspeak": {
|
| 1746 |
"version": "3.4.3",
|
| 1747 |
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
|
| 1748 |
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
|
|
|
| 1749 |
"license": "BlueOak-1.0.0",
|
| 1750 |
"dependencies": {
|
| 1751 |
"@isaacs/cliui": "^8.0.2"
|
|
@@ -1761,6 +2136,7 @@
|
|
| 1761 |
"version": "1.21.7",
|
| 1762 |
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
|
| 1763 |
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
|
|
|
|
| 1764 |
"license": "MIT",
|
| 1765 |
"bin": {
|
| 1766 |
"jiti": "bin/jiti.js"
|
|
@@ -1802,6 +2178,7 @@
|
|
| 1802 |
"version": "3.1.3",
|
| 1803 |
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
|
| 1804 |
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
|
|
|
|
| 1805 |
"license": "MIT",
|
| 1806 |
"engines": {
|
| 1807 |
"node": ">=14"
|
|
@@ -1814,6 +2191,7 @@
|
|
| 1814 |
"version": "1.2.4",
|
| 1815 |
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
| 1816 |
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
|
|
|
|
| 1817 |
"license": "MIT"
|
| 1818 |
},
|
| 1819 |
"node_modules/loose-envify": {
|
|
@@ -1851,6 +2229,7 @@
|
|
| 1851 |
"version": "1.4.1",
|
| 1852 |
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
| 1853 |
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
|
|
|
|
| 1854 |
"license": "MIT",
|
| 1855 |
"engines": {
|
| 1856 |
"node": ">= 8"
|
|
@@ -1860,6 +2239,7 @@
|
|
| 1860 |
"version": "4.0.8",
|
| 1861 |
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
| 1862 |
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
|
|
|
| 1863 |
"license": "MIT",
|
| 1864 |
"dependencies": {
|
| 1865 |
"braces": "^3.0.3",
|
|
@@ -1894,6 +2274,7 @@
|
|
| 1894 |
"version": "9.0.5",
|
| 1895 |
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
| 1896 |
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
|
|
|
| 1897 |
"license": "ISC",
|
| 1898 |
"dependencies": {
|
| 1899 |
"brace-expansion": "^2.0.1"
|
|
@@ -1909,6 +2290,7 @@
|
|
| 1909 |
"version": "7.1.2",
|
| 1910 |
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
|
| 1911 |
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
|
|
|
| 1912 |
"license": "ISC",
|
| 1913 |
"engines": {
|
| 1914 |
"node": ">=16 || 14 >=14.17"
|
|
@@ -1925,6 +2307,7 @@
|
|
| 1925 |
"version": "2.7.0",
|
| 1926 |
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
|
| 1927 |
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
|
|
|
| 1928 |
"license": "MIT",
|
| 1929 |
"dependencies": {
|
| 1930 |
"any-promise": "^1.0.0",
|
|
@@ -1936,6 +2319,7 @@
|
|
| 1936 |
"version": "3.3.11",
|
| 1937 |
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
| 1938 |
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
|
|
|
|
| 1939 |
"funding": [
|
| 1940 |
{
|
| 1941 |
"type": "github",
|
|
@@ -1961,6 +2345,7 @@
|
|
| 1961 |
"version": "3.0.0",
|
| 1962 |
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
| 1963 |
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
|
|
|
| 1964 |
"license": "MIT",
|
| 1965 |
"engines": {
|
| 1966 |
"node": ">=0.10.0"
|
|
@@ -1980,6 +2365,7 @@
|
|
| 1980 |
"version": "4.1.1",
|
| 1981 |
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
| 1982 |
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
|
|
|
| 1983 |
"license": "MIT",
|
| 1984 |
"engines": {
|
| 1985 |
"node": ">=0.10.0"
|
|
@@ -1989,6 +2375,7 @@
|
|
| 1989 |
"version": "3.0.0",
|
| 1990 |
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
| 1991 |
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
|
|
|
|
| 1992 |
"license": "MIT",
|
| 1993 |
"engines": {
|
| 1994 |
"node": ">= 6"
|
|
@@ -1998,12 +2385,20 @@
|
|
| 1998 |
"version": "1.0.1",
|
| 1999 |
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
| 2000 |
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
|
|
|
| 2001 |
"license": "BlueOak-1.0.0"
|
| 2002 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2003 |
"node_modules/path-key": {
|
| 2004 |
"version": "3.1.1",
|
| 2005 |
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
| 2006 |
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
|
|
|
| 2007 |
"license": "MIT",
|
| 2008 |
"engines": {
|
| 2009 |
"node": ">=8"
|
|
@@ -2013,12 +2408,14 @@
|
|
| 2013 |
"version": "1.0.7",
|
| 2014 |
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
| 2015 |
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
|
|
|
| 2016 |
"license": "MIT"
|
| 2017 |
},
|
| 2018 |
"node_modules/path-scurry": {
|
| 2019 |
"version": "1.11.1",
|
| 2020 |
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
|
| 2021 |
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
|
|
|
| 2022 |
"license": "BlueOak-1.0.0",
|
| 2023 |
"dependencies": {
|
| 2024 |
"lru-cache": "^10.2.0",
|
|
@@ -2035,18 +2432,21 @@
|
|
| 2035 |
"version": "10.4.3",
|
| 2036 |
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
|
| 2037 |
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
|
|
|
| 2038 |
"license": "ISC"
|
| 2039 |
},
|
| 2040 |
"node_modules/picocolors": {
|
| 2041 |
"version": "1.1.1",
|
| 2042 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
| 2043 |
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
|
|
| 2044 |
"license": "ISC"
|
| 2045 |
},
|
| 2046 |
"node_modules/picomatch": {
|
| 2047 |
"version": "2.3.1",
|
| 2048 |
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
| 2049 |
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
|
|
|
| 2050 |
"license": "MIT",
|
| 2051 |
"engines": {
|
| 2052 |
"node": ">=8.6"
|
|
@@ -2059,6 +2459,7 @@
|
|
| 2059 |
"version": "2.3.0",
|
| 2060 |
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
| 2061 |
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
|
|
|
| 2062 |
"license": "MIT",
|
| 2063 |
"engines": {
|
| 2064 |
"node": ">=0.10.0"
|
|
@@ -2068,6 +2469,7 @@
|
|
| 2068 |
"version": "4.0.7",
|
| 2069 |
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
|
| 2070 |
"integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
|
|
|
|
| 2071 |
"license": "MIT",
|
| 2072 |
"engines": {
|
| 2073 |
"node": ">= 6"
|
|
@@ -2077,6 +2479,7 @@
|
|
| 2077 |
"version": "8.5.6",
|
| 2078 |
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
|
| 2079 |
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
|
|
|
|
| 2080 |
"funding": [
|
| 2081 |
{
|
| 2082 |
"type": "opencollective",
|
|
@@ -2105,6 +2508,7 @@
|
|
| 2105 |
"version": "15.1.0",
|
| 2106 |
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
|
| 2107 |
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
|
|
|
| 2108 |
"license": "MIT",
|
| 2109 |
"dependencies": {
|
| 2110 |
"postcss-value-parser": "^4.0.0",
|
|
@@ -2122,6 +2526,7 @@
|
|
| 2122 |
"version": "4.0.1",
|
| 2123 |
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
|
| 2124 |
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
|
|
|
|
| 2125 |
"license": "MIT",
|
| 2126 |
"dependencies": {
|
| 2127 |
"camelcase-css": "^2.0.1"
|
|
@@ -2141,6 +2546,7 @@
|
|
| 2141 |
"version": "4.0.2",
|
| 2142 |
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
|
| 2143 |
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
|
|
|
|
| 2144 |
"funding": [
|
| 2145 |
{
|
| 2146 |
"type": "opencollective",
|
|
@@ -2176,6 +2582,7 @@
|
|
| 2176 |
"version": "6.2.0",
|
| 2177 |
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
|
| 2178 |
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
|
|
|
|
| 2179 |
"funding": [
|
| 2180 |
{
|
| 2181 |
"type": "opencollective",
|
|
@@ -2201,6 +2608,7 @@
|
|
| 2201 |
"version": "6.1.2",
|
| 2202 |
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
|
| 2203 |
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
|
|
|
|
| 2204 |
"license": "MIT",
|
| 2205 |
"dependencies": {
|
| 2206 |
"cssesc": "^3.0.0",
|
|
@@ -2214,6 +2622,7 @@
|
|
| 2214 |
"version": "4.2.0",
|
| 2215 |
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
| 2216 |
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
|
|
|
|
| 2217 |
"license": "MIT"
|
| 2218 |
},
|
| 2219 |
"node_modules/proxy-from-env": {
|
|
@@ -2226,6 +2635,7 @@
|
|
| 2226 |
"version": "1.2.3",
|
| 2227 |
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
| 2228 |
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
|
|
|
|
| 2229 |
"funding": [
|
| 2230 |
{
|
| 2231 |
"type": "github",
|
|
@@ -2281,6 +2691,7 @@
|
|
| 2281 |
"version": "1.0.0",
|
| 2282 |
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
| 2283 |
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
|
|
|
| 2284 |
"license": "MIT",
|
| 2285 |
"dependencies": {
|
| 2286 |
"pify": "^2.3.0"
|
|
@@ -2290,6 +2701,7 @@
|
|
| 2290 |
"version": "3.6.0",
|
| 2291 |
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
| 2292 |
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
|
|
|
| 2293 |
"license": "MIT",
|
| 2294 |
"dependencies": {
|
| 2295 |
"picomatch": "^2.2.1"
|
|
@@ -2302,6 +2714,7 @@
|
|
| 2302 |
"version": "1.22.10",
|
| 2303 |
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
|
| 2304 |
"integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
|
|
|
|
| 2305 |
"license": "MIT",
|
| 2306 |
"dependencies": {
|
| 2307 |
"is-core-module": "^2.16.0",
|
|
@@ -2322,6 +2735,7 @@
|
|
| 2322 |
"version": "1.1.0",
|
| 2323 |
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
|
| 2324 |
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
|
|
|
|
| 2325 |
"license": "MIT",
|
| 2326 |
"engines": {
|
| 2327 |
"iojs": ">=1.0.0",
|
|
@@ -2329,19 +2743,42 @@
|
|
| 2329 |
}
|
| 2330 |
},
|
| 2331 |
"node_modules/rollup": {
|
| 2332 |
-
"version": "
|
| 2333 |
-
"resolved": "https://registry.npmjs.org/rollup/-/rollup-
|
| 2334 |
-
"integrity": "sha512-
|
| 2335 |
"dev": true,
|
| 2336 |
"license": "MIT",
|
|
|
|
|
|
|
|
|
|
| 2337 |
"bin": {
|
| 2338 |
"rollup": "dist/bin/rollup"
|
| 2339 |
},
|
| 2340 |
"engines": {
|
| 2341 |
-
"node": ">=
|
| 2342 |
"npm": ">=8.0.0"
|
| 2343 |
},
|
| 2344 |
"optionalDependencies": {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2345 |
"fsevents": "~2.3.2"
|
| 2346 |
}
|
| 2347 |
},
|
|
@@ -2349,6 +2786,7 @@
|
|
| 2349 |
"version": "1.2.0",
|
| 2350 |
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
| 2351 |
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
|
|
|
| 2352 |
"funding": [
|
| 2353 |
{
|
| 2354 |
"type": "github",
|
|
@@ -2391,6 +2829,7 @@
|
|
| 2391 |
"version": "2.0.0",
|
| 2392 |
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
| 2393 |
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
|
|
|
| 2394 |
"license": "MIT",
|
| 2395 |
"dependencies": {
|
| 2396 |
"shebang-regex": "^3.0.0"
|
|
@@ -2403,6 +2842,7 @@
|
|
| 2403 |
"version": "3.0.0",
|
| 2404 |
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
| 2405 |
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
|
|
| 2406 |
"license": "MIT",
|
| 2407 |
"engines": {
|
| 2408 |
"node": ">=8"
|
|
@@ -2412,6 +2852,7 @@
|
|
| 2412 |
"version": "4.1.0",
|
| 2413 |
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
| 2414 |
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
|
|
|
| 2415 |
"license": "ISC",
|
| 2416 |
"engines": {
|
| 2417 |
"node": ">=14"
|
|
@@ -2424,6 +2865,7 @@
|
|
| 2424 |
"version": "1.2.1",
|
| 2425 |
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
| 2426 |
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
|
|
|
| 2427 |
"license": "BSD-3-Clause",
|
| 2428 |
"engines": {
|
| 2429 |
"node": ">=0.10.0"
|
|
@@ -2433,6 +2875,7 @@
|
|
| 2433 |
"version": "5.1.2",
|
| 2434 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
| 2435 |
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
|
|
|
| 2436 |
"license": "MIT",
|
| 2437 |
"dependencies": {
|
| 2438 |
"eastasianwidth": "^0.2.0",
|
|
@@ -2451,6 +2894,7 @@
|
|
| 2451 |
"version": "4.2.3",
|
| 2452 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
| 2453 |
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
|
|
|
| 2454 |
"license": "MIT",
|
| 2455 |
"dependencies": {
|
| 2456 |
"emoji-regex": "^8.0.0",
|
|
@@ -2465,6 +2909,7 @@
|
|
| 2465 |
"version": "5.0.1",
|
| 2466 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 2467 |
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
|
|
|
| 2468 |
"license": "MIT",
|
| 2469 |
"engines": {
|
| 2470 |
"node": ">=8"
|
|
@@ -2474,12 +2919,14 @@
|
|
| 2474 |
"version": "8.0.0",
|
| 2475 |
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
| 2476 |
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
|
|
|
| 2477 |
"license": "MIT"
|
| 2478 |
},
|
| 2479 |
"node_modules/string-width-cjs/node_modules/strip-ansi": {
|
| 2480 |
"version": "6.0.1",
|
| 2481 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 2482 |
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
|
|
|
| 2483 |
"license": "MIT",
|
| 2484 |
"dependencies": {
|
| 2485 |
"ansi-regex": "^5.0.1"
|
|
@@ -2492,6 +2939,7 @@
|
|
| 2492 |
"version": "7.1.0",
|
| 2493 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
| 2494 |
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
|
|
|
| 2495 |
"license": "MIT",
|
| 2496 |
"dependencies": {
|
| 2497 |
"ansi-regex": "^6.0.1"
|
|
@@ -2508,6 +2956,7 @@
|
|
| 2508 |
"version": "6.0.1",
|
| 2509 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 2510 |
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
|
|
|
| 2511 |
"license": "MIT",
|
| 2512 |
"dependencies": {
|
| 2513 |
"ansi-regex": "^5.0.1"
|
|
@@ -2520,6 +2969,7 @@
|
|
| 2520 |
"version": "5.0.1",
|
| 2521 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 2522 |
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
|
|
|
| 2523 |
"license": "MIT",
|
| 2524 |
"engines": {
|
| 2525 |
"node": ">=8"
|
|
@@ -2529,6 +2979,7 @@
|
|
| 2529 |
"version": "3.35.0",
|
| 2530 |
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
|
| 2531 |
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
|
|
|
|
| 2532 |
"license": "MIT",
|
| 2533 |
"dependencies": {
|
| 2534 |
"@jridgewell/gen-mapping": "^0.3.2",
|
|
@@ -2551,6 +3002,7 @@
|
|
| 2551 |
"version": "1.0.0",
|
| 2552 |
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
| 2553 |
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
|
|
|
|
| 2554 |
"license": "MIT",
|
| 2555 |
"engines": {
|
| 2556 |
"node": ">= 0.4"
|
|
@@ -2563,6 +3015,7 @@
|
|
| 2563 |
"version": "3.4.17",
|
| 2564 |
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
|
| 2565 |
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
|
|
|
|
| 2566 |
"license": "MIT",
|
| 2567 |
"dependencies": {
|
| 2568 |
"@alloc/quick-lru": "^5.2.0",
|
|
@@ -2600,6 +3053,7 @@
|
|
| 2600 |
"version": "3.3.1",
|
| 2601 |
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
| 2602 |
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
|
|
|
| 2603 |
"license": "MIT",
|
| 2604 |
"dependencies": {
|
| 2605 |
"any-promise": "^1.0.0"
|
|
@@ -2609,6 +3063,7 @@
|
|
| 2609 |
"version": "1.6.0",
|
| 2610 |
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
|
| 2611 |
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
|
|
|
| 2612 |
"license": "MIT",
|
| 2613 |
"dependencies": {
|
| 2614 |
"thenify": ">= 3.1.0 < 4"
|
|
@@ -2621,6 +3076,7 @@
|
|
| 2621 |
"version": "5.0.1",
|
| 2622 |
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
| 2623 |
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
|
|
|
| 2624 |
"license": "MIT",
|
| 2625 |
"dependencies": {
|
| 2626 |
"is-number": "^7.0.0"
|
|
@@ -2633,6 +3089,7 @@
|
|
| 2633 |
"version": "0.1.13",
|
| 2634 |
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
|
| 2635 |
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
|
|
|
|
| 2636 |
"license": "Apache-2.0"
|
| 2637 |
},
|
| 2638 |
"node_modules/typescript": {
|
|
@@ -2649,6 +3106,13 @@
|
|
| 2649 |
"node": ">=14.17"
|
| 2650 |
}
|
| 2651 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2652 |
"node_modules/update-browserslist-db": {
|
| 2653 |
"version": "1.1.3",
|
| 2654 |
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
|
|
@@ -2684,36 +3148,38 @@
|
|
| 2684 |
"version": "1.0.2",
|
| 2685 |
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
| 2686 |
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
|
|
|
| 2687 |
"license": "MIT"
|
| 2688 |
},
|
| 2689 |
"node_modules/vite": {
|
| 2690 |
-
"version": "
|
| 2691 |
-
"resolved": "https://registry.npmjs.org/vite/-/vite-
|
| 2692 |
-
"integrity": "sha512-
|
| 2693 |
"dev": true,
|
| 2694 |
"license": "MIT",
|
| 2695 |
"dependencies": {
|
| 2696 |
-
"esbuild": "^0.
|
| 2697 |
-
"postcss": "^8.4.
|
| 2698 |
-
"rollup": "^
|
| 2699 |
},
|
| 2700 |
"bin": {
|
| 2701 |
"vite": "bin/vite.js"
|
| 2702 |
},
|
| 2703 |
"engines": {
|
| 2704 |
-
"node": "^
|
| 2705 |
},
|
| 2706 |
"funding": {
|
| 2707 |
"url": "https://github.com/vitejs/vite?sponsor=1"
|
| 2708 |
},
|
| 2709 |
"optionalDependencies": {
|
| 2710 |
-
"fsevents": "~2.3.
|
| 2711 |
},
|
| 2712 |
"peerDependencies": {
|
| 2713 |
-
"@types/node": ">=
|
| 2714 |
"less": "*",
|
| 2715 |
"lightningcss": "^1.21.0",
|
| 2716 |
"sass": "*",
|
|
|
|
| 2717 |
"stylus": "*",
|
| 2718 |
"sugarss": "*",
|
| 2719 |
"terser": "^5.4.0"
|
|
@@ -2731,6 +3197,9 @@
|
|
| 2731 |
"sass": {
|
| 2732 |
"optional": true
|
| 2733 |
},
|
|
|
|
|
|
|
|
|
|
| 2734 |
"stylus": {
|
| 2735 |
"optional": true
|
| 2736 |
},
|
|
@@ -2746,6 +3215,7 @@
|
|
| 2746 |
"version": "2.0.2",
|
| 2747 |
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
| 2748 |
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
|
|
|
| 2749 |
"license": "ISC",
|
| 2750 |
"dependencies": {
|
| 2751 |
"isexe": "^2.0.0"
|
|
@@ -2761,6 +3231,7 @@
|
|
| 2761 |
"version": "8.1.0",
|
| 2762 |
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
| 2763 |
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
|
|
|
| 2764 |
"license": "MIT",
|
| 2765 |
"dependencies": {
|
| 2766 |
"ansi-styles": "^6.1.0",
|
|
@@ -2779,6 +3250,7 @@
|
|
| 2779 |
"version": "7.0.0",
|
| 2780 |
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
| 2781 |
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
|
|
|
| 2782 |
"license": "MIT",
|
| 2783 |
"dependencies": {
|
| 2784 |
"ansi-styles": "^4.0.0",
|
|
@@ -2796,6 +3268,7 @@
|
|
| 2796 |
"version": "5.0.1",
|
| 2797 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 2798 |
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
|
|
|
| 2799 |
"license": "MIT",
|
| 2800 |
"engines": {
|
| 2801 |
"node": ">=8"
|
|
@@ -2805,6 +3278,7 @@
|
|
| 2805 |
"version": "4.3.0",
|
| 2806 |
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
| 2807 |
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
|
|
| 2808 |
"license": "MIT",
|
| 2809 |
"dependencies": {
|
| 2810 |
"color-convert": "^2.0.1"
|
|
@@ -2820,12 +3294,14 @@
|
|
| 2820 |
"version": "8.0.0",
|
| 2821 |
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
| 2822 |
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
|
|
|
| 2823 |
"license": "MIT"
|
| 2824 |
},
|
| 2825 |
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
|
| 2826 |
"version": "4.2.3",
|
| 2827 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
| 2828 |
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
|
|
|
| 2829 |
"license": "MIT",
|
| 2830 |
"dependencies": {
|
| 2831 |
"emoji-regex": "^8.0.0",
|
|
@@ -2840,6 +3316,7 @@
|
|
| 2840 |
"version": "6.0.1",
|
| 2841 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 2842 |
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
|
|
|
| 2843 |
"license": "MIT",
|
| 2844 |
"dependencies": {
|
| 2845 |
"ansi-regex": "^5.0.1"
|
|
@@ -2859,6 +3336,7 @@
|
|
| 2859 |
"version": "2.8.0",
|
| 2860 |
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
|
| 2861 |
"integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
|
|
|
|
| 2862 |
"license": "ISC",
|
| 2863 |
"bin": {
|
| 2864 |
"yaml": "bin.mjs"
|
|
@@ -2866,6 +3344,15 @@
|
|
| 2866 |
"engines": {
|
| 2867 |
"node": ">= 14.6"
|
| 2868 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2869 |
}
|
| 2870 |
}
|
| 2871 |
}
|
|
|
|
| 8 |
"name": "prevently-frontend",
|
| 9 |
"version": "1.0.0",
|
| 10 |
"dependencies": {
|
| 11 |
+
"axios": "^1.7.2",
|
| 12 |
+
"papaparse": "^5.4.1",
|
| 13 |
+
"react": "^18.3.1",
|
| 14 |
+
"react-dom": "^18.3.1",
|
| 15 |
+
"zod": "^3.23.8"
|
| 16 |
},
|
| 17 |
"devDependencies": {
|
| 18 |
+
"@types/papaparse": "^5.3.14",
|
| 19 |
+
"@types/react": "^18.3.3",
|
| 20 |
+
"@types/react-dom": "^18.3.0",
|
| 21 |
+
"@vitejs/plugin-react": "^4.3.1",
|
| 22 |
"autoprefixer": "^10.4.19",
|
| 23 |
"postcss": "^8.4.38",
|
| 24 |
+
"tailwindcss": "^3.4.4",
|
| 25 |
+
"typescript": "^5.4.5",
|
| 26 |
+
"vite": "^5.3.1"
|
| 27 |
}
|
| 28 |
},
|
| 29 |
"node_modules/@alloc/quick-lru": {
|
| 30 |
"version": "5.2.0",
|
| 31 |
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
| 32 |
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
| 33 |
+
"dev": true,
|
| 34 |
"license": "MIT",
|
| 35 |
"engines": {
|
| 36 |
"node": ">=10"
|
|
|
|
| 335 |
"node": ">=6.9.0"
|
| 336 |
}
|
| 337 |
},
|
| 338 |
+
"node_modules/@esbuild/aix-ppc64": {
|
| 339 |
+
"version": "0.21.5",
|
| 340 |
+
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
|
| 341 |
+
"integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
|
| 342 |
+
"cpu": [
|
| 343 |
+
"ppc64"
|
| 344 |
+
],
|
| 345 |
+
"dev": true,
|
| 346 |
+
"license": "MIT",
|
| 347 |
+
"optional": true,
|
| 348 |
+
"os": [
|
| 349 |
+
"aix"
|
| 350 |
+
],
|
| 351 |
+
"engines": {
|
| 352 |
+
"node": ">=12"
|
| 353 |
+
}
|
| 354 |
+
},
|
| 355 |
"node_modules/@esbuild/android-arm": {
|
| 356 |
+
"version": "0.21.5",
|
| 357 |
+
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
|
| 358 |
+
"integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
|
| 359 |
"cpu": [
|
| 360 |
"arm"
|
| 361 |
],
|
|
|
|
| 370 |
}
|
| 371 |
},
|
| 372 |
"node_modules/@esbuild/android-arm64": {
|
| 373 |
+
"version": "0.21.5",
|
| 374 |
+
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
|
| 375 |
+
"integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
|
| 376 |
"cpu": [
|
| 377 |
"arm64"
|
| 378 |
],
|
|
|
|
| 387 |
}
|
| 388 |
},
|
| 389 |
"node_modules/@esbuild/android-x64": {
|
| 390 |
+
"version": "0.21.5",
|
| 391 |
+
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
|
| 392 |
+
"integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
|
| 393 |
"cpu": [
|
| 394 |
"x64"
|
| 395 |
],
|
|
|
|
| 404 |
}
|
| 405 |
},
|
| 406 |
"node_modules/@esbuild/darwin-arm64": {
|
| 407 |
+
"version": "0.21.5",
|
| 408 |
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
|
| 409 |
+
"integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
|
| 410 |
"cpu": [
|
| 411 |
"arm64"
|
| 412 |
],
|
|
|
|
| 421 |
}
|
| 422 |
},
|
| 423 |
"node_modules/@esbuild/darwin-x64": {
|
| 424 |
+
"version": "0.21.5",
|
| 425 |
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
|
| 426 |
+
"integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
|
| 427 |
"cpu": [
|
| 428 |
"x64"
|
| 429 |
],
|
|
|
|
| 438 |
}
|
| 439 |
},
|
| 440 |
"node_modules/@esbuild/freebsd-arm64": {
|
| 441 |
+
"version": "0.21.5",
|
| 442 |
+
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
|
| 443 |
+
"integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
|
| 444 |
"cpu": [
|
| 445 |
"arm64"
|
| 446 |
],
|
|
|
|
| 455 |
}
|
| 456 |
},
|
| 457 |
"node_modules/@esbuild/freebsd-x64": {
|
| 458 |
+
"version": "0.21.5",
|
| 459 |
+
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
|
| 460 |
+
"integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
|
| 461 |
"cpu": [
|
| 462 |
"x64"
|
| 463 |
],
|
|
|
|
| 472 |
}
|
| 473 |
},
|
| 474 |
"node_modules/@esbuild/linux-arm": {
|
| 475 |
+
"version": "0.21.5",
|
| 476 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
|
| 477 |
+
"integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
|
| 478 |
"cpu": [
|
| 479 |
"arm"
|
| 480 |
],
|
|
|
|
| 489 |
}
|
| 490 |
},
|
| 491 |
"node_modules/@esbuild/linux-arm64": {
|
| 492 |
+
"version": "0.21.5",
|
| 493 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
|
| 494 |
+
"integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
|
| 495 |
"cpu": [
|
| 496 |
"arm64"
|
| 497 |
],
|
|
|
|
| 506 |
}
|
| 507 |
},
|
| 508 |
"node_modules/@esbuild/linux-ia32": {
|
| 509 |
+
"version": "0.21.5",
|
| 510 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
|
| 511 |
+
"integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
|
| 512 |
"cpu": [
|
| 513 |
"ia32"
|
| 514 |
],
|
|
|
|
| 523 |
}
|
| 524 |
},
|
| 525 |
"node_modules/@esbuild/linux-loong64": {
|
| 526 |
+
"version": "0.21.5",
|
| 527 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
|
| 528 |
+
"integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
|
| 529 |
"cpu": [
|
| 530 |
"loong64"
|
| 531 |
],
|
|
|
|
| 540 |
}
|
| 541 |
},
|
| 542 |
"node_modules/@esbuild/linux-mips64el": {
|
| 543 |
+
"version": "0.21.5",
|
| 544 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
|
| 545 |
+
"integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
|
| 546 |
"cpu": [
|
| 547 |
"mips64el"
|
| 548 |
],
|
|
|
|
| 557 |
}
|
| 558 |
},
|
| 559 |
"node_modules/@esbuild/linux-ppc64": {
|
| 560 |
+
"version": "0.21.5",
|
| 561 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
|
| 562 |
+
"integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
|
| 563 |
"cpu": [
|
| 564 |
"ppc64"
|
| 565 |
],
|
|
|
|
| 574 |
}
|
| 575 |
},
|
| 576 |
"node_modules/@esbuild/linux-riscv64": {
|
| 577 |
+
"version": "0.21.5",
|
| 578 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
|
| 579 |
+
"integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
|
| 580 |
"cpu": [
|
| 581 |
"riscv64"
|
| 582 |
],
|
|
|
|
| 591 |
}
|
| 592 |
},
|
| 593 |
"node_modules/@esbuild/linux-s390x": {
|
| 594 |
+
"version": "0.21.5",
|
| 595 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
|
| 596 |
+
"integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
|
| 597 |
"cpu": [
|
| 598 |
"s390x"
|
| 599 |
],
|
|
|
|
| 608 |
}
|
| 609 |
},
|
| 610 |
"node_modules/@esbuild/linux-x64": {
|
| 611 |
+
"version": "0.21.5",
|
| 612 |
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
|
| 613 |
+
"integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
|
| 614 |
"cpu": [
|
| 615 |
"x64"
|
| 616 |
],
|
|
|
|
| 625 |
}
|
| 626 |
},
|
| 627 |
"node_modules/@esbuild/netbsd-x64": {
|
| 628 |
+
"version": "0.21.5",
|
| 629 |
+
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
|
| 630 |
+
"integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
|
| 631 |
"cpu": [
|
| 632 |
"x64"
|
| 633 |
],
|
|
|
|
| 642 |
}
|
| 643 |
},
|
| 644 |
"node_modules/@esbuild/openbsd-x64": {
|
| 645 |
+
"version": "0.21.5",
|
| 646 |
+
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
|
| 647 |
+
"integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
|
| 648 |
"cpu": [
|
| 649 |
"x64"
|
| 650 |
],
|
|
|
|
| 659 |
}
|
| 660 |
},
|
| 661 |
"node_modules/@esbuild/sunos-x64": {
|
| 662 |
+
"version": "0.21.5",
|
| 663 |
+
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
|
| 664 |
+
"integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
|
| 665 |
"cpu": [
|
| 666 |
"x64"
|
| 667 |
],
|
|
|
|
| 676 |
}
|
| 677 |
},
|
| 678 |
"node_modules/@esbuild/win32-arm64": {
|
| 679 |
+
"version": "0.21.5",
|
| 680 |
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
|
| 681 |
+
"integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
|
| 682 |
"cpu": [
|
| 683 |
"arm64"
|
| 684 |
],
|
|
|
|
| 693 |
}
|
| 694 |
},
|
| 695 |
"node_modules/@esbuild/win32-ia32": {
|
| 696 |
+
"version": "0.21.5",
|
| 697 |
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
|
| 698 |
+
"integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
|
| 699 |
"cpu": [
|
| 700 |
"ia32"
|
| 701 |
],
|
|
|
|
| 710 |
}
|
| 711 |
},
|
| 712 |
"node_modules/@esbuild/win32-x64": {
|
| 713 |
+
"version": "0.21.5",
|
| 714 |
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
|
| 715 |
+
"integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
|
| 716 |
"cpu": [
|
| 717 |
"x64"
|
| 718 |
],
|
|
|
|
| 730 |
"version": "8.0.2",
|
| 731 |
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
| 732 |
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
| 733 |
+
"dev": true,
|
| 734 |
"license": "ISC",
|
| 735 |
"dependencies": {
|
| 736 |
"string-width": "^5.1.2",
|
|
|
|
| 748 |
"version": "0.3.12",
|
| 749 |
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
| 750 |
"integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
|
| 751 |
+
"dev": true,
|
| 752 |
"license": "MIT",
|
| 753 |
"dependencies": {
|
| 754 |
"@jridgewell/sourcemap-codec": "^1.5.0",
|
|
|
|
| 759 |
"version": "3.1.2",
|
| 760 |
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
| 761 |
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
| 762 |
+
"dev": true,
|
| 763 |
"license": "MIT",
|
| 764 |
"engines": {
|
| 765 |
"node": ">=6.0.0"
|
|
|
|
| 769 |
"version": "1.5.4",
|
| 770 |
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
|
| 771 |
"integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
|
| 772 |
+
"dev": true,
|
| 773 |
"license": "MIT"
|
| 774 |
},
|
| 775 |
"node_modules/@jridgewell/trace-mapping": {
|
| 776 |
"version": "0.3.29",
|
| 777 |
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
|
| 778 |
"integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
|
| 779 |
+
"dev": true,
|
| 780 |
"license": "MIT",
|
| 781 |
"dependencies": {
|
| 782 |
"@jridgewell/resolve-uri": "^3.1.0",
|
|
|
|
| 787 |
"version": "2.1.5",
|
| 788 |
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
| 789 |
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
| 790 |
+
"dev": true,
|
| 791 |
"license": "MIT",
|
| 792 |
"dependencies": {
|
| 793 |
"@nodelib/fs.stat": "2.0.5",
|
|
|
|
| 801 |
"version": "2.0.5",
|
| 802 |
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
| 803 |
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
|
| 804 |
+
"dev": true,
|
| 805 |
"license": "MIT",
|
| 806 |
"engines": {
|
| 807 |
"node": ">= 8"
|
|
|
|
| 811 |
"version": "1.2.8",
|
| 812 |
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
| 813 |
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
| 814 |
+
"dev": true,
|
| 815 |
"license": "MIT",
|
| 816 |
"dependencies": {
|
| 817 |
"@nodelib/fs.scandir": "2.1.5",
|
|
|
|
| 825 |
"version": "0.11.0",
|
| 826 |
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
| 827 |
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
| 828 |
+
"dev": true,
|
| 829 |
"license": "MIT",
|
| 830 |
"optional": true,
|
| 831 |
"engines": {
|
|
|
|
| 839 |
"dev": true,
|
| 840 |
"license": "MIT"
|
| 841 |
},
|
| 842 |
+
"node_modules/@rollup/rollup-android-arm-eabi": {
|
| 843 |
+
"version": "4.45.1",
|
| 844 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz",
|
| 845 |
+
"integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==",
|
| 846 |
+
"cpu": [
|
| 847 |
+
"arm"
|
| 848 |
+
],
|
| 849 |
+
"dev": true,
|
| 850 |
+
"license": "MIT",
|
| 851 |
+
"optional": true,
|
| 852 |
+
"os": [
|
| 853 |
+
"android"
|
| 854 |
+
]
|
| 855 |
+
},
|
| 856 |
+
"node_modules/@rollup/rollup-android-arm64": {
|
| 857 |
+
"version": "4.45.1",
|
| 858 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz",
|
| 859 |
+
"integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==",
|
| 860 |
+
"cpu": [
|
| 861 |
+
"arm64"
|
| 862 |
+
],
|
| 863 |
+
"dev": true,
|
| 864 |
+
"license": "MIT",
|
| 865 |
+
"optional": true,
|
| 866 |
+
"os": [
|
| 867 |
+
"android"
|
| 868 |
+
]
|
| 869 |
+
},
|
| 870 |
+
"node_modules/@rollup/rollup-darwin-arm64": {
|
| 871 |
+
"version": "4.45.1",
|
| 872 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz",
|
| 873 |
+
"integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==",
|
| 874 |
+
"cpu": [
|
| 875 |
+
"arm64"
|
| 876 |
+
],
|
| 877 |
+
"dev": true,
|
| 878 |
+
"license": "MIT",
|
| 879 |
+
"optional": true,
|
| 880 |
+
"os": [
|
| 881 |
+
"darwin"
|
| 882 |
+
]
|
| 883 |
+
},
|
| 884 |
+
"node_modules/@rollup/rollup-darwin-x64": {
|
| 885 |
+
"version": "4.45.1",
|
| 886 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz",
|
| 887 |
+
"integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==",
|
| 888 |
+
"cpu": [
|
| 889 |
+
"x64"
|
| 890 |
+
],
|
| 891 |
+
"dev": true,
|
| 892 |
+
"license": "MIT",
|
| 893 |
+
"optional": true,
|
| 894 |
+
"os": [
|
| 895 |
+
"darwin"
|
| 896 |
+
]
|
| 897 |
+
},
|
| 898 |
+
"node_modules/@rollup/rollup-freebsd-arm64": {
|
| 899 |
+
"version": "4.45.1",
|
| 900 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz",
|
| 901 |
+
"integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==",
|
| 902 |
+
"cpu": [
|
| 903 |
+
"arm64"
|
| 904 |
+
],
|
| 905 |
+
"dev": true,
|
| 906 |
+
"license": "MIT",
|
| 907 |
+
"optional": true,
|
| 908 |
+
"os": [
|
| 909 |
+
"freebsd"
|
| 910 |
+
]
|
| 911 |
+
},
|
| 912 |
+
"node_modules/@rollup/rollup-freebsd-x64": {
|
| 913 |
+
"version": "4.45.1",
|
| 914 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz",
|
| 915 |
+
"integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==",
|
| 916 |
+
"cpu": [
|
| 917 |
+
"x64"
|
| 918 |
+
],
|
| 919 |
+
"dev": true,
|
| 920 |
+
"license": "MIT",
|
| 921 |
+
"optional": true,
|
| 922 |
+
"os": [
|
| 923 |
+
"freebsd"
|
| 924 |
+
]
|
| 925 |
+
},
|
| 926 |
+
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
| 927 |
+
"version": "4.45.1",
|
| 928 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz",
|
| 929 |
+
"integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==",
|
| 930 |
+
"cpu": [
|
| 931 |
+
"arm"
|
| 932 |
+
],
|
| 933 |
+
"dev": true,
|
| 934 |
+
"license": "MIT",
|
| 935 |
+
"optional": true,
|
| 936 |
+
"os": [
|
| 937 |
+
"linux"
|
| 938 |
+
]
|
| 939 |
+
},
|
| 940 |
+
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
| 941 |
+
"version": "4.45.1",
|
| 942 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz",
|
| 943 |
+
"integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==",
|
| 944 |
+
"cpu": [
|
| 945 |
+
"arm"
|
| 946 |
+
],
|
| 947 |
+
"dev": true,
|
| 948 |
+
"license": "MIT",
|
| 949 |
+
"optional": true,
|
| 950 |
+
"os": [
|
| 951 |
+
"linux"
|
| 952 |
+
]
|
| 953 |
+
},
|
| 954 |
+
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
| 955 |
+
"version": "4.45.1",
|
| 956 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz",
|
| 957 |
+
"integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==",
|
| 958 |
+
"cpu": [
|
| 959 |
+
"arm64"
|
| 960 |
+
],
|
| 961 |
+
"dev": true,
|
| 962 |
+
"license": "MIT",
|
| 963 |
+
"optional": true,
|
| 964 |
+
"os": [
|
| 965 |
+
"linux"
|
| 966 |
+
]
|
| 967 |
+
},
|
| 968 |
+
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
| 969 |
+
"version": "4.45.1",
|
| 970 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz",
|
| 971 |
+
"integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==",
|
| 972 |
+
"cpu": [
|
| 973 |
+
"arm64"
|
| 974 |
+
],
|
| 975 |
+
"dev": true,
|
| 976 |
+
"license": "MIT",
|
| 977 |
+
"optional": true,
|
| 978 |
+
"os": [
|
| 979 |
+
"linux"
|
| 980 |
+
]
|
| 981 |
+
},
|
| 982 |
+
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
|
| 983 |
+
"version": "4.45.1",
|
| 984 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz",
|
| 985 |
+
"integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==",
|
| 986 |
+
"cpu": [
|
| 987 |
+
"loong64"
|
| 988 |
+
],
|
| 989 |
+
"dev": true,
|
| 990 |
+
"license": "MIT",
|
| 991 |
+
"optional": true,
|
| 992 |
+
"os": [
|
| 993 |
+
"linux"
|
| 994 |
+
]
|
| 995 |
+
},
|
| 996 |
+
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
| 997 |
+
"version": "4.45.1",
|
| 998 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz",
|
| 999 |
+
"integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==",
|
| 1000 |
+
"cpu": [
|
| 1001 |
+
"ppc64"
|
| 1002 |
+
],
|
| 1003 |
+
"dev": true,
|
| 1004 |
+
"license": "MIT",
|
| 1005 |
+
"optional": true,
|
| 1006 |
+
"os": [
|
| 1007 |
+
"linux"
|
| 1008 |
+
]
|
| 1009 |
+
},
|
| 1010 |
+
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
| 1011 |
+
"version": "4.45.1",
|
| 1012 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz",
|
| 1013 |
+
"integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==",
|
| 1014 |
+
"cpu": [
|
| 1015 |
+
"riscv64"
|
| 1016 |
+
],
|
| 1017 |
+
"dev": true,
|
| 1018 |
+
"license": "MIT",
|
| 1019 |
+
"optional": true,
|
| 1020 |
+
"os": [
|
| 1021 |
+
"linux"
|
| 1022 |
+
]
|
| 1023 |
+
},
|
| 1024 |
+
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
| 1025 |
+
"version": "4.45.1",
|
| 1026 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz",
|
| 1027 |
+
"integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==",
|
| 1028 |
+
"cpu": [
|
| 1029 |
+
"riscv64"
|
| 1030 |
+
],
|
| 1031 |
+
"dev": true,
|
| 1032 |
+
"license": "MIT",
|
| 1033 |
+
"optional": true,
|
| 1034 |
+
"os": [
|
| 1035 |
+
"linux"
|
| 1036 |
+
]
|
| 1037 |
+
},
|
| 1038 |
+
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
| 1039 |
+
"version": "4.45.1",
|
| 1040 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz",
|
| 1041 |
+
"integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==",
|
| 1042 |
+
"cpu": [
|
| 1043 |
+
"s390x"
|
| 1044 |
+
],
|
| 1045 |
+
"dev": true,
|
| 1046 |
+
"license": "MIT",
|
| 1047 |
+
"optional": true,
|
| 1048 |
+
"os": [
|
| 1049 |
+
"linux"
|
| 1050 |
+
]
|
| 1051 |
+
},
|
| 1052 |
+
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
| 1053 |
+
"version": "4.45.1",
|
| 1054 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz",
|
| 1055 |
+
"integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==",
|
| 1056 |
+
"cpu": [
|
| 1057 |
+
"x64"
|
| 1058 |
+
],
|
| 1059 |
+
"dev": true,
|
| 1060 |
+
"license": "MIT",
|
| 1061 |
+
"optional": true,
|
| 1062 |
+
"os": [
|
| 1063 |
+
"linux"
|
| 1064 |
+
]
|
| 1065 |
+
},
|
| 1066 |
+
"node_modules/@rollup/rollup-linux-x64-musl": {
|
| 1067 |
+
"version": "4.45.1",
|
| 1068 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz",
|
| 1069 |
+
"integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==",
|
| 1070 |
+
"cpu": [
|
| 1071 |
+
"x64"
|
| 1072 |
+
],
|
| 1073 |
+
"dev": true,
|
| 1074 |
+
"license": "MIT",
|
| 1075 |
+
"optional": true,
|
| 1076 |
+
"os": [
|
| 1077 |
+
"linux"
|
| 1078 |
+
]
|
| 1079 |
+
},
|
| 1080 |
+
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
| 1081 |
+
"version": "4.45.1",
|
| 1082 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz",
|
| 1083 |
+
"integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==",
|
| 1084 |
+
"cpu": [
|
| 1085 |
+
"arm64"
|
| 1086 |
+
],
|
| 1087 |
+
"dev": true,
|
| 1088 |
+
"license": "MIT",
|
| 1089 |
+
"optional": true,
|
| 1090 |
+
"os": [
|
| 1091 |
+
"win32"
|
| 1092 |
+
]
|
| 1093 |
+
},
|
| 1094 |
+
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
| 1095 |
+
"version": "4.45.1",
|
| 1096 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz",
|
| 1097 |
+
"integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==",
|
| 1098 |
+
"cpu": [
|
| 1099 |
+
"ia32"
|
| 1100 |
+
],
|
| 1101 |
+
"dev": true,
|
| 1102 |
+
"license": "MIT",
|
| 1103 |
+
"optional": true,
|
| 1104 |
+
"os": [
|
| 1105 |
+
"win32"
|
| 1106 |
+
]
|
| 1107 |
+
},
|
| 1108 |
+
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
| 1109 |
+
"version": "4.45.1",
|
| 1110 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz",
|
| 1111 |
+
"integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==",
|
| 1112 |
+
"cpu": [
|
| 1113 |
+
"x64"
|
| 1114 |
+
],
|
| 1115 |
+
"dev": true,
|
| 1116 |
+
"license": "MIT",
|
| 1117 |
+
"optional": true,
|
| 1118 |
+
"os": [
|
| 1119 |
+
"win32"
|
| 1120 |
+
]
|
| 1121 |
+
},
|
| 1122 |
"node_modules/@types/babel__core": {
|
| 1123 |
"version": "7.20.5",
|
| 1124 |
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
|
|
|
|
| 1164 |
"@babel/types": "^7.20.7"
|
| 1165 |
}
|
| 1166 |
},
|
| 1167 |
+
"node_modules/@types/estree": {
|
| 1168 |
+
"version": "1.0.8",
|
| 1169 |
+
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
|
| 1170 |
+
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
|
| 1171 |
+
"dev": true,
|
| 1172 |
+
"license": "MIT"
|
| 1173 |
+
},
|
| 1174 |
+
"node_modules/@types/node": {
|
| 1175 |
+
"version": "24.0.15",
|
| 1176 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.15.tgz",
|
| 1177 |
+
"integrity": "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==",
|
| 1178 |
+
"dev": true,
|
| 1179 |
+
"license": "MIT",
|
| 1180 |
+
"dependencies": {
|
| 1181 |
+
"undici-types": "~7.8.0"
|
| 1182 |
+
}
|
| 1183 |
+
},
|
| 1184 |
+
"node_modules/@types/papaparse": {
|
| 1185 |
+
"version": "5.3.16",
|
| 1186 |
+
"resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.16.tgz",
|
| 1187 |
+
"integrity": "sha512-T3VuKMC2H0lgsjI9buTB3uuKj3EMD2eap1MOuEQuBQ44EnDx/IkGhU6EwiTf9zG3za4SKlmwKAImdDKdNnCsXg==",
|
| 1188 |
+
"dev": true,
|
| 1189 |
+
"license": "MIT",
|
| 1190 |
+
"dependencies": {
|
| 1191 |
+
"@types/node": "*"
|
| 1192 |
+
}
|
| 1193 |
+
},
|
| 1194 |
"node_modules/@types/prop-types": {
|
| 1195 |
"version": "15.7.15",
|
| 1196 |
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
|
|
|
|
| 1244 |
"version": "6.1.0",
|
| 1245 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
| 1246 |
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
| 1247 |
+
"dev": true,
|
| 1248 |
"license": "MIT",
|
| 1249 |
"engines": {
|
| 1250 |
"node": ">=12"
|
|
|
|
| 1257 |
"version": "6.2.1",
|
| 1258 |
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
| 1259 |
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
| 1260 |
+
"dev": true,
|
| 1261 |
"license": "MIT",
|
| 1262 |
"engines": {
|
| 1263 |
"node": ">=12"
|
|
|
|
| 1270 |
"version": "1.3.0",
|
| 1271 |
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
|
| 1272 |
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
|
| 1273 |
+
"dev": true,
|
| 1274 |
"license": "MIT"
|
| 1275 |
},
|
| 1276 |
"node_modules/anymatch": {
|
| 1277 |
"version": "3.1.3",
|
| 1278 |
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
| 1279 |
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
| 1280 |
+
"dev": true,
|
| 1281 |
"license": "ISC",
|
| 1282 |
"dependencies": {
|
| 1283 |
"normalize-path": "^3.0.0",
|
|
|
|
| 1291 |
"version": "5.0.2",
|
| 1292 |
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
| 1293 |
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
| 1294 |
+
"dev": true,
|
| 1295 |
"license": "MIT"
|
| 1296 |
},
|
| 1297 |
"node_modules/asynckit": {
|
|
|
|
| 1353 |
"version": "1.0.2",
|
| 1354 |
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
| 1355 |
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
| 1356 |
+
"dev": true,
|
| 1357 |
"license": "MIT"
|
| 1358 |
},
|
| 1359 |
"node_modules/binary-extensions": {
|
| 1360 |
"version": "2.3.0",
|
| 1361 |
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
| 1362 |
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
| 1363 |
+
"dev": true,
|
| 1364 |
"license": "MIT",
|
| 1365 |
"engines": {
|
| 1366 |
"node": ">=8"
|
|
|
|
| 1373 |
"version": "2.0.2",
|
| 1374 |
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
| 1375 |
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
| 1376 |
+
"dev": true,
|
| 1377 |
"license": "MIT",
|
| 1378 |
"dependencies": {
|
| 1379 |
"balanced-match": "^1.0.0"
|
|
|
|
| 1383 |
"version": "3.0.3",
|
| 1384 |
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
| 1385 |
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
| 1386 |
+
"dev": true,
|
| 1387 |
"license": "MIT",
|
| 1388 |
"dependencies": {
|
| 1389 |
"fill-range": "^7.1.1"
|
|
|
|
| 1442 |
"version": "2.0.1",
|
| 1443 |
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
| 1444 |
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
|
| 1445 |
+
"dev": true,
|
| 1446 |
"license": "MIT",
|
| 1447 |
"engines": {
|
| 1448 |
"node": ">= 6"
|
|
|
|
| 1473 |
"version": "3.6.0",
|
| 1474 |
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
| 1475 |
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
| 1476 |
+
"dev": true,
|
| 1477 |
"license": "MIT",
|
| 1478 |
"dependencies": {
|
| 1479 |
"anymatch": "~3.1.2",
|
|
|
|
| 1498 |
"version": "5.1.2",
|
| 1499 |
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
| 1500 |
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
| 1501 |
+
"dev": true,
|
| 1502 |
"license": "ISC",
|
| 1503 |
"dependencies": {
|
| 1504 |
"is-glob": "^4.0.1"
|
|
|
|
| 1511 |
"version": "2.0.1",
|
| 1512 |
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
| 1513 |
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
| 1514 |
+
"dev": true,
|
| 1515 |
"license": "MIT",
|
| 1516 |
"dependencies": {
|
| 1517 |
"color-name": "~1.1.4"
|
|
|
|
| 1524 |
"version": "1.1.4",
|
| 1525 |
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
| 1526 |
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
| 1527 |
+
"dev": true,
|
| 1528 |
"license": "MIT"
|
| 1529 |
},
|
| 1530 |
"node_modules/combined-stream": {
|
|
|
|
| 1543 |
"version": "4.1.1",
|
| 1544 |
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
| 1545 |
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
| 1546 |
+
"dev": true,
|
| 1547 |
"license": "MIT",
|
| 1548 |
"engines": {
|
| 1549 |
"node": ">= 6"
|
|
|
|
| 1560 |
"version": "7.0.6",
|
| 1561 |
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
| 1562 |
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
| 1563 |
+
"dev": true,
|
| 1564 |
"license": "MIT",
|
| 1565 |
"dependencies": {
|
| 1566 |
"path-key": "^3.1.0",
|
|
|
|
| 1575 |
"version": "3.0.0",
|
| 1576 |
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
| 1577 |
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
|
| 1578 |
+
"dev": true,
|
| 1579 |
"license": "MIT",
|
| 1580 |
"bin": {
|
| 1581 |
"cssesc": "bin/cssesc"
|
|
|
|
| 1622 |
"version": "1.2.2",
|
| 1623 |
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
| 1624 |
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
|
| 1625 |
+
"dev": true,
|
| 1626 |
"license": "Apache-2.0"
|
| 1627 |
},
|
| 1628 |
"node_modules/dlv": {
|
| 1629 |
"version": "1.1.3",
|
| 1630 |
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
| 1631 |
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
|
| 1632 |
+
"dev": true,
|
| 1633 |
"license": "MIT"
|
| 1634 |
},
|
| 1635 |
"node_modules/dunder-proto": {
|
|
|
|
| 1650 |
"version": "0.2.0",
|
| 1651 |
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
| 1652 |
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
|
| 1653 |
+
"dev": true,
|
| 1654 |
"license": "MIT"
|
| 1655 |
},
|
| 1656 |
"node_modules/electron-to-chromium": {
|
|
|
|
| 1664 |
"version": "9.2.2",
|
| 1665 |
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
| 1666 |
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
| 1667 |
+
"dev": true,
|
| 1668 |
"license": "MIT"
|
| 1669 |
},
|
| 1670 |
"node_modules/es-define-property": {
|
|
|
|
| 1713 |
}
|
| 1714 |
},
|
| 1715 |
"node_modules/esbuild": {
|
| 1716 |
+
"version": "0.21.5",
|
| 1717 |
+
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
|
| 1718 |
+
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
|
| 1719 |
"dev": true,
|
| 1720 |
"hasInstallScript": true,
|
| 1721 |
"license": "MIT",
|
|
|
|
| 1726 |
"node": ">=12"
|
| 1727 |
},
|
| 1728 |
"optionalDependencies": {
|
| 1729 |
+
"@esbuild/aix-ppc64": "0.21.5",
|
| 1730 |
+
"@esbuild/android-arm": "0.21.5",
|
| 1731 |
+
"@esbuild/android-arm64": "0.21.5",
|
| 1732 |
+
"@esbuild/android-x64": "0.21.5",
|
| 1733 |
+
"@esbuild/darwin-arm64": "0.21.5",
|
| 1734 |
+
"@esbuild/darwin-x64": "0.21.5",
|
| 1735 |
+
"@esbuild/freebsd-arm64": "0.21.5",
|
| 1736 |
+
"@esbuild/freebsd-x64": "0.21.5",
|
| 1737 |
+
"@esbuild/linux-arm": "0.21.5",
|
| 1738 |
+
"@esbuild/linux-arm64": "0.21.5",
|
| 1739 |
+
"@esbuild/linux-ia32": "0.21.5",
|
| 1740 |
+
"@esbuild/linux-loong64": "0.21.5",
|
| 1741 |
+
"@esbuild/linux-mips64el": "0.21.5",
|
| 1742 |
+
"@esbuild/linux-ppc64": "0.21.5",
|
| 1743 |
+
"@esbuild/linux-riscv64": "0.21.5",
|
| 1744 |
+
"@esbuild/linux-s390x": "0.21.5",
|
| 1745 |
+
"@esbuild/linux-x64": "0.21.5",
|
| 1746 |
+
"@esbuild/netbsd-x64": "0.21.5",
|
| 1747 |
+
"@esbuild/openbsd-x64": "0.21.5",
|
| 1748 |
+
"@esbuild/sunos-x64": "0.21.5",
|
| 1749 |
+
"@esbuild/win32-arm64": "0.21.5",
|
| 1750 |
+
"@esbuild/win32-ia32": "0.21.5",
|
| 1751 |
+
"@esbuild/win32-x64": "0.21.5"
|
| 1752 |
}
|
| 1753 |
},
|
| 1754 |
"node_modules/escalade": {
|
|
|
|
| 1765 |
"version": "3.3.3",
|
| 1766 |
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
|
| 1767 |
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
|
| 1768 |
+
"dev": true,
|
| 1769 |
"license": "MIT",
|
| 1770 |
"dependencies": {
|
| 1771 |
"@nodelib/fs.stat": "^2.0.2",
|
|
|
|
| 1782 |
"version": "5.1.2",
|
| 1783 |
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
| 1784 |
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
| 1785 |
+
"dev": true,
|
| 1786 |
"license": "ISC",
|
| 1787 |
"dependencies": {
|
| 1788 |
"is-glob": "^4.0.1"
|
|
|
|
| 1795 |
"version": "1.19.1",
|
| 1796 |
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
|
| 1797 |
"integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
|
| 1798 |
+
"dev": true,
|
| 1799 |
"license": "ISC",
|
| 1800 |
"dependencies": {
|
| 1801 |
"reusify": "^1.0.4"
|
|
|
|
| 1805 |
"version": "7.1.1",
|
| 1806 |
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
| 1807 |
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
| 1808 |
+
"dev": true,
|
| 1809 |
"license": "MIT",
|
| 1810 |
"dependencies": {
|
| 1811 |
"to-regex-range": "^5.0.1"
|
|
|
|
| 1838 |
"version": "3.3.1",
|
| 1839 |
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
|
| 1840 |
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
|
| 1841 |
+
"dev": true,
|
| 1842 |
"license": "ISC",
|
| 1843 |
"dependencies": {
|
| 1844 |
"cross-spawn": "^7.0.6",
|
|
|
|
| 1885 |
"version": "2.3.3",
|
| 1886 |
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
| 1887 |
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
| 1888 |
+
"dev": true,
|
| 1889 |
"hasInstallScript": true,
|
| 1890 |
"license": "MIT",
|
| 1891 |
"optional": true,
|
|
|
|
| 1956 |
"version": "10.4.5",
|
| 1957 |
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
| 1958 |
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
| 1959 |
+
"dev": true,
|
| 1960 |
"license": "ISC",
|
| 1961 |
"dependencies": {
|
| 1962 |
"foreground-child": "^3.1.0",
|
|
|
|
| 1977 |
"version": "6.0.2",
|
| 1978 |
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
| 1979 |
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
| 1980 |
+
"dev": true,
|
| 1981 |
"license": "ISC",
|
| 1982 |
"dependencies": {
|
| 1983 |
"is-glob": "^4.0.3"
|
|
|
|
| 2041 |
"version": "2.1.0",
|
| 2042 |
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
| 2043 |
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
| 2044 |
+
"dev": true,
|
| 2045 |
"license": "MIT",
|
| 2046 |
"dependencies": {
|
| 2047 |
"binary-extensions": "^2.0.0"
|
|
|
|
| 2054 |
"version": "2.16.1",
|
| 2055 |
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
|
| 2056 |
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
|
| 2057 |
+
"dev": true,
|
| 2058 |
"license": "MIT",
|
| 2059 |
"dependencies": {
|
| 2060 |
"hasown": "^2.0.2"
|
|
|
|
| 2070 |
"version": "2.1.1",
|
| 2071 |
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
| 2072 |
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
|
| 2073 |
+
"dev": true,
|
| 2074 |
"license": "MIT",
|
| 2075 |
"engines": {
|
| 2076 |
"node": ">=0.10.0"
|
|
|
|
| 2080 |
"version": "3.0.0",
|
| 2081 |
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
| 2082 |
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
| 2083 |
+
"dev": true,
|
| 2084 |
"license": "MIT",
|
| 2085 |
"engines": {
|
| 2086 |
"node": ">=8"
|
|
|
|
| 2090 |
"version": "4.0.3",
|
| 2091 |
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
| 2092 |
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
| 2093 |
+
"dev": true,
|
| 2094 |
"license": "MIT",
|
| 2095 |
"dependencies": {
|
| 2096 |
"is-extglob": "^2.1.1"
|
|
|
|
| 2103 |
"version": "7.0.0",
|
| 2104 |
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
| 2105 |
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
| 2106 |
+
"dev": true,
|
| 2107 |
"license": "MIT",
|
| 2108 |
"engines": {
|
| 2109 |
"node": ">=0.12.0"
|
|
|
|
| 2113 |
"version": "2.0.0",
|
| 2114 |
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
| 2115 |
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
| 2116 |
+
"dev": true,
|
| 2117 |
"license": "ISC"
|
| 2118 |
},
|
| 2119 |
"node_modules/jackspeak": {
|
| 2120 |
"version": "3.4.3",
|
| 2121 |
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
|
| 2122 |
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
| 2123 |
+
"dev": true,
|
| 2124 |
"license": "BlueOak-1.0.0",
|
| 2125 |
"dependencies": {
|
| 2126 |
"@isaacs/cliui": "^8.0.2"
|
|
|
|
| 2136 |
"version": "1.21.7",
|
| 2137 |
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
|
| 2138 |
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
|
| 2139 |
+
"dev": true,
|
| 2140 |
"license": "MIT",
|
| 2141 |
"bin": {
|
| 2142 |
"jiti": "bin/jiti.js"
|
|
|
|
| 2178 |
"version": "3.1.3",
|
| 2179 |
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
|
| 2180 |
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
|
| 2181 |
+
"dev": true,
|
| 2182 |
"license": "MIT",
|
| 2183 |
"engines": {
|
| 2184 |
"node": ">=14"
|
|
|
|
| 2191 |
"version": "1.2.4",
|
| 2192 |
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
| 2193 |
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
|
| 2194 |
+
"dev": true,
|
| 2195 |
"license": "MIT"
|
| 2196 |
},
|
| 2197 |
"node_modules/loose-envify": {
|
|
|
|
| 2229 |
"version": "1.4.1",
|
| 2230 |
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
| 2231 |
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
|
| 2232 |
+
"dev": true,
|
| 2233 |
"license": "MIT",
|
| 2234 |
"engines": {
|
| 2235 |
"node": ">= 8"
|
|
|
|
| 2239 |
"version": "4.0.8",
|
| 2240 |
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
| 2241 |
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
| 2242 |
+
"dev": true,
|
| 2243 |
"license": "MIT",
|
| 2244 |
"dependencies": {
|
| 2245 |
"braces": "^3.0.3",
|
|
|
|
| 2274 |
"version": "9.0.5",
|
| 2275 |
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
| 2276 |
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
| 2277 |
+
"dev": true,
|
| 2278 |
"license": "ISC",
|
| 2279 |
"dependencies": {
|
| 2280 |
"brace-expansion": "^2.0.1"
|
|
|
|
| 2290 |
"version": "7.1.2",
|
| 2291 |
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
|
| 2292 |
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
| 2293 |
+
"dev": true,
|
| 2294 |
"license": "ISC",
|
| 2295 |
"engines": {
|
| 2296 |
"node": ">=16 || 14 >=14.17"
|
|
|
|
| 2307 |
"version": "2.7.0",
|
| 2308 |
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
|
| 2309 |
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
| 2310 |
+
"dev": true,
|
| 2311 |
"license": "MIT",
|
| 2312 |
"dependencies": {
|
| 2313 |
"any-promise": "^1.0.0",
|
|
|
|
| 2319 |
"version": "3.3.11",
|
| 2320 |
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
| 2321 |
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
|
| 2322 |
+
"dev": true,
|
| 2323 |
"funding": [
|
| 2324 |
{
|
| 2325 |
"type": "github",
|
|
|
|
| 2345 |
"version": "3.0.0",
|
| 2346 |
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
| 2347 |
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
| 2348 |
+
"dev": true,
|
| 2349 |
"license": "MIT",
|
| 2350 |
"engines": {
|
| 2351 |
"node": ">=0.10.0"
|
|
|
|
| 2365 |
"version": "4.1.1",
|
| 2366 |
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
| 2367 |
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
| 2368 |
+
"dev": true,
|
| 2369 |
"license": "MIT",
|
| 2370 |
"engines": {
|
| 2371 |
"node": ">=0.10.0"
|
|
|
|
| 2375 |
"version": "3.0.0",
|
| 2376 |
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
|
| 2377 |
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
|
| 2378 |
+
"dev": true,
|
| 2379 |
"license": "MIT",
|
| 2380 |
"engines": {
|
| 2381 |
"node": ">= 6"
|
|
|
|
| 2385 |
"version": "1.0.1",
|
| 2386 |
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
| 2387 |
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
| 2388 |
+
"dev": true,
|
| 2389 |
"license": "BlueOak-1.0.0"
|
| 2390 |
},
|
| 2391 |
+
"node_modules/papaparse": {
|
| 2392 |
+
"version": "5.5.3",
|
| 2393 |
+
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.3.tgz",
|
| 2394 |
+
"integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==",
|
| 2395 |
+
"license": "MIT"
|
| 2396 |
+
},
|
| 2397 |
"node_modules/path-key": {
|
| 2398 |
"version": "3.1.1",
|
| 2399 |
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
| 2400 |
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
| 2401 |
+
"dev": true,
|
| 2402 |
"license": "MIT",
|
| 2403 |
"engines": {
|
| 2404 |
"node": ">=8"
|
|
|
|
| 2408 |
"version": "1.0.7",
|
| 2409 |
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
| 2410 |
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
| 2411 |
+
"dev": true,
|
| 2412 |
"license": "MIT"
|
| 2413 |
},
|
| 2414 |
"node_modules/path-scurry": {
|
| 2415 |
"version": "1.11.1",
|
| 2416 |
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
|
| 2417 |
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
| 2418 |
+
"dev": true,
|
| 2419 |
"license": "BlueOak-1.0.0",
|
| 2420 |
"dependencies": {
|
| 2421 |
"lru-cache": "^10.2.0",
|
|
|
|
| 2432 |
"version": "10.4.3",
|
| 2433 |
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
|
| 2434 |
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
| 2435 |
+
"dev": true,
|
| 2436 |
"license": "ISC"
|
| 2437 |
},
|
| 2438 |
"node_modules/picocolors": {
|
| 2439 |
"version": "1.1.1",
|
| 2440 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
| 2441 |
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
| 2442 |
+
"dev": true,
|
| 2443 |
"license": "ISC"
|
| 2444 |
},
|
| 2445 |
"node_modules/picomatch": {
|
| 2446 |
"version": "2.3.1",
|
| 2447 |
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
| 2448 |
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
| 2449 |
+
"dev": true,
|
| 2450 |
"license": "MIT",
|
| 2451 |
"engines": {
|
| 2452 |
"node": ">=8.6"
|
|
|
|
| 2459 |
"version": "2.3.0",
|
| 2460 |
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
| 2461 |
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
| 2462 |
+
"dev": true,
|
| 2463 |
"license": "MIT",
|
| 2464 |
"engines": {
|
| 2465 |
"node": ">=0.10.0"
|
|
|
|
| 2469 |
"version": "4.0.7",
|
| 2470 |
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
|
| 2471 |
"integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
|
| 2472 |
+
"dev": true,
|
| 2473 |
"license": "MIT",
|
| 2474 |
"engines": {
|
| 2475 |
"node": ">= 6"
|
|
|
|
| 2479 |
"version": "8.5.6",
|
| 2480 |
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
|
| 2481 |
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
|
| 2482 |
+
"dev": true,
|
| 2483 |
"funding": [
|
| 2484 |
{
|
| 2485 |
"type": "opencollective",
|
|
|
|
| 2508 |
"version": "15.1.0",
|
| 2509 |
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
|
| 2510 |
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
| 2511 |
+
"dev": true,
|
| 2512 |
"license": "MIT",
|
| 2513 |
"dependencies": {
|
| 2514 |
"postcss-value-parser": "^4.0.0",
|
|
|
|
| 2526 |
"version": "4.0.1",
|
| 2527 |
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
|
| 2528 |
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
|
| 2529 |
+
"dev": true,
|
| 2530 |
"license": "MIT",
|
| 2531 |
"dependencies": {
|
| 2532 |
"camelcase-css": "^2.0.1"
|
|
|
|
| 2546 |
"version": "4.0.2",
|
| 2547 |
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
|
| 2548 |
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
|
| 2549 |
+
"dev": true,
|
| 2550 |
"funding": [
|
| 2551 |
{
|
| 2552 |
"type": "opencollective",
|
|
|
|
| 2582 |
"version": "6.2.0",
|
| 2583 |
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
|
| 2584 |
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
|
| 2585 |
+
"dev": true,
|
| 2586 |
"funding": [
|
| 2587 |
{
|
| 2588 |
"type": "opencollective",
|
|
|
|
| 2608 |
"version": "6.1.2",
|
| 2609 |
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
|
| 2610 |
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
|
| 2611 |
+
"dev": true,
|
| 2612 |
"license": "MIT",
|
| 2613 |
"dependencies": {
|
| 2614 |
"cssesc": "^3.0.0",
|
|
|
|
| 2622 |
"version": "4.2.0",
|
| 2623 |
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
| 2624 |
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
|
| 2625 |
+
"dev": true,
|
| 2626 |
"license": "MIT"
|
| 2627 |
},
|
| 2628 |
"node_modules/proxy-from-env": {
|
|
|
|
| 2635 |
"version": "1.2.3",
|
| 2636 |
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
| 2637 |
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
|
| 2638 |
+
"dev": true,
|
| 2639 |
"funding": [
|
| 2640 |
{
|
| 2641 |
"type": "github",
|
|
|
|
| 2691 |
"version": "1.0.0",
|
| 2692 |
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
| 2693 |
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
| 2694 |
+
"dev": true,
|
| 2695 |
"license": "MIT",
|
| 2696 |
"dependencies": {
|
| 2697 |
"pify": "^2.3.0"
|
|
|
|
| 2701 |
"version": "3.6.0",
|
| 2702 |
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
| 2703 |
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
| 2704 |
+
"dev": true,
|
| 2705 |
"license": "MIT",
|
| 2706 |
"dependencies": {
|
| 2707 |
"picomatch": "^2.2.1"
|
|
|
|
| 2714 |
"version": "1.22.10",
|
| 2715 |
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
|
| 2716 |
"integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
|
| 2717 |
+
"dev": true,
|
| 2718 |
"license": "MIT",
|
| 2719 |
"dependencies": {
|
| 2720 |
"is-core-module": "^2.16.0",
|
|
|
|
| 2735 |
"version": "1.1.0",
|
| 2736 |
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
|
| 2737 |
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
|
| 2738 |
+
"dev": true,
|
| 2739 |
"license": "MIT",
|
| 2740 |
"engines": {
|
| 2741 |
"iojs": ">=1.0.0",
|
|
|
|
| 2743 |
}
|
| 2744 |
},
|
| 2745 |
"node_modules/rollup": {
|
| 2746 |
+
"version": "4.45.1",
|
| 2747 |
+
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
|
| 2748 |
+
"integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==",
|
| 2749 |
"dev": true,
|
| 2750 |
"license": "MIT",
|
| 2751 |
+
"dependencies": {
|
| 2752 |
+
"@types/estree": "1.0.8"
|
| 2753 |
+
},
|
| 2754 |
"bin": {
|
| 2755 |
"rollup": "dist/bin/rollup"
|
| 2756 |
},
|
| 2757 |
"engines": {
|
| 2758 |
+
"node": ">=18.0.0",
|
| 2759 |
"npm": ">=8.0.0"
|
| 2760 |
},
|
| 2761 |
"optionalDependencies": {
|
| 2762 |
+
"@rollup/rollup-android-arm-eabi": "4.45.1",
|
| 2763 |
+
"@rollup/rollup-android-arm64": "4.45.1",
|
| 2764 |
+
"@rollup/rollup-darwin-arm64": "4.45.1",
|
| 2765 |
+
"@rollup/rollup-darwin-x64": "4.45.1",
|
| 2766 |
+
"@rollup/rollup-freebsd-arm64": "4.45.1",
|
| 2767 |
+
"@rollup/rollup-freebsd-x64": "4.45.1",
|
| 2768 |
+
"@rollup/rollup-linux-arm-gnueabihf": "4.45.1",
|
| 2769 |
+
"@rollup/rollup-linux-arm-musleabihf": "4.45.1",
|
| 2770 |
+
"@rollup/rollup-linux-arm64-gnu": "4.45.1",
|
| 2771 |
+
"@rollup/rollup-linux-arm64-musl": "4.45.1",
|
| 2772 |
+
"@rollup/rollup-linux-loongarch64-gnu": "4.45.1",
|
| 2773 |
+
"@rollup/rollup-linux-powerpc64le-gnu": "4.45.1",
|
| 2774 |
+
"@rollup/rollup-linux-riscv64-gnu": "4.45.1",
|
| 2775 |
+
"@rollup/rollup-linux-riscv64-musl": "4.45.1",
|
| 2776 |
+
"@rollup/rollup-linux-s390x-gnu": "4.45.1",
|
| 2777 |
+
"@rollup/rollup-linux-x64-gnu": "4.45.1",
|
| 2778 |
+
"@rollup/rollup-linux-x64-musl": "4.45.1",
|
| 2779 |
+
"@rollup/rollup-win32-arm64-msvc": "4.45.1",
|
| 2780 |
+
"@rollup/rollup-win32-ia32-msvc": "4.45.1",
|
| 2781 |
+
"@rollup/rollup-win32-x64-msvc": "4.45.1",
|
| 2782 |
"fsevents": "~2.3.2"
|
| 2783 |
}
|
| 2784 |
},
|
|
|
|
| 2786 |
"version": "1.2.0",
|
| 2787 |
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
| 2788 |
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
| 2789 |
+
"dev": true,
|
| 2790 |
"funding": [
|
| 2791 |
{
|
| 2792 |
"type": "github",
|
|
|
|
| 2829 |
"version": "2.0.0",
|
| 2830 |
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
| 2831 |
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
| 2832 |
+
"dev": true,
|
| 2833 |
"license": "MIT",
|
| 2834 |
"dependencies": {
|
| 2835 |
"shebang-regex": "^3.0.0"
|
|
|
|
| 2842 |
"version": "3.0.0",
|
| 2843 |
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
| 2844 |
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
| 2845 |
+
"dev": true,
|
| 2846 |
"license": "MIT",
|
| 2847 |
"engines": {
|
| 2848 |
"node": ">=8"
|
|
|
|
| 2852 |
"version": "4.1.0",
|
| 2853 |
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
| 2854 |
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
| 2855 |
+
"dev": true,
|
| 2856 |
"license": "ISC",
|
| 2857 |
"engines": {
|
| 2858 |
"node": ">=14"
|
|
|
|
| 2865 |
"version": "1.2.1",
|
| 2866 |
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
| 2867 |
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
| 2868 |
+
"dev": true,
|
| 2869 |
"license": "BSD-3-Clause",
|
| 2870 |
"engines": {
|
| 2871 |
"node": ">=0.10.0"
|
|
|
|
| 2875 |
"version": "5.1.2",
|
| 2876 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
| 2877 |
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
| 2878 |
+
"dev": true,
|
| 2879 |
"license": "MIT",
|
| 2880 |
"dependencies": {
|
| 2881 |
"eastasianwidth": "^0.2.0",
|
|
|
|
| 2894 |
"version": "4.2.3",
|
| 2895 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
| 2896 |
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
| 2897 |
+
"dev": true,
|
| 2898 |
"license": "MIT",
|
| 2899 |
"dependencies": {
|
| 2900 |
"emoji-regex": "^8.0.0",
|
|
|
|
| 2909 |
"version": "5.0.1",
|
| 2910 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 2911 |
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
| 2912 |
+
"dev": true,
|
| 2913 |
"license": "MIT",
|
| 2914 |
"engines": {
|
| 2915 |
"node": ">=8"
|
|
|
|
| 2919 |
"version": "8.0.0",
|
| 2920 |
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
| 2921 |
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
| 2922 |
+
"dev": true,
|
| 2923 |
"license": "MIT"
|
| 2924 |
},
|
| 2925 |
"node_modules/string-width-cjs/node_modules/strip-ansi": {
|
| 2926 |
"version": "6.0.1",
|
| 2927 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 2928 |
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
| 2929 |
+
"dev": true,
|
| 2930 |
"license": "MIT",
|
| 2931 |
"dependencies": {
|
| 2932 |
"ansi-regex": "^5.0.1"
|
|
|
|
| 2939 |
"version": "7.1.0",
|
| 2940 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
| 2941 |
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
| 2942 |
+
"dev": true,
|
| 2943 |
"license": "MIT",
|
| 2944 |
"dependencies": {
|
| 2945 |
"ansi-regex": "^6.0.1"
|
|
|
|
| 2956 |
"version": "6.0.1",
|
| 2957 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 2958 |
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
| 2959 |
+
"dev": true,
|
| 2960 |
"license": "MIT",
|
| 2961 |
"dependencies": {
|
| 2962 |
"ansi-regex": "^5.0.1"
|
|
|
|
| 2969 |
"version": "5.0.1",
|
| 2970 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 2971 |
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
| 2972 |
+
"dev": true,
|
| 2973 |
"license": "MIT",
|
| 2974 |
"engines": {
|
| 2975 |
"node": ">=8"
|
|
|
|
| 2979 |
"version": "3.35.0",
|
| 2980 |
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
|
| 2981 |
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
|
| 2982 |
+
"dev": true,
|
| 2983 |
"license": "MIT",
|
| 2984 |
"dependencies": {
|
| 2985 |
"@jridgewell/gen-mapping": "^0.3.2",
|
|
|
|
| 3002 |
"version": "1.0.0",
|
| 3003 |
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
| 3004 |
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
|
| 3005 |
+
"dev": true,
|
| 3006 |
"license": "MIT",
|
| 3007 |
"engines": {
|
| 3008 |
"node": ">= 0.4"
|
|
|
|
| 3015 |
"version": "3.4.17",
|
| 3016 |
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
|
| 3017 |
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
|
| 3018 |
+
"dev": true,
|
| 3019 |
"license": "MIT",
|
| 3020 |
"dependencies": {
|
| 3021 |
"@alloc/quick-lru": "^5.2.0",
|
|
|
|
| 3053 |
"version": "3.3.1",
|
| 3054 |
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
| 3055 |
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
| 3056 |
+
"dev": true,
|
| 3057 |
"license": "MIT",
|
| 3058 |
"dependencies": {
|
| 3059 |
"any-promise": "^1.0.0"
|
|
|
|
| 3063 |
"version": "1.6.0",
|
| 3064 |
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
|
| 3065 |
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
| 3066 |
+
"dev": true,
|
| 3067 |
"license": "MIT",
|
| 3068 |
"dependencies": {
|
| 3069 |
"thenify": ">= 3.1.0 < 4"
|
|
|
|
| 3076 |
"version": "5.0.1",
|
| 3077 |
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
| 3078 |
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
| 3079 |
+
"dev": true,
|
| 3080 |
"license": "MIT",
|
| 3081 |
"dependencies": {
|
| 3082 |
"is-number": "^7.0.0"
|
|
|
|
| 3089 |
"version": "0.1.13",
|
| 3090 |
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
|
| 3091 |
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
|
| 3092 |
+
"dev": true,
|
| 3093 |
"license": "Apache-2.0"
|
| 3094 |
},
|
| 3095 |
"node_modules/typescript": {
|
|
|
|
| 3106 |
"node": ">=14.17"
|
| 3107 |
}
|
| 3108 |
},
|
| 3109 |
+
"node_modules/undici-types": {
|
| 3110 |
+
"version": "7.8.0",
|
| 3111 |
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
|
| 3112 |
+
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
| 3113 |
+
"dev": true,
|
| 3114 |
+
"license": "MIT"
|
| 3115 |
+
},
|
| 3116 |
"node_modules/update-browserslist-db": {
|
| 3117 |
"version": "1.1.3",
|
| 3118 |
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
|
|
|
|
| 3148 |
"version": "1.0.2",
|
| 3149 |
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
| 3150 |
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
| 3151 |
+
"dev": true,
|
| 3152 |
"license": "MIT"
|
| 3153 |
},
|
| 3154 |
"node_modules/vite": {
|
| 3155 |
+
"version": "5.4.19",
|
| 3156 |
+
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
|
| 3157 |
+
"integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
|
| 3158 |
"dev": true,
|
| 3159 |
"license": "MIT",
|
| 3160 |
"dependencies": {
|
| 3161 |
+
"esbuild": "^0.21.3",
|
| 3162 |
+
"postcss": "^8.4.43",
|
| 3163 |
+
"rollup": "^4.20.0"
|
| 3164 |
},
|
| 3165 |
"bin": {
|
| 3166 |
"vite": "bin/vite.js"
|
| 3167 |
},
|
| 3168 |
"engines": {
|
| 3169 |
+
"node": "^18.0.0 || >=20.0.0"
|
| 3170 |
},
|
| 3171 |
"funding": {
|
| 3172 |
"url": "https://github.com/vitejs/vite?sponsor=1"
|
| 3173 |
},
|
| 3174 |
"optionalDependencies": {
|
| 3175 |
+
"fsevents": "~2.3.3"
|
| 3176 |
},
|
| 3177 |
"peerDependencies": {
|
| 3178 |
+
"@types/node": "^18.0.0 || >=20.0.0",
|
| 3179 |
"less": "*",
|
| 3180 |
"lightningcss": "^1.21.0",
|
| 3181 |
"sass": "*",
|
| 3182 |
+
"sass-embedded": "*",
|
| 3183 |
"stylus": "*",
|
| 3184 |
"sugarss": "*",
|
| 3185 |
"terser": "^5.4.0"
|
|
|
|
| 3197 |
"sass": {
|
| 3198 |
"optional": true
|
| 3199 |
},
|
| 3200 |
+
"sass-embedded": {
|
| 3201 |
+
"optional": true
|
| 3202 |
+
},
|
| 3203 |
"stylus": {
|
| 3204 |
"optional": true
|
| 3205 |
},
|
|
|
|
| 3215 |
"version": "2.0.2",
|
| 3216 |
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
| 3217 |
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
| 3218 |
+
"dev": true,
|
| 3219 |
"license": "ISC",
|
| 3220 |
"dependencies": {
|
| 3221 |
"isexe": "^2.0.0"
|
|
|
|
| 3231 |
"version": "8.1.0",
|
| 3232 |
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
| 3233 |
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
| 3234 |
+
"dev": true,
|
| 3235 |
"license": "MIT",
|
| 3236 |
"dependencies": {
|
| 3237 |
"ansi-styles": "^6.1.0",
|
|
|
|
| 3250 |
"version": "7.0.0",
|
| 3251 |
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
| 3252 |
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
| 3253 |
+
"dev": true,
|
| 3254 |
"license": "MIT",
|
| 3255 |
"dependencies": {
|
| 3256 |
"ansi-styles": "^4.0.0",
|
|
|
|
| 3268 |
"version": "5.0.1",
|
| 3269 |
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
| 3270 |
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
| 3271 |
+
"dev": true,
|
| 3272 |
"license": "MIT",
|
| 3273 |
"engines": {
|
| 3274 |
"node": ">=8"
|
|
|
|
| 3278 |
"version": "4.3.0",
|
| 3279 |
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
| 3280 |
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
| 3281 |
+
"dev": true,
|
| 3282 |
"license": "MIT",
|
| 3283 |
"dependencies": {
|
| 3284 |
"color-convert": "^2.0.1"
|
|
|
|
| 3294 |
"version": "8.0.0",
|
| 3295 |
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
| 3296 |
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
| 3297 |
+
"dev": true,
|
| 3298 |
"license": "MIT"
|
| 3299 |
},
|
| 3300 |
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
|
| 3301 |
"version": "4.2.3",
|
| 3302 |
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
| 3303 |
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
| 3304 |
+
"dev": true,
|
| 3305 |
"license": "MIT",
|
| 3306 |
"dependencies": {
|
| 3307 |
"emoji-regex": "^8.0.0",
|
|
|
|
| 3316 |
"version": "6.0.1",
|
| 3317 |
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
| 3318 |
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
| 3319 |
+
"dev": true,
|
| 3320 |
"license": "MIT",
|
| 3321 |
"dependencies": {
|
| 3322 |
"ansi-regex": "^5.0.1"
|
|
|
|
| 3336 |
"version": "2.8.0",
|
| 3337 |
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
|
| 3338 |
"integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
|
| 3339 |
+
"dev": true,
|
| 3340 |
"license": "ISC",
|
| 3341 |
"bin": {
|
| 3342 |
"yaml": "bin.mjs"
|
|
|
|
| 3344 |
"engines": {
|
| 3345 |
"node": ">= 14.6"
|
| 3346 |
}
|
| 3347 |
+
},
|
| 3348 |
+
"node_modules/zod": {
|
| 3349 |
+
"version": "3.25.76",
|
| 3350 |
+
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
| 3351 |
+
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
| 3352 |
+
"license": "MIT",
|
| 3353 |
+
"funding": {
|
| 3354 |
+
"url": "https://github.com/sponsors/colinhacks"
|
| 3355 |
+
}
|
| 3356 |
}
|
| 3357 |
}
|
| 3358 |
}
|
frontend/package.json
CHANGED
|
@@ -3,10 +3,11 @@
|
|
| 3 |
"version": "1.0.0",
|
| 4 |
"private": true,
|
| 5 |
"dependencies": {
|
| 6 |
-
"
|
| 7 |
-
"react
|
| 8 |
-
"
|
| 9 |
-
"
|
|
|
|
| 10 |
},
|
| 11 |
"scripts": {
|
| 12 |
"dev": "vite",
|
|
@@ -14,12 +15,14 @@
|
|
| 14 |
"preview": "vite preview"
|
| 15 |
},
|
| 16 |
"devDependencies": {
|
| 17 |
-
"@types/
|
| 18 |
-
"@types/react
|
| 19 |
-
"@
|
| 20 |
-
"typescript": "^5.0.0",
|
| 21 |
-
"vite": "^4.3.0",
|
| 22 |
"autoprefixer": "^10.4.19",
|
| 23 |
-
"postcss": "^8.4.38"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
}
|
| 25 |
}
|
|
|
|
| 3 |
"version": "1.0.0",
|
| 4 |
"private": true,
|
| 5 |
"dependencies": {
|
| 6 |
+
"papaparse": "^5.4.1",
|
| 7 |
+
"react": "^18.3.1",
|
| 8 |
+
"react-dom": "^18.3.1",
|
| 9 |
+
"zod": "^3.23.8",
|
| 10 |
+
"axios": "^1.7.2"
|
| 11 |
},
|
| 12 |
"scripts": {
|
| 13 |
"dev": "vite",
|
|
|
|
| 15 |
"preview": "vite preview"
|
| 16 |
},
|
| 17 |
"devDependencies": {
|
| 18 |
+
"@types/papaparse": "^5.3.14",
|
| 19 |
+
"@types/react": "^18.3.3",
|
| 20 |
+
"@types/react-dom": "^18.3.0",
|
|
|
|
|
|
|
| 21 |
"autoprefixer": "^10.4.19",
|
| 22 |
+
"postcss": "^8.4.38",
|
| 23 |
+
"tailwindcss": "^3.4.4",
|
| 24 |
+
"typescript": "^5.4.5",
|
| 25 |
+
"vite": "^5.3.1",
|
| 26 |
+
"@vitejs/plugin-react": "^4.3.1"
|
| 27 |
}
|
| 28 |
}
|
frontend/src/App.tsx
CHANGED
|
@@ -1,142 +1,79 @@
|
|
| 1 |
-
import React, { useState, useEffect } from 'react';
|
| 2 |
-
import
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
stay_days: number;
|
| 13 |
-
readmitted: boolean;
|
| 14 |
-
}
|
| 15 |
-
|
| 16 |
-
interface Analysis {
|
| 17 |
-
patient_id: string;
|
| 18 |
-
risk_label: string;
|
| 19 |
-
risk_score: number;
|
| 20 |
-
contributing_factors: string[];
|
| 21 |
-
recommendations: string[];
|
| 22 |
-
}
|
| 23 |
|
| 24 |
const App: React.FC = () => {
|
| 25 |
-
const [
|
| 26 |
-
const [
|
| 27 |
-
const
|
| 28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
useEffect(() => {
|
| 31 |
-
|
| 32 |
-
setPatients([
|
| 33 |
-
{ patient_id: "P016", age: 29, gender: "Male", location: "Mayo Clinic, Rochester", diagnosis: "Uncomplicated Appendectomy", comorbidities: "None", medications: "None", stay_days: 2, readmitted: false },
|
| 34 |
-
{ patient_id: "P017", age: 48, gender: "Female", location: "Mayo Clinic, Rochester", diagnosis: "Post-surgical Infection", comorbidities: "Non-adherence to post-op instructions", medications: "None", stay_days: 5, readmitted: true },
|
| 35 |
-
{ patient_id: "P015", age: 86, gender: "Male", location: "Mayo Clinic, Rochester", diagnosis: "Fall with hip fracture", comorbidities: "None", medications: "None", stay_days: 10, readmitted: true },
|
| 36 |
-
{ patient_id: "P010", age: 56, gender: "Female", location: "Mayo Clinic, Rochester", diagnosis: "Hip Replacement", comorbidities: "Multiple comorbidities (2)", medications: "None", stay_days: 7, readmitted: false },
|
| 37 |
-
]);
|
| 38 |
}, []);
|
| 39 |
|
| 40 |
-
const
|
| 41 |
-
|
| 42 |
-
setError(null);
|
| 43 |
-
try {
|
| 44 |
-
const response = await axios.post('/api/analyze', { patients });
|
| 45 |
-
setAnalyses(response.data);
|
| 46 |
-
} catch (err) {
|
| 47 |
-
if (axios.isAxiosError(err) && err.response) {
|
| 48 |
-
setError(`Analysis failed: ${err.response.data.detail || 'An unknown error occurred.'}`);
|
| 49 |
-
} else {
|
| 50 |
-
setError('An unexpected error occurred. Please check the network connection.');
|
| 51 |
-
}
|
| 52 |
-
console.error('Error analyzing patients:', err);
|
| 53 |
-
} finally {
|
| 54 |
-
setLoading(false);
|
| 55 |
-
}
|
| 56 |
};
|
| 57 |
|
| 58 |
return (
|
| 59 |
-
<div className="min-h-screen
|
| 60 |
-
<
|
| 61 |
-
|
| 62 |
-
<
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
)}
|
| 78 |
-
|
| 79 |
-
<div className="mt-6 grid grid-cols-1 lg:grid-cols-2 gap-6">
|
| 80 |
-
<div className="bg-black bg-opacity-30 p-6 rounded-lg">
|
| 81 |
-
<h2 className="text-2xl font-bold">PATIENT DATA INPUT</h2>
|
| 82 |
-
<p className="text-sm mt-2 text-blue-400">Now viewing sample data from: Mayo Clinic, Rochester</p>
|
| 83 |
-
<div className="mt-4 max-h-96 overflow-y-auto bg-black bg-opacity-50 p-4 rounded">
|
| 84 |
-
{patients.map((patient) => (
|
| 85 |
-
<div key={patient.patient_id} className="text-sm mb-3">
|
| 86 |
-
<strong className="text-blue-300">{patient.patient_id}</strong>: {patient.age}y {patient.gender}, {patient.diagnosis}, {patient.comorbidities}.
|
| 87 |
-
</div>
|
| 88 |
-
))}
|
| 89 |
-
</div>
|
| 90 |
-
<button
|
| 91 |
-
onClick={analyzePatients}
|
| 92 |
-
disabled={loading}
|
| 93 |
-
className="mt-4 w-full border-2 border-white py-2 px-4 rounded uppercase font-bold hover:bg-white hover:text-blue-900 transition disabled:bg-gray-500 disabled:cursor-not-allowed"
|
| 94 |
-
>
|
| 95 |
-
{loading ? 'Analyzing...' : 'Analyze Patients'}
|
| 96 |
-
</button>
|
| 97 |
-
</div>
|
| 98 |
-
|
| 99 |
-
<div className="bg-black bg-opacity-30 p-6 rounded-lg">
|
| 100 |
-
<h2 className="text-2xl font-bold">ANALYSIS REPORTS</h2>
|
| 101 |
-
<div className="mt-4 space-y-4 max-h-[30rem] overflow-y-auto">
|
| 102 |
-
{analyses.length === 0 && !loading && (
|
| 103 |
-
<div className="text-center text-gray-400 py-10">
|
| 104 |
-
Click 'Analyze Patients' to see risk reports.
|
| 105 |
-
</div>
|
| 106 |
-
)}
|
| 107 |
-
{analyses.map((analysis) => (
|
| 108 |
-
<div key={analysis.patient_id} className="bg-black bg-opacity-50 p-4 rounded">
|
| 109 |
-
<div className="flex justify-between items-start">
|
| 110 |
-
<h3 className="text-lg font-bold text-blue-300">{analysis.patient_id}</h3>
|
| 111 |
-
<span className={`py-1 px-3 rounded text-xs font-bold ${
|
| 112 |
-
analysis.risk_label === 'HIGH RISK' ? 'bg-red-600' :
|
| 113 |
-
analysis.risk_label === 'MEDIUM RISK' ? 'bg-yellow-600' :
|
| 114 |
-
analysis.risk_label === 'LOW RISK' ? 'bg-green-600' :
|
| 115 |
-
'bg-gray-600'
|
| 116 |
-
}`}>
|
| 117 |
-
{analysis.risk_label}
|
| 118 |
-
</span>
|
| 119 |
-
</div>
|
| 120 |
-
<div className="mt-2">
|
| 121 |
-
<p className="text-xs uppercase">Confidence Score</p>
|
| 122 |
-
<div className="bg-gray-700 h-2 rounded mt-1">
|
| 123 |
-
<div className="bg-cyan-500 h-2 rounded" style={{ width: `${analysis.risk_score}%` }}></div>
|
| 124 |
-
</div>
|
| 125 |
-
<p className="text-sm text-right font-bold">{analysis.risk_score}%</p>
|
| 126 |
-
</div>
|
| 127 |
-
<h4 className="mt-2 text-sm font-bold">Contributing Factors</h4>
|
| 128 |
-
<ul className="list-disc pl-5 text-sm opacity-90">
|
| 129 |
-
{analysis.contributing_factors.map((factor, idx) => <li key={idx}>{factor}</li>)}
|
| 130 |
-
</ul>
|
| 131 |
-
<h4 className="mt-2 text-sm font-bold">Preventive Recommendations</h4>
|
| 132 |
-
<ul className="list-disc pl-5 text-sm opacity-90">
|
| 133 |
-
{analysis.recommendations.map((rec, idx) => <li key={idx}>{rec}</li>)}
|
| 134 |
-
</ul>
|
| 135 |
-
</div>
|
| 136 |
-
))}
|
| 137 |
-
</div>
|
| 138 |
</div>
|
| 139 |
-
</
|
|
|
|
|
|
|
|
|
|
| 140 |
</div>
|
| 141 |
);
|
| 142 |
};
|
|
|
|
| 1 |
+
import React, { useState, useEffect, useCallback } from 'react';
|
| 2 |
+
import Papa from 'papaparse';
|
| 3 |
+
import { InputPanel } from './components/InputPanel';
|
| 4 |
+
import { ResultsPanel } from './components/ResultsPanel';
|
| 5 |
+
import { Header } from './components/Header';
|
| 6 |
+
import { Disclaimer } from './components/Disclaimer';
|
| 7 |
+
import { usePatientAnalysis } from './hooks/usePatientAnalysis';
|
| 8 |
+
import { ALL_PATIENTS, HOSPITALS } from './constants';
|
| 9 |
+
import { runInference } from './api/aiApi';
|
| 10 |
|
| 11 |
+
const shuffleArray = <T,>(array: T[]): T[] => {
|
| 12 |
+
const newArr = [...array];
|
| 13 |
+
for (let i = newArr.length - 1; i > 0; i--) {
|
| 14 |
+
const j = Math.floor(Math.random() * (i + 1));
|
| 15 |
+
[newArr[i], newArr[j]] = [newArr[j], newArr[i]];
|
| 16 |
+
}
|
| 17 |
+
return newArr;
|
| 18 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
const App: React.FC = () => {
|
| 21 |
+
const [csvData, setCsvData] = useState<string>('');
|
| 22 |
+
const [currentHospital, setCurrentHospital] = useState<string>(HOSPITALS[0]);
|
| 23 |
+
const {
|
| 24 |
+
analysisResults,
|
| 25 |
+
isAnalyzing,
|
| 26 |
+
errors,
|
| 27 |
+
runAnalysis,
|
| 28 |
+
} = usePatientAnalysis(runInference);
|
| 29 |
+
|
| 30 |
+
const prepareNewBatch = useCallback(() => {
|
| 31 |
+
const availableHospitals = HOSPITALS.filter(h => h !== currentHospital);
|
| 32 |
+
const newHospital = availableHospitals[Math.floor(Math.random() * availableHospitals.length)] || HOSPITALS[0];
|
| 33 |
+
|
| 34 |
+
const newBatch = shuffleArray(ALL_PATIENTS).slice(0, 4 + Math.floor(Math.random() * 4));
|
| 35 |
+
|
| 36 |
+
const newCsvData = Papa.unparse(
|
| 37 |
+
newBatch.map(p => ({...p, hospital: newHospital})),
|
| 38 |
+
{ header: true, skipEmptyLines: true }
|
| 39 |
+
);
|
| 40 |
|
| 41 |
+
setCsvData(newCsvData);
|
| 42 |
+
setCurrentHospital(newHospital);
|
| 43 |
+
}, [currentHospital]);
|
| 44 |
+
|
| 45 |
useEffect(() => {
|
| 46 |
+
prepareNewBatch();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
}, []);
|
| 48 |
|
| 49 |
+
const handleAnalyze = () => {
|
| 50 |
+
runAnalysis(csvData);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
};
|
| 52 |
|
| 53 |
return (
|
| 54 |
+
<div className="min-h-screen font-sans text-slate-100">
|
| 55 |
+
<Header />
|
| 56 |
+
<main className="container mx-auto p-4 md:p-8">
|
| 57 |
+
<Disclaimer />
|
| 58 |
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mt-8">
|
| 59 |
+
<InputPanel
|
| 60 |
+
csvData={csvData}
|
| 61 |
+
setCsvData={setCsvData}
|
| 62 |
+
onAnalyze={handleAnalyze}
|
| 63 |
+
isAnalyzing={isAnalyzing}
|
| 64 |
+
hospitalName={currentHospital}
|
| 65 |
+
onShuffle={prepareNewBatch}
|
| 66 |
+
/>
|
| 67 |
+
<ResultsPanel
|
| 68 |
+
results={analysisResults}
|
| 69 |
+
errors={errors}
|
| 70 |
+
isAnalyzing={isAnalyzing}
|
| 71 |
+
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
</div>
|
| 73 |
+
</main>
|
| 74 |
+
<footer className="text-center p-4 text-slate-400 text-sm">
|
| 75 |
+
<p>Demonstration UI connecting to a live Gemini 1.5 Flash model via a FastAPI backend.</p>
|
| 76 |
+
</footer>
|
| 77 |
</div>
|
| 78 |
);
|
| 79 |
};
|
frontend/src/api/aiApi.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import axios from 'axios';
|
| 2 |
+
import type { Patient, BackendAnalysisResult } from '../types';
|
| 3 |
+
|
| 4 |
+
export const runInference = async (patients: Patient[]): Promise<BackendAnalysisResult[]> => {
|
| 5 |
+
console.log("Sending", patients.length, "patients to the backend for analysis...");
|
| 6 |
+
|
| 7 |
+
try {
|
| 8 |
+
const response = await axios.post('/api/analyze', { patients });
|
| 9 |
+
console.log("Received analysis from backend:", response.data);
|
| 10 |
+
return response.data;
|
| 11 |
+
} catch (error) {
|
| 12 |
+
console.error("Error calling backend API:", error);
|
| 13 |
+
if (axios.isAxiosError(error) && error.response) {
|
| 14 |
+
// If the backend provides a structured error, re-throw it
|
| 15 |
+
throw new Error(`API Error: ${error.response.data.detail || error.message}`);
|
| 16 |
+
}
|
| 17 |
+
// Otherwise, throw a generic network error
|
| 18 |
+
throw new Error('Failed to communicate with the analysis server.');
|
| 19 |
+
}
|
| 20 |
+
};
|
frontend/src/components/Disclaimer.tsx
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from 'react';
|
| 2 |
+
|
| 3 |
+
export const Disclaimer: React.FC = () => {
|
| 4 |
+
return (
|
| 5 |
+
<div className="bg-cyan-500/10 border-l-4 border-cyan-400 p-4 rounded-r-lg backdrop-blur-sm">
|
| 6 |
+
<div className="flex">
|
| 7 |
+
<div className="py-1">
|
| 8 |
+
<svg className="h-6 w-6 text-cyan-300 mr-4 shrink-0" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
|
| 9 |
+
<path strokeLinecap="round" strokeLinejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
| 10 |
+
</svg>
|
| 11 |
+
</div>
|
| 12 |
+
<div>
|
| 13 |
+
<h3 className="font-bold text-cyan-200">Live AI Demonstration</h3>
|
| 14 |
+
<p className="text-sm text-cyan-200/80 mt-1">
|
| 15 |
+
This application connects to a <strong>live Google Gemini 1.5 Flash model</strong> via a Python FastAPI backend.
|
| 16 |
+
</p>
|
| 17 |
+
<p className="text-sm text-cyan-200/80 mt-2">
|
| 18 |
+
The patient data is a randomized, de-identified sample. This application is for demonstration purposes and is <strong>not for clinical use.</strong>
|
| 19 |
+
</p>
|
| 20 |
+
</div>
|
| 21 |
+
</div>
|
| 22 |
+
</div>
|
| 23 |
+
);
|
| 24 |
+
};
|
frontend/src/components/Header.tsx
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from 'react';
|
| 2 |
+
|
| 3 |
+
export const Header: React.FC = () => {
|
| 4 |
+
return (
|
| 5 |
+
<header className="sticky top-0 z-10 bg-black/10 backdrop-blur-lg border-b border-white/10 shadow-lg">
|
| 6 |
+
<div className="container mx-auto px-4 py-5 md:px-8">
|
| 7 |
+
<h1 className="text-3xl font-bold text-white">
|
| 8 |
+
Prevently<span className="text-cyan-300">.ai</span>
|
| 9 |
+
</h1>
|
| 10 |
+
<p className="mt-1 text-md text-slate-300">
|
| 11 |
+
AI-Powered Hospital Readmission Risk Prediction
|
| 12 |
+
</p>
|
| 13 |
+
</div>
|
| 14 |
+
</header>
|
| 15 |
+
);
|
| 16 |
+
};
|
frontend/src/components/InputPanel.tsx
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from 'react';
|
| 2 |
+
|
| 3 |
+
interface InputPanelProps {
|
| 4 |
+
csvData: string;
|
| 5 |
+
setCsvData: (data: string) => void;
|
| 6 |
+
onAnalyze: () => void;
|
| 7 |
+
isAnalyzing: boolean;
|
| 8 |
+
hospitalName: string;
|
| 9 |
+
onShuffle: () => void;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
export const InputPanel: React.FC<InputPanelProps> = ({
|
| 13 |
+
csvData,
|
| 14 |
+
setCsvData,
|
| 15 |
+
onAnalyze,
|
| 16 |
+
isAnalyzing,
|
| 17 |
+
hospitalName,
|
| 18 |
+
onShuffle
|
| 19 |
+
}) => {
|
| 20 |
+
return (
|
| 21 |
+
<div className="bg-white/5 p-6 rounded-2xl shadow-2xl border border-white/10 backdrop-blur-xl">
|
| 22 |
+
<div className="flex justify-between items-center mb-4">
|
| 23 |
+
<h2 className="text-xl font-semibold text-white">Patient Data Input</h2>
|
| 24 |
+
<button onClick={onShuffle} disabled={isAnalyzing} className="text-sm text-cyan-300 hover:text-cyan-200 disabled:opacity-50 transition">New Batch</button>
|
| 25 |
+
</div>
|
| 26 |
+
|
| 27 |
+
<div className="bg-black/10 p-3 rounded-xl mb-4 border border-white/10">
|
| 28 |
+
<p className="text-sm text-slate-300">
|
| 29 |
+
Now viewing sample data from: <strong className="font-semibold text-white">{hospitalName}</strong>
|
| 30 |
+
</p>
|
| 31 |
+
</div>
|
| 32 |
+
|
| 33 |
+
<textarea
|
| 34 |
+
value={csvData}
|
| 35 |
+
onChange={(e) => setCsvData(e.target.value)}
|
| 36 |
+
className="w-full h-80 p-3 border border-white/20 rounded-xl shadow-inner bg-black/20 focus:ring-2 focus:ring-cyan-400 focus:border-cyan-400 transition duration-150 ease-in-out font-mono text-xs text-slate-200 placeholder:text-slate-500"
|
| 37 |
+
placeholder="patient_id,age,gender,..."
|
| 38 |
+
disabled={isAnalyzing}
|
| 39 |
+
/>
|
| 40 |
+
<button
|
| 41 |
+
onClick={onAnalyze}
|
| 42 |
+
disabled={isAnalyzing || !csvData.trim()}
|
| 43 |
+
className="mt-4 w-full bg-white/10 border border-white/20 text-white font-bold py-3 px-4 rounded-xl hover:bg-white/20 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-slate-900 focus:ring-cyan-400 disabled:bg-white/5 disabled:text-slate-400 disabled:cursor-not-allowed transition-all duration-200 ease-in-out flex items-center justify-center backdrop-blur-sm"
|
| 44 |
+
>
|
| 45 |
+
{isAnalyzing ? (
|
| 46 |
+
<>
|
| 47 |
+
<svg className="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
| 48 |
+
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4"></circle>
|
| 49 |
+
<path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
| 50 |
+
</svg>
|
| 51 |
+
Analyzing...
|
| 52 |
+
</>
|
| 53 |
+
) : (
|
| 54 |
+
'Analyze Patients'
|
| 55 |
+
)}
|
| 56 |
+
</button>
|
| 57 |
+
</div>
|
| 58 |
+
);
|
| 59 |
+
};
|
frontend/src/components/ReportCard.tsx
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from 'react';
|
| 2 |
+
import type { AnalysisResult } from '../types';
|
| 3 |
+
import { RiskLevel } from '../types';
|
| 4 |
+
import { Spinner } from './Spinner';
|
| 5 |
+
|
| 6 |
+
interface ReportCardProps {
|
| 7 |
+
result: AnalysisResult;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
const RiskBadge: React.FC<{ level: RiskLevel }> = ({ level }) => {
|
| 11 |
+
const riskStyles = {
|
| 12 |
+
[RiskLevel.Low]: 'bg-green-500/10 text-green-300 border-green-500/20',
|
| 13 |
+
[RiskLevel.Medium]: 'bg-yellow-500/10 text-yellow-300 border-yellow-500/20',
|
| 14 |
+
[RiskLevel.High]: 'bg-red-500/10 text-red-300 border-red-500/20',
|
| 15 |
+
};
|
| 16 |
+
return (
|
| 17 |
+
<span className={`px-3 py-1 text-sm font-semibold rounded-full border ${riskStyles[level]} backdrop-blur-sm`}>
|
| 18 |
+
{level} Risk
|
| 19 |
+
</span>
|
| 20 |
+
);
|
| 21 |
+
};
|
| 22 |
+
|
| 23 |
+
const Section: React.FC<{ title: string; children: React.ReactNode }> = ({ title, children }) => (
|
| 24 |
+
<div>
|
| 25 |
+
<h4 className="font-semibold text-slate-300">{title}</h4>
|
| 26 |
+
{children}
|
| 27 |
+
</div>
|
| 28 |
+
);
|
| 29 |
+
|
| 30 |
+
export const ReportCard: React.FC<ReportCardProps> = ({ result }) => {
|
| 31 |
+
const cardBaseStyle = "border rounded-xl p-4 transition-all duration-500";
|
| 32 |
+
|
| 33 |
+
const animationStyle = {
|
| 34 |
+
animation: `fadeIn 0.5s ease-in-out`,
|
| 35 |
+
animationFillMode: 'forwards',
|
| 36 |
+
opacity: 0,
|
| 37 |
+
} as React.CSSProperties;
|
| 38 |
+
|
| 39 |
+
if (result.status === 'loading') {
|
| 40 |
+
return (
|
| 41 |
+
<div className={`${cardBaseStyle} border-white/10 bg-black/10 animate-pulse flex items-center space-x-4`} style={animationStyle}>
|
| 42 |
+
<Spinner />
|
| 43 |
+
<div>
|
| 44 |
+
<p className="font-bold text-slate-300">Analyzing Patient {result.patient.patient_id}...</p>
|
| 45 |
+
<div className="h-4 bg-white/10 rounded w-48 mt-1"></div>
|
| 46 |
+
</div>
|
| 47 |
+
</div>
|
| 48 |
+
);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
if (result.status === 'error') {
|
| 52 |
+
return (
|
| 53 |
+
<div className={`${cardBaseStyle} border-red-500/30 bg-red-900/40`} style={animationStyle}>
|
| 54 |
+
<div className="flex justify-between items-center">
|
| 55 |
+
<h3 className="text-lg font-bold text-red-200">Patient {result.patient.patient_id}</h3>
|
| 56 |
+
</div>
|
| 57 |
+
<p className="mt-2 text-red-300">
|
| 58 |
+
<strong className="font-semibold">Analysis Failed:</strong> {result.error}
|
| 59 |
+
</p>
|
| 60 |
+
</div>
|
| 61 |
+
);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
const { analysis, patient } = result;
|
| 65 |
+
|
| 66 |
+
return (
|
| 67 |
+
<div className={`${cardBaseStyle} border-white/10 bg-black/10 hover:bg-black/20`} style={animationStyle}>
|
| 68 |
+
<div className="flex justify-between items-start mb-3">
|
| 69 |
+
<h3 className="text-lg font-bold text-white">Patient {patient.patient_id}</h3>
|
| 70 |
+
<RiskBadge level={analysis.risk_level} />
|
| 71 |
+
</div>
|
| 72 |
+
|
| 73 |
+
<div className="space-y-4">
|
| 74 |
+
<Section title="Confidence Score">
|
| 75 |
+
<div className="w-full bg-white/10 rounded-full h-2.5 my-1">
|
| 76 |
+
<div className="bg-cyan-400 h-2.5 rounded-full" style={{ width: `${analysis.confidence_score * 100}%` }}></div>
|
| 77 |
+
</div>
|
| 78 |
+
<p className="text-right text-sm text-slate-300 font-medium">{(analysis.confidence_score * 100).toFixed(1)}%</p>
|
| 79 |
+
</Section>
|
| 80 |
+
|
| 81 |
+
<Section title="Contributing Factors">
|
| 82 |
+
<ul className="list-disc list-inside text-slate-300 text-sm space-y-1 mt-1">
|
| 83 |
+
{analysis.contributing_factors.map((factor, i) => <li key={i}>{factor}</li>)}
|
| 84 |
+
</ul>
|
| 85 |
+
</Section>
|
| 86 |
+
|
| 87 |
+
<Section title="Preventive Recommendations">
|
| 88 |
+
<ul className="list-disc list-inside text-slate-300 text-sm space-y-1 mt-1">
|
| 89 |
+
{analysis.preventive_recommendations.map((rec, i) => <li key={i}>{rec}</li>)}
|
| 90 |
+
</ul>
|
| 91 |
+
</Section>
|
| 92 |
+
|
| 93 |
+
<details className="text-xs text-slate-400">
|
| 94 |
+
<summary className="cursor-pointer font-medium hover:text-white">Show Original Data</summary>
|
| 95 |
+
<div className="mt-2 p-3 bg-black/20 rounded-lg border border-white/10">
|
| 96 |
+
<p><strong>Hospital:</strong> {patient.hospital}</p>
|
| 97 |
+
<p><strong>Age:</strong> {patient.age}</p>
|
| 98 |
+
<p><strong>Gender:</strong> {patient.gender}</p>
|
| 99 |
+
<p><strong>Diagnosis:</strong> {patient.primary_diagnosis}</p>
|
| 100 |
+
<p><strong>Comorbidities:</strong> {patient.comorbidities}</p>
|
| 101 |
+
<p><strong>Medications:</strong> {patient.medications_at_discharge}</p>
|
| 102 |
+
<p><strong>Length of Stay:</strong> {patient.length_of_stay_days} days</p>
|
| 103 |
+
</div>
|
| 104 |
+
</details>
|
| 105 |
+
</div>
|
| 106 |
+
<style>{\`
|
| 107 |
+
@keyframes fadeIn {
|
| 108 |
+
from { opacity: 0; transform: translateY(10px); }
|
| 109 |
+
to { opacity: 1; transform: translateY(0); }
|
| 110 |
+
}
|
| 111 |
+
\`}</style>
|
| 112 |
+
</div>
|
| 113 |
+
);
|
| 114 |
+
};
|
frontend/src/components/ResultsPanel.tsx
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from 'react';
|
| 2 |
+
import { ReportCard } from './ReportCard';
|
| 3 |
+
import { Spinner } from './Spinner';
|
| 4 |
+
import type { AnalysisResult, AnalysisErrors } from '../types';
|
| 5 |
+
|
| 6 |
+
interface ResultsPanelProps {
|
| 7 |
+
results: AnalysisResult[];
|
| 8 |
+
errors: AnalysisErrors;
|
| 9 |
+
isAnalyzing: boolean;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
const ErrorDisplay: React.FC<{title: string; errors: string[]}> = ({ title, errors }) => (
|
| 13 |
+
<div className="bg-red-900/40 border-l-4 border-red-500 text-red-200 p-4 mb-4 rounded-r-lg" role="alert">
|
| 14 |
+
<p className="font-bold">{title}</p>
|
| 15 |
+
<ul className="mt-2 list-disc list-inside text-sm">
|
| 16 |
+
{errors.map((e, i) => <li key={i}>{e}</li>)}
|
| 17 |
+
</ul>
|
| 18 |
+
</div>
|
| 19 |
+
);
|
| 20 |
+
|
| 21 |
+
const GettingStarted: React.FC = () => (
|
| 22 |
+
<div className="text-center py-16 text-slate-400">
|
| 23 |
+
<svg xmlns="http://www.w3.org/2000/svg" className="mx-auto h-12 w-12 text-slate-500" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="1">
|
| 24 |
+
<path strokeLinecap="round" strokeLinejoin="round" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
|
| 25 |
+
</svg>
|
| 26 |
+
<h3 className="mt-4 text-lg font-semibold text-slate-200">Ready for Analysis</h3>
|
| 27 |
+
<p className="mt-1 text-sm text-slate-400">
|
| 28 |
+
Click 'Analyze Patients' to see the reports appear here.
|
| 29 |
+
</p>
|
| 30 |
+
</div>
|
| 31 |
+
);
|
| 32 |
+
|
| 33 |
+
export const ResultsPanel: React.FC<ResultsPanelProps> = ({ results, errors, isAnalyzing }) => {
|
| 34 |
+
const { parseError, validationErrors } = errors;
|
| 35 |
+
const hasResults = results.length > 0;
|
| 36 |
+
const hasValidationErrors = validationErrors.length > 0;
|
| 37 |
+
|
| 38 |
+
return (
|
| 39 |
+
<div className="bg-white/5 p-6 rounded-2xl shadow-2xl border border-white/10 backdrop-blur-xl min-h-[580px]">
|
| 40 |
+
<h2 className="text-xl font-semibold mb-4 text-white">Analysis Reports</h2>
|
| 41 |
+
|
| 42 |
+
{parseError && (
|
| 43 |
+
<ErrorDisplay title="Parsing Error" errors={[parseError]} />
|
| 44 |
+
)}
|
| 45 |
+
|
| 46 |
+
{hasValidationErrors && (
|
| 47 |
+
<ErrorDisplay title="Data Validation Errors" errors={validationErrors} />
|
| 48 |
+
)}
|
| 49 |
+
|
| 50 |
+
{isAnalyzing && !hasResults && !parseError && !hasValidationErrors && (
|
| 51 |
+
<div className="flex justify-center items-center py-16">
|
| 52 |
+
<Spinner />
|
| 53 |
+
<p className="ml-4 text-slate-300">Parsing & validating data...</p>
|
| 54 |
+
</div>
|
| 55 |
+
)}
|
| 56 |
+
|
| 57 |
+
{!isAnalyzing && !hasResults && !parseError && !hasValidationErrors && (
|
| 58 |
+
<GettingStarted />
|
| 59 |
+
)}
|
| 60 |
+
|
| 61 |
+
{hasResults && (
|
| 62 |
+
<div className="space-y-4 h-[480px] overflow-y-auto pr-2">
|
| 63 |
+
{results.map((result, index) => (
|
| 64 |
+
<ReportCard key={result.patient.patient_id || index} result={result} />
|
| 65 |
+
))}
|
| 66 |
+
</div>
|
| 67 |
+
)}
|
| 68 |
+
</div>
|
| 69 |
+
);
|
| 70 |
+
};
|
frontend/src/components/Spinner.tsx
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React from 'react';
|
| 2 |
+
|
| 3 |
+
export const Spinner: React.FC = () => {
|
| 4 |
+
return (
|
| 5 |
+
<svg className="animate-spin h-6 w-6 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
| 6 |
+
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4"></circle>
|
| 7 |
+
<path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
| 8 |
+
</svg>
|
| 9 |
+
);
|
| 10 |
+
};
|
frontend/src/constants.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export const HOSPITALS = [
|
| 2 |
+
"Mayo Clinic, Rochester",
|
| 3 |
+
"Johns Hopkins Hospital, Baltimore",
|
| 4 |
+
"Cleveland Clinic, Cleveland",
|
| 5 |
+
"Massachusetts General Hospital, Boston",
|
| 6 |
+
"Charité - Universitätsmedizin Berlin",
|
| 7 |
+
"Singapore General Hospital",
|
| 8 |
+
"The University of Tokyo Hospital",
|
| 9 |
+
"Toronto General Hospital",
|
| 10 |
+
"UCLA Medical Center, Los Angeles",
|
| 11 |
+
];
|
| 12 |
+
|
| 13 |
+
export const ALL_PATIENTS = [
|
| 14 |
+
{ patient_id: "P001", age: 72, gender: "Male", hospital: "Mayo Clinic, Rochester", primary_diagnosis: "Congestive Heart Failure", comorbidities: "Hypertension, Diabetes Type 2", medications_at_discharge: "Lisinopril, Metformin, Furosemide", length_of_stay_days: 8 },
|
| 15 |
+
{ patient_id: "P002", age: 65, gender: "Female", hospital: "Johns Hopkins Hospital, Baltimore", primary_diagnosis: "COPD", comorbidities: "Asthma, Smoking History", medications_at_discharge: "Albuterol, Prednisone", length_of_stay_days: 5 },
|
| 16 |
+
{ patient_id: "P003", age: 81, gender: "Female", hospital: "Massachusetts General Hospital, Boston", primary_diagnosis: "Pneumonia", comorbidities: "Atrial Fibrillation, Chronic Kidney Disease, Lives Alone", medications_at_discharge: "Warfarin, Amoxicillin", length_of_stay_days: 12 },
|
| 17 |
+
{ patient_id: "P004", age: 58, gender: "Male", hospital: "Cleveland Clinic, Cleveland", primary_diagnosis: "Myocardial Infarction", comorbidities: "Hyperlipidemia, Obesity, Family history of heart disease", medications_at_discharge: "Atorvastatin, Aspirin, Metoprolol", length_of_stay_days: 6 },
|
| 18 |
+
{ patient_id: "P005", age: 76, gender: "Female", hospital: "Charité - Universitätsmedizin Berlin", primary_diagnosis: "Stroke", comorbidities: "Hypertension, Hyperlipidemia, Previous TIA", medications_at_discharge: "Clopidogrel, Simvastatin", length_of_stay_days: 10 },
|
| 19 |
+
{ patient_id: "P006", age: 49, gender: "Male", hospital: "UCLA Medical Center, Los Angeles", primary_diagnosis: "Post-surgical Infection", comorbidities: "Non-adherence to post-op instructions", medications_at_discharge: "Vancomycin", length_of_stay_days: 14 },
|
| 20 |
+
{ patient_id: "P007", age: 88, gender: "Male", hospital: "Toronto General Hospital", primary_diagnosis: "Sepsis", comorbidities: "Dementia, Malnutrition, Social isolation", medications_at_discharge: "Ceftriaxone, IV Fluids", length_of_stay_days: 9 },
|
| 21 |
+
{ patient_id: "P008", age: 62, gender: "Female", hospital: "The University of Tokyo Hospital", primary_diagnosis: "Diabetic Ketoacidosis", comorbidities: "Diabetes Type 1, Depression", medications_at_discharge: "Insulin, Potassium Chloride", length_of_stay_days: 4 },
|
| 22 |
+
{ patient_id: "P009", age: 79, gender: "Male", hospital: "Singapore General Hospital", primary_diagnosis: "Acute Renal Failure", comorbidities: "Chronic Kidney Disease, Hypertension, Gout", medications_at_discharge: "Furosemide, Allopurinol", length_of_stay_days: 7 },
|
| 23 |
+
{ patient_id: "P010", age: 55, gender: "Female", hospital: "Mayo Clinic, Rochester", primary_diagnosis: "Hip Replacement", comorbidities: "Osteoarthritis, History of falls", medications_at_discharge: "Oxycodone, Enoxaparin", length_of_stay_days: 5 },
|
| 24 |
+
{ patient_id: "P011", age: 70, gender: "Male", hospital: "Johns Hopkins Hospital, Baltimore", primary_diagnosis: "Gastrointestinal Bleed", comorbidities: "Peptic Ulcer Disease, Substance use history (alcohol)", medications_at_discharge: "Pantoprazole, Octreotide", length_of_stay_days: 6 },
|
| 25 |
+
{ patient_id: "P012", age: 85, gender: "Female", hospital: "Cleveland Clinic, Cleveland", primary_diagnosis: "Urinary Tract Infection", comorbidities: "Incontinence, Recurrent UTIs, Unstable housing", medications_at_discharge: "Ciprofloxacin", length_of_stay_days: 5 },
|
| 26 |
+
{ patient_id: "P013", age: 34, gender: "Male", hospital: "Massachusetts General Hospital, Boston", primary_diagnosis: "Cellulitis from IV drug use", comorbidities: "Substance use disorder (opioids), Hepatitis C, Homeless", medications_at_discharge: "Clindamycin, Buprenorphine", length_of_stay_days: 7 },
|
| 27 |
+
{ patient_id: "P014", age: 45, gender: "Female", hospital: "Charité - Universitätsmedizin Berlin", primary_diagnosis: "Asthma Exacerbation", comorbidities: "Anxiety, GERD, Frequent ER visits for asthma", medications_at_discharge: "Fluticasone, Montelukast", length_of_stay_days: 3 },
|
| 28 |
+
{ patient_id: "P015", age: 96, gender: "Female", hospital: "UCLA Medical Center, Los Angeles", primary_diagnosis: "Fall with hip fracture", comorbidities: "Frailty, Osteoporosis, Vision impairment, Dementia", medications_at_discharge: "Calcium, Vitamin D, Donepezil", length_of_stay_days: 10 },
|
| 29 |
+
{ patient_id: "P016", age: 52, gender: "Male", hospital: "Toronto General Hospital", primary_diagnosis: "Schizophrenia exacerbation", comorbidities: "Medication non-adherence, Social isolation", medications_at_discharge: "Risperidone, Lorazepam", length_of_stay_days: 15 },
|
| 30 |
+
{ patient_id: "P017", age: 68, gender: "Female", hospital: "The University of Tokyo Hospital", primary_diagnosis: "Knee Replacement Surgery", comorbidities: "Obesity, Hypertension", medications_at_discharge: "Rivaroxaban, Tramadol", length_of_stay_days: 4 },
|
| 31 |
+
{ patient_id: "P018", age: 29, gender: "Male", hospital: "Singapore General Hospital", primary_diagnosis: "Uncomplicated Appendectomy", comorbidities: "None", medications_at_discharge: "None", length_of_stay_days: 2 },
|
| 32 |
+
{ patient_id: "P019", age: 61, gender: "Female", hospital: "Mayo Clinic, Rochester", primary_diagnosis: "Myocardial Infarction", comorbidities: "Language barrier (Spanish-speaking only), Diabetes", medications_at_discharge: "Lisinopril, Aspirin", length_of_stay_days: 9 },
|
| 33 |
+
{ patient_id: "P020", age: 41, gender: "Male", hospital: "Johns Hopkins Hospital, Baltimore", primary_diagnosis: "Major Depressive Disorder", comorbidities: "Suicidal ideation (resolved), Substance use history (alcohol)", medications_at_discharge: "Sertraline", length_of_stay_days: 8 }
|
| 34 |
+
];
|
frontend/src/hooks/usePatientAnalysis.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { useState, useCallback } from 'react';
|
| 2 |
+
import Papa from 'papaparse';
|
| 3 |
+
import type { Patient, AnalysisResult, AnalysisErrors, BackendAnalysisResult } from '../types';
|
| 4 |
+
import { PatientSchema } from '../validation/schemas';
|
| 5 |
+
|
| 6 |
+
type InferenceFn = (patients: Patient[]) => Promise<BackendAnalysisResult[]>;
|
| 7 |
+
|
| 8 |
+
export const usePatientAnalysis = (inferenceFn: InferenceFn) => {
|
| 9 |
+
const [analysisResults, setAnalysisResults] = useState<AnalysisResult[]>([]);
|
| 10 |
+
const [isAnalyzing, setIsAnalyzing] = useState<boolean>(false);
|
| 11 |
+
const [errors, setErrors] = useState<AnalysisErrors>({ parseError: null, validationErrors: [] });
|
| 12 |
+
|
| 13 |
+
const runAnalysis = useCallback(async (csvData: string) => {
|
| 14 |
+
setIsAnalyzing(true);
|
| 15 |
+
setErrors({ parseError: null, validationErrors: [] });
|
| 16 |
+
setAnalysisResults([]);
|
| 17 |
+
|
| 18 |
+
Papa.parse(csvData, {
|
| 19 |
+
header: true,
|
| 20 |
+
skipEmptyLines: true,
|
| 21 |
+
dynamicTyping: true,
|
| 22 |
+
complete: async (results) => {
|
| 23 |
+
if (results.errors.length > 0) {
|
| 24 |
+
setErrors({ parseError: `Error parsing CSV data: ${results.errors.map(e => e.message).join(', ')}`, validationErrors: [] });
|
| 25 |
+
setIsAnalyzing(false);
|
| 26 |
+
return;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
const validationErrorMessages: string[] = [];
|
| 30 |
+
const validPatients: Patient[] = [];
|
| 31 |
+
|
| 32 |
+
results.data.forEach((row: any, index) => {
|
| 33 |
+
const validationResult = PatientSchema.safeParse(row);
|
| 34 |
+
if(validationResult.success){
|
| 35 |
+
validPatients.push(validationResult.data as Patient);
|
| 36 |
+
} else {
|
| 37 |
+
const id = row.patient_id || `Row ${index + 2}`;
|
| 38 |
+
const issues = validationResult.error.issues.map(i => `${i.path.join('.')}: ${i.message}`).join(', ');
|
| 39 |
+
validationErrorMessages.push(`Patient ${id} is invalid - ${issues}`);
|
| 40 |
+
}
|
| 41 |
+
});
|
| 42 |
+
|
| 43 |
+
setErrors({ parseError: null, validationErrors: validationErrorMessages });
|
| 44 |
+
|
| 45 |
+
if(validPatients.length === 0){
|
| 46 |
+
if(validationErrorMessages.length === 0) {
|
| 47 |
+
setErrors(prev => ({ ...prev, parseError: "No valid patient data found to analyze." }));
|
| 48 |
+
}
|
| 49 |
+
setIsAnalyzing(false);
|
| 50 |
+
return;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
const initialResults: AnalysisResult[] = validPatients.map((p) => ({ status: 'loading', patient: p }));
|
| 54 |
+
setAnalysisResults(initialResults);
|
| 55 |
+
|
| 56 |
+
try {
|
| 57 |
+
const backendResults: BackendAnalysisResult[] = await inferenceFn(validPatients);
|
| 58 |
+
|
| 59 |
+
const resultsMap = new Map(backendResults.map(res => [res.patient_id, res]));
|
| 60 |
+
|
| 61 |
+
const finalResults: AnalysisResult[] = validPatients.map(patient => {
|
| 62 |
+
const result = resultsMap.get(patient.patient_id);
|
| 63 |
+
if (!result) {
|
| 64 |
+
return { status: 'error', patient, error: 'Analysis result not returned from the server.' };
|
| 65 |
+
}
|
| 66 |
+
if (result.status === 'success') {
|
| 67 |
+
return { status: 'success', patient, analysis: result.analysis };
|
| 68 |
+
}
|
| 69 |
+
return { status: 'error', patient, error: result.error };
|
| 70 |
+
});
|
| 71 |
+
|
| 72 |
+
setAnalysisResults(finalResults);
|
| 73 |
+
|
| 74 |
+
} catch (err) {
|
| 75 |
+
const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred during API communication.';
|
| 76 |
+
setAnalysisResults(
|
| 77 |
+
validPatients.map(p => ({ status: 'error', patient: p, error: errorMessage }))
|
| 78 |
+
);
|
| 79 |
+
} finally {
|
| 80 |
+
setIsAnalyzing(false);
|
| 81 |
+
}
|
| 82 |
+
},
|
| 83 |
+
error: (err: any) => {
|
| 84 |
+
setErrors({ parseError: `Failed to parse CSV: ${err.message}`, validationErrors: [] });
|
| 85 |
+
setIsAnalyzing(false);
|
| 86 |
+
}
|
| 87 |
+
});
|
| 88 |
+
}, [inferenceFn]);
|
| 89 |
+
|
| 90 |
+
return {
|
| 91 |
+
analysisResults,
|
| 92 |
+
isAnalyzing,
|
| 93 |
+
errors,
|
| 94 |
+
runAnalysis,
|
| 95 |
+
};
|
| 96 |
+
};
|
frontend/src/index.css
CHANGED
|
@@ -1,3 +1,27 @@
|
|
| 1 |
@tailwind base;
|
| 2 |
@tailwind components;
|
| 3 |
@tailwind utilities;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
@tailwind base;
|
| 2 |
@tailwind components;
|
| 3 |
@tailwind utilities;
|
| 4 |
+
|
| 5 |
+
body {
|
| 6 |
+
--c1: #3d3a77;
|
| 7 |
+
--c2: #1e1d3e;
|
| 8 |
+
--c3: #a43e4f;
|
| 9 |
+
--c4: #2b616d;
|
| 10 |
+
background: radial-gradient(circle at 10% 20%, var(--c1) 0%, transparent 25%),
|
| 11 |
+
radial-gradient(circle at 85% 70%, var(--c3) 0%, transparent 25%),
|
| 12 |
+
radial-gradient(circle at 25% 85%, var(--c4) 0%, transparent 30%),
|
| 13 |
+
#1e1d3e;
|
| 14 |
+
overflow-x: hidden;
|
| 15 |
+
}
|
| 16 |
+
body::before {
|
| 17 |
+
content: "";
|
| 18 |
+
position: fixed;
|
| 19 |
+
top: 0;
|
| 20 |
+
left: 0;
|
| 21 |
+
width: 100vw;
|
| 22 |
+
height: 100vh;
|
| 23 |
+
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800"><filter id="noiseFilter"><feTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="3" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(%23noiseFilter)"/></svg>');
|
| 24 |
+
opacity: 0.05;
|
| 25 |
+
z-index: -1;
|
| 26 |
+
pointer-events: none;
|
| 27 |
+
}
|
frontend/src/main.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import React from 'react'
|
| 2 |
import ReactDOM from 'react-dom/client'
|
| 3 |
-
import App from './App
|
| 4 |
import './index.css'
|
| 5 |
|
| 6 |
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
|
|
| 1 |
import React from 'react'
|
| 2 |
import ReactDOM from 'react-dom/client'
|
| 3 |
+
import App from './App'
|
| 4 |
import './index.css'
|
| 5 |
|
| 6 |
ReactDOM.createRoot(document.getElementById('root')!).render(
|
frontend/src/types.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { z } from 'zod';
|
| 2 |
+
import { PatientSchema } from './validation/schemas';
|
| 3 |
+
|
| 4 |
+
export type Patient = z.infer<typeof PatientSchema>;
|
| 5 |
+
|
| 6 |
+
export enum RiskLevel {
|
| 7 |
+
Low = "Low",
|
| 8 |
+
Medium = "Medium",
|
| 9 |
+
High = "High",
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
export interface Analysis {
|
| 13 |
+
patient_id: string;
|
| 14 |
+
risk_level: RiskLevel;
|
| 15 |
+
confidence_score: number;
|
| 16 |
+
contributing_factors: string[];
|
| 17 |
+
preventive_recommendations: string[];
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
export interface BackendAnalysisSuccess {
|
| 21 |
+
status: 'success';
|
| 22 |
+
patient_id: string;
|
| 23 |
+
analysis: Analysis;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
export interface BackendAnalysisError {
|
| 27 |
+
status: 'error';
|
| 28 |
+
patient_id: string;
|
| 29 |
+
error: string;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
export type BackendAnalysisResult = BackendAnalysisSuccess | BackendAnalysisError;
|
| 33 |
+
|
| 34 |
+
export type AnalysisResult =
|
| 35 |
+
| { status: 'loading'; patient: Patient }
|
| 36 |
+
| { status: 'success'; patient: Patient; analysis: Analysis }
|
| 37 |
+
| { status: 'error'; patient: Patient; error: string };
|
| 38 |
+
|
| 39 |
+
export interface AnalysisErrors {
|
| 40 |
+
parseError: string | null;
|
| 41 |
+
validationErrors: string[];
|
| 42 |
+
}
|
frontend/src/validation/schemas.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { z } from 'zod';
|
| 2 |
+
|
| 3 |
+
export const PatientSchema = z.object({
|
| 4 |
+
patient_id: z.string().min(1, { message: "patient_id cannot be empty." }),
|
| 5 |
+
age: z.number().int().positive({ message: "Age must be a positive number." }),
|
| 6 |
+
gender: z.string().min(1, { message: "Gender cannot be empty." }),
|
| 7 |
+
hospital: z.string().min(1, { message: "Hospital cannot be empty." }),
|
| 8 |
+
primary_diagnosis: z.string().min(1, { message: "Primary diagnosis cannot be empty." }),
|
| 9 |
+
comorbidities: z.string().min(1, { message: "Comorbidities cannot be empty." }),
|
| 10 |
+
medications_at_discharge: z.string().min(1, { message: "Medications cannot be empty." }),
|
| 11 |
+
length_of_stay_days: z.number().int().positive({ message: "Length of stay must be a positive number." }),
|
| 12 |
+
readmitted_within_30_days: z.preprocess(
|
| 13 |
+
(value) => {
|
| 14 |
+
if (typeof value === 'string') {
|
| 15 |
+
const lowercasedValue = value.toLowerCase();
|
| 16 |
+
if (lowercasedValue === 'true') return true;
|
| 17 |
+
if (lowercasedValue === 'false') return false;
|
| 18 |
+
}
|
| 19 |
+
return value;
|
| 20 |
+
},
|
| 21 |
+
z.boolean().optional()
|
| 22 |
+
),
|
| 23 |
+
});
|
frontend/tsconfig.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"compilerOptions": {
|
| 3 |
+
"target": "ES2020",
|
| 4 |
+
"useDefineForClassFields": true,
|
| 5 |
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
| 6 |
+
"module": "ESNext",
|
| 7 |
+
"skipLibCheck": true,
|
| 8 |
+
"moduleResolution": "bundler",
|
| 9 |
+
"allowImportingTsExtensions": true,
|
| 10 |
+
"resolveJsonModule": true,
|
| 11 |
+
"isolatedModules": true,
|
| 12 |
+
"noEmit": true,
|
| 13 |
+
"jsx": "react-jsx",
|
| 14 |
+
"strict": true,
|
| 15 |
+
"noUnusedLocals": true,
|
| 16 |
+
"noUnusedParameters": true,
|
| 17 |
+
"noFallthroughCasesInSwitch": true
|
| 18 |
+
},
|
| 19 |
+
"include": ["src"],
|
| 20 |
+
"references": [{ "path": "./tsconfig.node.json" }]
|
| 21 |
+
}
|
frontend/tsconfig.node.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"compilerOptions": {
|
| 3 |
+
"composite": true,
|
| 4 |
+
"skipLibCheck": true,
|
| 5 |
+
"module": "ESNext",
|
| 6 |
+
"moduleResolution": "bundler",
|
| 7 |
+
"allowSyntheticDefaultImports": true,
|
| 8 |
+
"strict": true
|
| 9 |
+
},
|
| 10 |
+
"include": ["vite.config.ts"]
|
| 11 |
+
}
|
frontend/vite.config.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
| 1 |
-
import { defineConfig } from 'vite'
|
| 2 |
-
import react from '@vitejs/plugin-react'
|
| 3 |
|
|
|
|
| 4 |
export default defineConfig({
|
| 5 |
plugins: [react()],
|
| 6 |
-
build: {
|
| 7 |
-
outDir: 'dist',
|
| 8 |
-
},
|
| 9 |
server: {
|
| 10 |
proxy: {
|
| 11 |
-
'/api':
|
|
|
|
|
|
|
|
|
|
| 12 |
},
|
| 13 |
},
|
| 14 |
-
})
|
|
|
|
| 1 |
+
import { defineConfig } from 'vite'
|
| 2 |
+
import react from '@vitejs/plugin-react'
|
| 3 |
|
| 4 |
+
// https://vitejs.dev/config/
|
| 5 |
export default defineConfig({
|
| 6 |
plugins: [react()],
|
|
|
|
|
|
|
|
|
|
| 7 |
server: {
|
| 8 |
proxy: {
|
| 9 |
+
'/api': {
|
| 10 |
+
target: 'http://127.0.0.1:8000',
|
| 11 |
+
changeOrigin: true,
|
| 12 |
+
},
|
| 13 |
},
|
| 14 |
},
|
| 15 |
+
})
|