From b552047d64a1b8fac950eb4ba5d5a39bc08b0bef Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Thu, 8 Aug 2024 16:20:26 +0530 Subject: [PATCH 01/25] =?UTF-8?q?Adds=20support=20for=20printing=20?= =?UTF-8?q?=F0=9F=96=A8=EF=B8=8F=20prescriptions=20=F0=9F=92=8A=20(#8259)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adds support for printing prescriptions * Improve print preview layout * add links to reach the print page * update title of print output * Updated prescription print preview as per requirements * disable print if empty; add titration instructions; improve layout * remove todo comments :) * update disable logic --------- Co-authored-by: Mohammed Nihal <57055998+nihal467@users.noreply.github.com> --- src/CAREUI/misc/PrintPreview.tsx | 36 +++ .../Medicine/ManagePrescriptions.tsx | 10 +- .../MedicineAdministrationSheet/index.tsx | 44 ++- src/Components/Medicine/PrintPreview.tsx | 271 ++++++++++++++++++ src/Locale/en/Common.json | 5 +- src/Locale/en/Consultation.json | 6 + src/Locale/en/Medicine.json | 4 +- src/Routers/routes/ConsultationRoutes.tsx | 3 + 8 files changed, 360 insertions(+), 19 deletions(-) create mode 100644 src/CAREUI/misc/PrintPreview.tsx create mode 100644 src/Components/Medicine/PrintPreview.tsx diff --git a/src/CAREUI/misc/PrintPreview.tsx b/src/CAREUI/misc/PrintPreview.tsx new file mode 100644 index 00000000000..243826c7337 --- /dev/null +++ b/src/CAREUI/misc/PrintPreview.tsx @@ -0,0 +1,36 @@ +import { ReactNode } from "react"; +import ButtonV2 from "../../Components/Common/components/ButtonV2"; +import CareIcon from "../icons/CareIcon"; +import { classNames } from "../../Utils/utils"; +import Page from "../../Components/Common/components/Page"; + +type Props = { + children: ReactNode; + disabled?: boolean; + className?: string; + title: string; +}; + +export default function PrintPreview(props: Props) { + return ( + +
+
+ window.print()}> + + Print + +
+ +
+
+ {props.children} +
+
+
+
+ ); +} diff --git a/src/Components/Medicine/ManagePrescriptions.tsx b/src/Components/Medicine/ManagePrescriptions.tsx index a5ae50813a2..8409e721779 100644 --- a/src/Components/Medicine/ManagePrescriptions.tsx +++ b/src/Components/Medicine/ManagePrescriptions.tsx @@ -10,7 +10,15 @@ export default function ManagePrescriptions() { const { goBack } = useAppHistory(); return ( - + + + Print + + } + >
{ const prescriptionList = [ ...(data?.results ?? []), - ...(showDiscontinued ? discontinuedPrescriptions.data?.results ?? [] : []), + ...(showDiscontinued + ? (discontinuedPrescriptions.data?.results ?? []) + : []), ]; const { activityTimelineBounds, prescriptions } = useMemo( @@ -90,25 +92,37 @@ const MedicineAdministrationSheet = ({ readonly, is_prn }: Props) => { options={ !readonly && !!data?.results && ( - + <> + + + + + {t("edit_prescriptions")} + + {t("edit")} + + refetch()} + /> + - - - {t("edit_prescriptions")} - - {t("edit")} + + Print - refetch()} - /> - + ) } /> diff --git a/src/Components/Medicine/PrintPreview.tsx b/src/Components/Medicine/PrintPreview.tsx new file mode 100644 index 00000000000..09bad44d630 --- /dev/null +++ b/src/Components/Medicine/PrintPreview.tsx @@ -0,0 +1,271 @@ +import { useTranslation } from "react-i18next"; +import PrintPreview from "../../CAREUI/misc/PrintPreview"; +import { useSlugs } from "../../Common/hooks/useSlug"; +import routes from "../../Redux/api"; +import useQuery from "../../Utils/request/useQuery"; +import { + classNames, + formatDate, + formatDateTime, + formatName, + patientAgeInYears, +} from "../../Utils/utils"; +import MedicineRoutes from "./routes"; +import { Prescription } from "./models"; +import useConfig from "../../Common/hooks/useConfig"; +import { ReactNode } from "react"; + +export default function PrescriptionsPrintPreview() { + const { main_logo } = useConfig(); + const { t } = useTranslation(); + const [patientId, consultationId] = useSlugs("patient", "consultation"); + + const patientQuery = useQuery(routes.getPatient, { + pathParams: { id: patientId }, + }); + + const encounterQuery = useQuery(routes.getConsultation, { + pathParams: { id: consultationId }, + }); + + const prescriptionsQuery = useQuery(MedicineRoutes.listPrescriptions, { + pathParams: { consultation: consultationId }, + query: { discontinued: false, limit: 100 }, + }); + + const patient = patientQuery.data; + const encounter = encounterQuery.data; + + const items = prescriptionsQuery.data?.results; + const normalPrescriptions = items?.filter((p) => p.dosage_type !== "PRN"); + const prnPrescriptions = items?.filter((p) => p.dosage_type === "PRN"); + + return ( + +
+

{encounter?.facility_name}

+ care logo +
+
+ + {patient && ( + <> + {patient.name} -{" "} + {t(`GENDER__${patient.gender}`)},{" "} + {patientAgeInYears(patient).toString()}yrs + + )} + + + {encounter?.patient_no} + + + + {formatDate(encounter?.encounter_date)} + + + {encounter?.current_bed?.bed_object.location_object?.name} + {" - "} + {encounter?.current_bed?.bed_object.name} + + + + {patient?.allergies ?? "None"} + +
+ + + + +
+

+ Sign of the Consulting Doctor +

+ + {encounter?.treating_physician_object && + formatName(encounter?.treating_physician_object)} + +

+ Generated on: {formatDateTime(new Date())} +

+

+ This is a computer generated prescription. It shall be issued to the + patient only after the concerned doctor has verified the content and + authorized the same by affixing signature. +

+
+
+ ); +} + +const PatientDetail = ({ + name, + children, + className, +}: { + name: string; + children?: ReactNode; + className?: string; +}) => { + return ( +
+
{name}:
+ {children != null ? ( + {children} + ) : ( +
+ )} +
+ ); +}; + +const PrescriptionsTable = ({ + items, + prn, +}: { + items?: Prescription[]; + prn?: boolean; +}) => { + if (!items) { + return ( +
+ ); + } + + if (!items.length) { + return; + } + + return ( + + + + + + + + {/* */} + + + + + {items.map((item) => ( + + ))} + +
+ {prn && "PRN"} Prescriptions +
MedicineDosageDirections{prn ? "Indicator" : "Freq."}Notes / Instructions
+ ); +}; + +const PrescriptionEntry = ({ obj }: { obj: Prescription }) => { + const { t } = useTranslation(); + const medicine = obj.medicine_object; + + return ( + + +

+ + {medicine?.name ?? obj.medicine_old} + {" "} +

+ {medicine?.type === "brand" && ( + +

+ Generic:{" "} + + {medicine.generic ?? "--"} + +

+

+ Brand:{" "} + + {medicine.company ?? "--"} + +

+
+ )} + + + {obj.dosage_type === "TITRATED" &&

Titrated

} +

+ {obj.base_dosage}{" "} + {obj.target_dosage != null && `→ ${obj.target_dosage}`}{" "} +

+ {obj.max_dosage && ( +

+ Max. {obj.max_dosage} in + 24hrs +

+ )} + {obj.min_hours_between_doses && ( +

+ Min.{" "} + + {obj.min_hours_between_doses}hrs + {" "} + b/w doses +

+ )} + + + {obj.route && ( +

+ Route: + + {t(`PRESCRIPTION_ROUTE_${obj.route}`)} + +

+ )} + {obj.frequency && ( +

+ Freq: + + {t(`PRESCRIPTION_FREQUENCY_${obj.frequency}`)} + +

+ )} + {obj.days && ( +

+ Days: + {obj.days} day(s) +

+ )} + {obj.indicator && ( +

+ Indicator: + {obj.indicator} +

+ )} + + + {obj.notes} + {obj.instruction_on_titration && ( +

+ Titration instructions:{" "} + {obj.instruction_on_titration} +

+ )} + + + ); +}; diff --git a/src/Locale/en/Common.json b/src/Locale/en/Common.json index 0bd26305b86..707f8f74a0b 100644 --- a/src/Locale/en/Common.json +++ b/src/Locale/en/Common.json @@ -177,5 +177,8 @@ "caution": "Caution", "feed_optimal_experience_for_phones": "For optimal viewing experience, consider rotating your device.", "feed_optimal_experience_for_apple_phones": "For optimal viewing experience, consider rotating your device. Ensure auto-rotate is enabled in your device settings.", - "action_irreversible": "This action is irreversible" + "action_irreversible": "This action is irreversible", + "GENDER__1": "Male", + "GENDER__2": "Female", + "GENDER__3": "Non-binary" } \ No newline at end of file diff --git a/src/Locale/en/Consultation.json b/src/Locale/en/Consultation.json index 6e3846fb983..a76afe72410 100644 --- a/src/Locale/en/Consultation.json +++ b/src/Locale/en/Consultation.json @@ -38,6 +38,12 @@ "no_changes": "No changes", "no_treating_physicians_available": "This facility does not have any home facility doctors. Please contact your admin.", "encounter_suggestion_edit_disallowed": "Not allowed to switch to this option in edit consultation", + "encounter_suggestion__A": "Admission", + "encounter_suggestion__DC": "Domiciliary Care", + "encounter_suggestion__OP": "Out-patient visit", + "encounter_suggestion__DD": "Consultation", + "encounter_suggestion__HI": "Consultation", + "encounter_suggestion__R": "Consultation", "encounter_date_field_label__A": "Date & Time of Admission to the Facility", "encounter_date_field_label__DC": "Date & Time of Domiciliary Care commencement", "encounter_date_field_label__OP": "Date & Time of Out-patient visit", diff --git a/src/Locale/en/Medicine.json b/src/Locale/en/Medicine.json index d559ef2fdbf..80726d83fb2 100644 --- a/src/Locale/en/Medicine.json +++ b/src/Locale/en/Medicine.json @@ -47,7 +47,7 @@ "PRESCRIPTION_ROUTE_IM": "IM", "PRESCRIPTION_ROUTE_SC": "S/C", "PRESCRIPTION_ROUTE_INHALATION": "Inhalation", - "PRESCRIPTION_ROUTE_NASOGASTRIC": "Nasogastric/Gastrostomy tube", + "PRESCRIPTION_ROUTE_NASOGASTRIC": "Nasogastric / Gastrostomy tube", "PRESCRIPTION_ROUTE_INTRATHECAL": "intrathecal injection", "PRESCRIPTION_ROUTE_TRANSDERMAL": "Transdermal", "PRESCRIPTION_ROUTE_RECTAL": "Rectal", @@ -61,4 +61,4 @@ "PRESCRIPTION_FREQUENCY_Q4H": "4th hourly", "PRESCRIPTION_FREQUENCY_QOD": "Alternate day", "PRESCRIPTION_FREQUENCY_QWK": "Once a week" -} +} \ No newline at end of file diff --git a/src/Routers/routes/ConsultationRoutes.tsx b/src/Routers/routes/ConsultationRoutes.tsx index 8b75e3f147f..2484acca0fd 100644 --- a/src/Routers/routes/ConsultationRoutes.tsx +++ b/src/Routers/routes/ConsultationRoutes.tsx @@ -10,6 +10,7 @@ import { ConsultationDetails } from "../../Components/Facility/ConsultationDetai import TreatmentSummary from "../../Components/Facility/TreatmentSummary"; import ConsultationDoctorNotes from "../../Components/Facility/ConsultationDoctorNotes"; import PatientConsentRecords from "../../Components/Patient/PatientConsentRecords"; +import PrescriptionsPrintPreview from "../../Components/Medicine/PrintPreview"; export default { "/facility/:facilityId/patient/:patientId/consultation": ({ @@ -48,6 +49,8 @@ export default { ), "/facility/:facilityId/patient/:patientId/consultation/:consultationId/prescriptions": (path: any) => , + "/facility/:facilityId/patient/:patientId/consultation/:consultationId/prescriptions/print": + () => , "/facility/:facilityId/patient/:patientId/consultation/:id/investigation": ({ facilityId, patientId, From 12b57b9e7e6d0c00f8d069f4ef2e42b5bdf198cd Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Thu, 8 Aug 2024 18:08:55 +0530 Subject: [PATCH 02/25] Made Scribe work with Symptoms, Investigations, Diagnosis and Prescriptions (#8183) * Fixed Symptoms and Diagnosis * fixes * fixed bugs * fixed times, measured at, and rounds type * fix translation issue * minor enhancement * fixed rounds type * disable scribe * init * Added support for Investigations, and Prescriptions * undo config * Update src/Components/Scribe/formDetails.ts * Fix bug related to diagnosis update * cleanup * more cleanup --------- Co-authored-by: Mohammed Nihal <57055998+nihal467@users.noreply.github.com> --- .../InvestigationBuilder.tsx | 89 +++---- .../ConsultationDiagnosisBuilder.tsx | 7 +- src/Components/Patient/DailyRounds.tsx | 140 +++++++++- src/Components/Scribe/Scribe.tsx | 140 +++++++--- src/Components/Scribe/formDetails.ts | 239 ++++++++++++++++-- 5 files changed, 510 insertions(+), 105 deletions(-) diff --git a/src/Components/Common/prescription-builder/InvestigationBuilder.tsx b/src/Components/Common/prescription-builder/InvestigationBuilder.tsx index ef99a7f1acc..ce7c579ee22 100644 --- a/src/Components/Common/prescription-builder/InvestigationBuilder.tsx +++ b/src/Components/Common/prescription-builder/InvestigationBuilder.tsx @@ -29,12 +29,28 @@ export interface InvestigationBuilderProps { setInvestigations: React.Dispatch>; } -export default function InvestigationBuilder( - props: InvestigationBuilderProps, -) { - const { investigations, setInvestigations } = props; - const [investigationsList, setInvestigationsList] = useState([]); - const [activeIdx, setActiveIdx] = useState(null); +export const loadInvestigations = async () => { + const fetchInvestigations = async () => { + const { data } = await request(routes.listInvestigations); + return ( + data?.results.map( + (investigation) => + `${investigation.name} -- ${humanizeStrings( + investigation.groups.map((group) => ` ( ${group.name} ) `), + )}`, + ) ?? [] + ); + }; + + const fetchInvestigationGroups = async () => { + const { data } = await request(routes.listInvestigationGroups); + return data?.results.map((group) => `${group.name} (GROUP)`) ?? []; + }; + + const invs = await fetchInvestigations(); + const groups = await fetchInvestigationGroups(); + + let additionalStrings: string[] = []; const additionalInvestigations = [ ["Vitals", ["Temp", "Blood Pressure", "Respiratory Rate", "Pulse Rate"]], [ @@ -51,57 +67,42 @@ export default function InvestigationBuilder( ], ], ]; + additionalInvestigations.forEach((investigation) => { + additionalStrings.push((investigation[0] as string) + " (GROUP)"); + additionalStrings = [ + ...additionalStrings, + ...(investigation[1] as string[]).map( + (i: any) => i + " -- ( " + investigation[0] + " )", + ), + ]; + }); + + return [...groups, ...invs, ...additionalStrings]; +}; + +export default function InvestigationBuilder( + props: InvestigationBuilderProps, +) { + const { investigations, setInvestigations } = props; + const [investigationsList, setInvestigationsList] = useState([]); + const [activeIdx, setActiveIdx] = useState(null); const setItem = (object: InvestigationType, i: number) => { setInvestigations( - investigations.map((investigation, index) => + investigations?.map((investigation, index) => index === i ? object : investigation, ), ); }; useEffect(() => { - loadInvestigations(); + const load = async () => setInvestigationsList(await loadInvestigations()); + load(); }, []); - const loadInvestigations = async () => { - const invs = await fetchInvestigations(); - const groups = await fetchInvestigationGroups(); - - let additionalStrings: string[] = []; - additionalInvestigations.forEach((investigation) => { - additionalStrings.push((investigation[0] as string) + " (GROUP)"); - additionalStrings = [ - ...additionalStrings, - ...(investigation[1] as string[]).map( - (i: any) => i + " -- ( " + investigation[0] + " )", - ), - ]; - }); - - setInvestigationsList([...groups, ...invs, ...additionalStrings]); - }; - - const fetchInvestigations = async () => { - const { data } = await request(routes.listInvestigations); - return ( - data?.results.map( - (investigation) => - `${investigation.name} -- ${humanizeStrings( - investigation.groups.map((group) => ` ( ${group.name} ) `), - )}`, - ) ?? [] - ); - }; - - const fetchInvestigationGroups = async () => { - const { data } = await request(routes.listInvestigationGroups); - return data?.results.map((group) => `${group.name} (GROUP)`) ?? []; - }; - return (
- {investigations.map((investigation, i) => { + {investigations?.map((investigation, i) => { const setFrequency = (frequency: string) => { setItem( { diff --git a/src/Components/Diagnosis/ConsultationDiagnosisBuilder/ConsultationDiagnosisBuilder.tsx b/src/Components/Diagnosis/ConsultationDiagnosisBuilder/ConsultationDiagnosisBuilder.tsx index 0391748c929..b6495143f5d 100644 --- a/src/Components/Diagnosis/ConsultationDiagnosisBuilder/ConsultationDiagnosisBuilder.tsx +++ b/src/Components/Diagnosis/ConsultationDiagnosisBuilder/ConsultationDiagnosisBuilder.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useEffect, useState } from "react"; import useSlug from "../../../Common/hooks/useSlug"; import { ConsultationDiagnosis, @@ -83,6 +83,11 @@ interface EditDiagnosesProps { export const EditDiagnosesBuilder = (props: EditDiagnosesProps) => { const consultation = useSlug("consultation"); const [diagnoses, setDiagnoses] = useState(props.value); + + useEffect(() => { + setDiagnoses(props.value); + }, [props.value]); + return (
diff --git a/src/Components/Patient/DailyRounds.tsx b/src/Components/Patient/DailyRounds.tsx index d451513c9bc..d960636d522 100644 --- a/src/Components/Patient/DailyRounds.tsx +++ b/src/Components/Patient/DailyRounds.tsx @@ -29,7 +29,7 @@ import RadioFormField from "../Form/FormFields/RadioFormField"; import request from "../../Utils/request/request"; import routes from "../../Redux/api"; import { Scribe } from "../Scribe/Scribe"; -import { DAILY_ROUND_FORM_SCRIBE_DATA } from "../Scribe/formDetails"; +import { SCRIBE_FORMS } from "../Scribe/formDetails"; import { DailyRoundsModel } from "./models"; import InvestigationBuilder from "../Common/prescription-builder/InvestigationBuilder"; import { FieldErrorText } from "../Form/FormFields/FormField"; @@ -45,6 +45,9 @@ import { EncounterSymptomsBuilder } from "../Symptoms/SymptomsBuilder"; import { FieldLabel } from "../Form/FormFields/FormField"; import useAuthUser from "../../Common/hooks/useAuthUser"; import CheckBoxFormField from "../Form/FormFields/CheckBoxFormField"; +import SymptomsApi from "../Symptoms/api"; +import DiagnosesRoutes from "../Diagnosis/routes"; +import MedicineRoutes from "../Medicine/routes"; import { scrollTo } from "../../Utils/utils"; const Loading = lazy(() => import("../Common/Loading")); @@ -54,6 +57,8 @@ export const DailyRounds = (props: any) => { const authUser = useAuthUser(); const { goBack } = useAppHistory(); const { facilityId, patientId, consultationId, id } = props; + const [symptomsSeed, setSymptomsSeed] = useState(1); + const [prescriptionSeed, setPrescriptionSeed] = useState(1); const initForm: any = { physical_examination_info: "", @@ -478,11 +483,129 @@ export const DailyRounds = (props: any) => { >
{ + form={SCRIBE_FORMS.daily_round} + onFormUpdate={async (fields) => { + // Symptoms + let rounds_type = fields.rounds_type || state.form.rounds_type; + if (fields.additional_symptoms) { + for (const symptom of fields.additional_symptoms) { + const { res } = await request(SymptomsApi.add, { + pathParams: { consultationId }, + body: { + ...symptom, + }, + }); + if (res?.ok) setSymptomsSeed((s) => s + 1); + } + } + + // ICD11 Diagnosis + if (fields.icd11_diagnosis) { + for (const diagnosis of fields.icd11_diagnosis) { + // Fetch available diagnoses + + const { res: icdRes, data: icdData } = await request( + routes.listICD11Diagnosis, + { + query: { query: diagnosis.diagnosis }, + }, + ); + + if (!icdRes?.ok) { + error({ + text: "Failed to fetch ICD11 Diagnosis", + }); + continue; + } + + const availableDiagnosis = icdData?.[0]?.id; + + if (!availableDiagnosis) { + error({ + text: "Could not find the requested diagnosis. Please enter manually.", + }); + continue; + } + + const { res, data } = await request( + DiagnosesRoutes.createConsultationDiagnosis, + { + pathParams: { consultation: consultationId }, + body: { + ...diagnosis, + diagnosis: availableDiagnosis, + }, + }, + ); + + if (res?.ok && data) + setDiagnoses((diagnoses) => [...(diagnoses || []), data]); + } + } + + // Prescriptions + if (fields.prescriptions || fields.prn_prescriptions) { + const combined_prescriptions = [ + ...(fields.prescriptions || []), + ...(fields.prn_prescriptions || []), + ]; + for (const prescription of combined_prescriptions) { + // fetch medicine + const { res: medicineRes, data: medicineData } = await request( + routes.listMedibaseMedicines, + { + query: { query: prescription.medicine }, + }, + ); + + if (!medicineRes?.ok) { + error({ + text: "Failed to fetch medicine", + }); + continue; + } + + const availableMedicine = medicineData?.[0]?.id; + + if (!availableMedicine) { + error({ + text: "Could not find the requested medicine. Please enter manually.", + }); + continue; + } + + const { res } = await request( + MedicineRoutes.createPrescription, + { + pathParams: { consultation: consultationId }, + body: { + ...prescription, + medicine: availableMedicine, + }, + }, + ); + + if (res?.ok) setPrescriptionSeed((s) => s + 1); + } + } + + if ( + Object.keys(fields).some((f) => + [ + "investigations", + "icd11_diagnosis", + "additional_symptoms", + "prescriptions", + "prn_prescriptions", + ].includes(f), + ) + ) { + rounds_type = "DOCTORS_LOG"; + } + dispatch({ type: "set_form", - form: { ...state.form, ...fields }, + form: { ...state.form, ...fields, rounds_type }, }); fields.action !== undefined && setPreviousAction(fields.action); fields.review_interval !== undefined && @@ -536,6 +659,7 @@ export const DailyRounds = (props: any) => {
Symptoms { handleFormFieldChange({ name: "symptoms_dirty", @@ -593,7 +717,11 @@ export const DailyRounds = (props: any) => { <>

Vitals

- + { discontinued={ showDiscontinuedPrescriptions ? undefined : false } + key={prescriptionSeed} actions={["discontinue"]} />
@@ -783,6 +912,7 @@ export const DailyRounds = (props: any) => { showDiscontinuedPrescriptions ? undefined : false } actions={["discontinue"]} + key={prescriptionSeed} />
diff --git a/src/Components/Scribe/Scribe.tsx b/src/Components/Scribe/Scribe.tsx index 16b9056a795..0b05f55ebdf 100644 --- a/src/Components/Scribe/Scribe.tsx +++ b/src/Components/Scribe/Scribe.tsx @@ -21,8 +21,15 @@ export interface Field { description: string; type: string; example: string; - default: string; + default: any; options?: readonly FieldOption[]; + validator: (value: any) => boolean; +} + +export interface ScribeForm { + id: string; + name: string; + fields: () => Promise | Field[]; } export type ScribeModel = { @@ -45,7 +52,8 @@ export type ScribeModel = { }; interface ScribeProps { - fields: Field[]; + form: ScribeForm; + existingData?: { [key: string]: any }; onFormUpdate: (fields: any) => void; } @@ -54,7 +62,7 @@ const SCRIBE_FILE_TYPES = { SCRIBE: 1, }; -export const Scribe: React.FC = ({ fields, onFormUpdate }) => { +export const Scribe: React.FC = ({ form, onFormUpdate }) => { const { enable_scribe } = useConfig(); const [open, setOpen] = useState(false); const [_progress, setProgress] = useState(0); @@ -71,6 +79,21 @@ export const Scribe: React.FC = ({ fields, onFormUpdate }) => { const [updatedTranscript, setUpdatedTranscript] = useState(""); const [scribeID, setScribeID] = useState(""); const stageRef = useRef(stage); + const [fields, setFields] = useState([]); + + useEffect(() => { + const loadFields = async () => { + const fields = await form.fields(); + setFields( + fields.map((f) => ({ + ...f, + validate: undefined, + default: JSON.stringify(f.default), + })), + ); + }; + loadFields(); + }, [form]); useEffect(() => { if (stageRef.current === "cancelled") { @@ -312,8 +335,20 @@ export const Scribe: React.FC = ({ fields, onFormUpdate }) => { setProgress(100); const parsedFormData = JSON.parse(updatedFieldsResponse ?? "{}"); if (stageRef.current === "cancelled") return; - setFormFields(parsedFormData); - onFormUpdate(parsedFormData); + + // run type validations + const validated = Object.entries(parsedFormData) + .filter(([k, v]) => { + const f = fields.find((f) => f.id === k); + if (!f) return false; + if (v === f.default) return false; + //if (f.validator) return f.validator(f.type === "number" ? Number(v) : v); + return true; + }) + .map(([k, v]) => ({ [k]: v })) + .reduce((acc, curr) => ({ ...acc, ...curr }), {}); + setFormFields(validated as any); + onFormUpdate(validated); setStage("final-review"); } catch (error) { setErrors(["Error retrieving form data"]); @@ -373,35 +408,76 @@ export const Scribe: React.FC = ({ fields, onFormUpdate }) => { stageRef.current = "cancelled"; }; - const processFormField = ( + function processFormField( fieldDetails: Field | undefined, - formFields: { [key: string]: string | string[] | number }, + formFields: { [key: string]: any }, field: string, - ) => { - if (fieldDetails?.options) { - // Check if the form field is an array (multiple selections allowed) - if (Array.isArray(formFields[field])) { - // Map each selected option ID to its corresponding text - return (formFields[field] as string[]) - .map((option) => { - const optionDetails = fieldDetails.options?.find( - (o) => o.id === option, - ); - return optionDetails?.text ?? option; // Use option text if found, otherwise fallback to option ID - }) - .join(", "); - } else { - // Single selection scenario, find the option that matches the field value - return ( - fieldDetails.options?.find((o) => o.id === formFields[field])?.text ?? - JSON.stringify(formFields[field]) - ); + ): React.ReactNode { + const value = formFields[field]; + if (!fieldDetails || !value) return value; + + const { options } = fieldDetails; + + const getHumanizedKey = (key: string): string => { + return key + .split("_") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); + }; + + const getOptionText = (value: string | number): string => { + if (!options) return value.toString(); + const option = options.find((opt) => opt.id === value); + return option ? option.text : value.toString(); + }; + + const renderPrimitive = (value: any): any => { + return options ? getOptionText(value) : value; + }; + + const renderArray = (values: any[]): React.ReactNode => { + return values.map((value) => renderPrimitive(value)).join(", "); + }; + + const renderObject = (obj: { [key: string]: any }): React.ReactNode => { + return ( +
+ {Object.keys(obj).map((key, keyIndex) => ( +
+ {getHumanizedKey(key)}: {renderPrimitive(obj[key])} +
+ ))} +
+ ); + }; + + const renderObjectArray = (objects: any[]): React.ReactNode => { + return ( +
+ {objects.map((obj, objIndex) => ( +
{renderObject(obj)}
+ ))} +
+ ); + }; + + if (Array.isArray(value)) { + if ( + value.length > 0 && + typeof value[0] === "object" && + !Array.isArray(value[0]) + ) { + return renderObjectArray(value); } - } else { - // If no options are available, return the field value in JSON string format - return JSON.stringify(formFields[field]); + return renderArray(value); } - }; + + if (typeof value === "object") { + return renderObject(value); + } + + return renderPrimitive(value); + } const renderContentBasedOnStage = () => { switch (stage) { @@ -599,13 +675,13 @@ export const Scribe: React.FC = ({ fields, onFormUpdate }) => {

{fieldDetails?.friendlyName}

-

+

{processFormField( fieldDetails, formFields, field, )} -

+
); })} diff --git a/src/Components/Scribe/formDetails.ts b/src/Components/Scribe/formDetails.ts index 74673adea70..1c5b0cf3b9c 100644 --- a/src/Components/Scribe/formDetails.ts +++ b/src/Components/Scribe/formDetails.ts @@ -5,19 +5,27 @@ import { RHYTHM_CHOICES, TELEMEDICINE_ACTIONS, } from "../../Common/constants"; +import { loadInvestigations } from "../Common/prescription-builder/InvestigationBuilder"; import { SYMPTOM_CHOICES } from "../Symptoms/types"; -import { Field } from "./Scribe"; +import { Field, ScribeForm } from "./Scribe"; -export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ +const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ { friendlyName: "Additional Symptoms", id: "additional_symptoms", - type: "number[]", - example: "[1,2,3]", - default: "[]", - description: - "A numeric array of option IDs to store symptoms of the patient.", + type: "{symptom: number, other_symptom?: string, onset_date: string, cure_date?: string}[]", + example: + "[{symptom: 1, onset_date: '2024-12-03'}, {symptom: 2, onset_date: '2024-12-03', cure_date: '2024-12-05'}, {symptom: 9, other_symptom: 'Other symptom', onset_date: '2024-12-03'}]", + default: [], + description: `An array of objects to store the patient's symptoms along with their date of onset and date of cure (if any). The symptom field should be an integer corresponding to the symptom's ID. The onset_date and cure_date fields should be date strings (e.g., '2022-01-01'). If no onset_date has been specified, use todays date which is '${new Date().toISOString().slice(0, 10)}'. If the symptom is ongoing, the cure_date field should not be included. If the user has 'Other Symptom', only then the other_symptom field should be included with a string value describing the symptom.`, options: SYMPTOM_CHOICES, + validator: (value) => { + if (!Array.isArray(value)) return false; + value.forEach((s) => { + if (!s.symptom || !s.onset_date) return false; + }); + return true; + }, }, { friendlyName: "Other Symptoms", @@ -26,6 +34,9 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ example: "", default: "", description: "Just leave it blank", + validator: () => { + return true; + }, }, { friendlyName: "Physical Examination Info", @@ -36,6 +47,9 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ default: "", description: "This field is designated for storing detailed findings from the physical examination of the patient. It should include all observable physical attributes, conditions, or symptoms noted during the examination. When processing a doctor's transcript, identify and extract descriptions that pertain directly to the patient's physical state, such as visible conditions, physical symptoms, or any abnormalities noted by touch, sight, or measurement. This can include, but is not limited to, descriptions of skin conditions, swellings, lacerations, posture, mobility issues, and any other physically observable traits.", + validator: (value) => { + return typeof value === "string"; + }, }, { friendlyName: "Other Details", @@ -46,6 +60,9 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ "Patient reports trouble sleeping and a decreased appetite. Additionally, the patient is allergic to penicillin and has a history of asthma.", description: "This field is for capturing any supplementary details about the patient that are mentioned in the doctor's transcript but do not directly pertain to the physical examination findings. This includes, but is not limited to, behavioral observations, medical history, patient complaints, lifestyle factors, allergies, or any other non-physical observations that are relevant to the patient's overall health and well-being. When processing a transcript, extract information that describes the patient's health, habits, or conditions in a broader sense than what is observed through physical examination alone.", + validator: (value) => { + return typeof value === "string"; + }, }, { friendlyName: "Patient Category", @@ -58,14 +75,20 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ id: category.id, text: category.text, })), + validator: (value) => { + return typeof value === "string"; + }, }, { friendlyName: "Actions", id: "actions", type: "null", example: "null", - default: "null", + default: null, description: "Leave blank.", + validator: (value) => { + return value === null; + }, }, { friendlyName: "Action", @@ -78,16 +101,18 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ id: action.text, text: action.desc, })), + validator: (value) => typeof value === "string", }, { friendlyName: "Review Interval", id: "review_interval", type: "number", - default: "0", + default: 0, example: "15", description: "An integer to represent the interval at which the patient's condition is reviewed.", options: REVIEW_AT_CHOICES, + validator: (value) => typeof value === "number", }, { friendlyName: "Admitted To", @@ -97,63 +122,75 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ example: "General Ward", description: "A string to store the department or ward where the patient is admitted.", + validator: (value) => typeof value === "string", }, { friendlyName: "bp", id: "bp", - default: "{ systolic: undefined, diastolic: undefined, mean: undefined }", - type: "{ systolic: number, diastolic: number, mean: number }", - example: "{ systolic: 120, diastolic: 80, mean: 100 }", + default: { systolic: null, diastolic: null, mean: null }, + type: "{ systolic?: number, diastolic?: number }", + example: "{ systolic: 120 }", description: - "An object to store the blood pressure of the patient. It contains two integers, systolic and diastolic. Output mean is calculated from these two.", + "An object to store the blood pressure of the patient. It may contain two integers, systolic and diastolic.", + validator: (value) => { + if (typeof value !== "object") return false; + if (value.systolic && typeof value.systolic !== "number") return false; + if (value.diastolic && typeof value.diastolic !== "number") return false; + return true; + }, }, { friendlyName: "Pulse", id: "pulse", type: "number", - default: "null", + default: null, example: "72", description: "An integer to store the pulse rate of the patient. It can be null if the pulse rate is not taken.", + validator: (value) => typeof value === "number", }, { friendlyName: "Respiratory Rate", id: "resp", type: "number", - default: "null", + default: null, example: "16", description: "An integer to store the respiratory rate of the patient. It can be null if the respiratory rate is not taken.", + validator: (value) => typeof value === "number", }, { friendlyName: "Temperature", id: "temperature", type: "number", - default: "null", + default: null, example: "98.6", description: "A float to store the temperature of the patient. It can be null if the temperature is not taken.", + validator: (value) => typeof value === "number", }, { friendlyName: "SPO2", id: "ventilator_spo2", type: "number", - default: "null", + default: null, example: "98", description: "An integer to store the SPO2 level of the patient. It can be null if the SPO2 level is not taken.", + validator: (value) => typeof value === "number", }, { friendlyName: "Rhythm", id: "rhythm", - type: "string", + type: "number", example: "5", - default: "0", + default: 0, description: "An option to store the rhythm of the patient.", options: RHYTHM_CHOICES.map((rhythm) => ({ id: rhythm.id, text: rhythm.desc ?? "", })), + validator: (value) => typeof value === "number", }, { friendlyName: "Rhythm Detail", @@ -163,6 +200,7 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ example: "Just minor irregularities.", description: "A string to store the details about the rhythm of the patient.", + validator: (value) => typeof value === "string", }, { friendlyName: "Level Of Consciousness", @@ -173,13 +211,168 @@ export const DAILY_ROUND_FORM_SCRIBE_DATA: Field[] = [ description: "An option to store the level of consciousness of the patient.", options: CONSCIOUSNESS_LEVEL, + validator: (value) => typeof value === "string", + }, + { + friendlyName: "Diagnosis", + id: "icd11_diagnosis", + type: "{diagnosis: string, verification_status: \"unconfirmed\" | \"provisional\" | \"differential\" | \"confirmed\", is_principal: boolean}[]", + default: [], + example: + "[{diagnosis: '4A42.0 Paediatric onset systemic sclerosis', verification_status: 'confirmed', is_principal: true}, {diagnosis: 2, verification_status: 'provisional', is_principal: false}]", + description: + "A list of objects to store the patient's diagnosis along with their verification status and whether it is the principal diagnosis. If not specifically said, set is_principal to false. NOTE: only one principal diagnosis can exist. The diagnosis field should be a string that may contain a corresponding diagnosis ID. The verification_status field should be a string with one of the following values: 'unconfirmed', 'provisional', 'differential', or 'confirmed'.", + validator: (value) => { + if (!Array.isArray(value)) return false; + value.forEach((d) => { + if (!d.diagnosis || !d.verification_status) return false; + }); + return true; + }, + }, + { + friendlyName: "Investigations", + id: "investigations", + type: `{ + type: string[], + repetitive: boolean, + time?: string, + frequency?: '15 min' | '30 min' | '1 hr' | '6 hrs' | '12 hrs' | '24 hrs' | '48 hrs', + notes?: string + }[]`, + default: [], + example: `[ + { + type: ["Haemotology (GROUP)"], + repetitive: false, + time: "2024-07-31T18:10", + notes: "Patient is allergic to penicillin." + }, + { + type: ["ECG", "X-Ray"], + repetitive: true, + frequency: "24 hrs", + notes: "Patient is going nuts" + } + ]`, + description: + "A list of objects to store the patient's investigations. The type field should be an array of strings corresponding to the names of the investigations provided in the options. The repetitive field should be a boolean value. The time field should be a string and only be filled if repetitive field is false. The frequency field should be a string with one of the following values: '15 min', '30 min', '1 hr', '6 hrs', '12 hrs', '24 hrs', or '48 hrs' and should be only filled if this is a repititive investigation. The time field should be of the example format if present - (2024-07-31T18:10). The notes field should be a string. If the type is not available in options, DO NOT MAKE IT.", + validator: (value) => { + if (!Array.isArray(value)) return false; + value.forEach((i) => { + if (!i.type || !i.repetitive) return false; + if (i.repetitive && !i.frequency) return false; + }); + return true; + }, + }, + { + friendlyName: "Prescriptions", + id: "prescriptions", + type: `{ + base_dosage: number + " " + ("mg" | "g" | "ml" | "drop(s)" | "ampule(s)" | "tsp" | "mcg" | "unit(s)"), + days: number, + dosage_type: "REGULAR" | "TITRATED", + frequency: "STAT" | "OD" | "HS" | "BD" | "TID" | "QID" | "Q4H" | "QOD" | "QWK", + medicine: string, + notes: string, + route: "ORAL" | "IV" | "IM" | "SC" | "INHALATION" | "NASOGASTRIC" | "INTRATHECAL" | "TRANSDERMAL" | "RECTAL" | "SUBLINGUAL", + instruction_on_titration: string, + target_dosage: number + " " + ("mg" | "g" | "ml" | "drop(s)" | "ampule(s)" | "tsp" | "mcg" | "unit(s)"), + }[]`, + default: [], + example: `[ + {base_dosage: "5 ampule(s)", days: 7, dosage_type: "REGULAR", frequency: "STAT", medicine: "DOLO", notes: "Give with water", route: "ORAL"}, + {base_dosage: "7 ml", days: 3, dosage_type: "TITRATED", frequency: "Q4H", medicine: "Albumin", route: "INHALATION", instruction_on_titration: "Example", target_dosage: "40 ml"}, + ]`, + description: `A list of objects to store the patient's prescriptions. The prescription can be regular or titrated. If titrated, the prescription should also include instruction_on_titration, and a target_dosage. NOTE: target_dosage should have the same unit as base_dosage. + The frequency should be any of the mentioned ones. They are short for: + STAT: Imediately, + OD: Once daily, + HS: Night Only, + BD: Twice Daily, + TID: 8th Hourly, + QID: 6th Hourly, + Q4H: 4th Hourly, + QOD: Alternate Day, + QWK: Once a Week + `, + validator: (value) => { + if (!Array.isArray(value)) return false; + return true; + }, + }, + { + friendlyName: "PRN Prescriptions", + id: "prn_prescriptions", + type: `{ + base_dosage: number + " " + ("mg" | "g" | "ml" | "drop(s)" | "ampule(s)" | "tsp" | "mcg" | "unit(s)"), + dosage_type: "PRN", + medicine: string, + notes: string, + route: "ORAL" | "IV" | "IM" | "SC" | "INHALATION" | "NASOGASTRIC" | "INTRATHECAL" | "TRANSDERMAL" | "RECTAL" | "SUBLINGUAL", + indicator: string, + min_hours_between_doses: number, + max_dosage: number + " " + ("mg" | "g" | "ml" | "drop(s)" | "ampule(s)" | "tsp" | "mcg" | "unit(s)"), + }[]`, + default: [], + example: `[ + {base_dosage: "3 drop(s)", dosage_type:"PRN", indicator: "If patient gets fever", max_dosage: "5 drops(s)", min_hours_between_doses: 12, route: "IV", medicine: "Glentona", notes: "Example"} + ]`, + description: "A list of objects to store the patient's PRN prescriptions.", + validator: (value) => { + if (!Array.isArray(value)) return false; + return true; + }, }, + /*{ + friendlyName: "Round Type", + id: "rounds_type", + type: "string", + default: "NORMAL", + example: "TELEMEDICINE", + description: "A string to store the type of round.", + options: [ + { id: "NORMAL", text: "Brief Update" }, + { id: "VENTILATOR", text: "Detailed Update" }, + { id: "DOCTORS_LOG", text: "Progress Note" }, + { id: "TELEMEDICINE", text: "Telemedicine" }, + ], + validator: (value) => typeof value === "string", + }, + { + friendlyName: "Measured At", + id: "taken_at", + type: "string", + default: "", + example: "2024-07-31T18:10", + description: + "A string to store the date and time at which the round was taken or measured. 'The round was taken yesterday/today' would amount to yesterday/today's date.", + validator: (value) => typeof value === "string", + }, +*/ ]; -export const SCRIBE_FORMS = [ - { +export const SCRIBE_FORMS: { [key: string]: ScribeForm } = { + daily_round: { id: "daily_round", name: "Daily Round", - fields: DAILY_ROUND_FORM_SCRIBE_DATA, + fields: async () => { + const investigations = await loadInvestigations(); + + return DAILY_ROUND_FORM_SCRIBE_DATA.map((field) => { + if (field.id === "investigations") { + return { + ...field, + options: investigations.map((investigation, i) => ({ + id: i, + text: investigation, + currentData: undefined, + })), + }; + } + return field; + }); + }, }, -]; +}; From 56dd9222a6e1ad65600be077c96acf5330dcff22 Mon Sep 17 00:00:00 2001 From: Ankur Prabhu <85862184+AnkurPrabhu@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:48:52 +0530 Subject: [PATCH 03/25] Fix Notifications for Facility Cover Image Deletion (#7609) --- .../Facility/CoverImageEditModal.tsx | 69 +++++++++++-------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/src/Components/Facility/CoverImageEditModal.tsx b/src/Components/Facility/CoverImageEditModal.tsx index 319ae60fd1b..dc8e0fcd6d7 100644 --- a/src/Components/Facility/CoverImageEditModal.tsx +++ b/src/Components/Facility/CoverImageEditModal.tsx @@ -28,6 +28,22 @@ interface Props { facility: FacilityModel; } +const VideoConstraints = { + user: { + width: 1280, + height: 720, + facingMode: "user", + }, + environment: { + width: 1280, + height: 720, + facingMode: { exact: "environment" }, + }, +} as const; + +type IVideoConstraint = + (typeof VideoConstraints)[keyof typeof VideoConstraints]; + const CoverImageEditModal = ({ open, onClose, @@ -35,31 +51,26 @@ const CoverImageEditModal = ({ onDelete, facility, }: Props) => { - const [isUploading, setIsUploading] = useState(false); - const [selectedFile, setSelectedFile] = useState(); + const [isProcessing, setIsProcessing] = useState(false); + const [selectedFile, setSelectedFile] = useState(); const [preview, setPreview] = useState(); const [isCameraOpen, setIsCameraOpen] = useState(false); const webRef = useRef(null); const [previewImage, setPreviewImage] = useState(null); const [isCaptureImgBeingUploaded, setIsCaptureImgBeingUploaded] = useState(false); - const FACING_MODE_USER = "user"; - const FACING_MODE_ENVIRONMENT = { exact: "environment" }; - const [facingMode, setFacingMode] = useState(FACING_MODE_USER); - const videoConstraints = { - width: 1280, - height: 720, - facingMode: "user", - }; + const [constraint, setConstraint] = useState( + VideoConstraints.user, + ); const { width } = useWindowDimensions(); const LaptopScreenBreakpoint = 640; const isLaptopScreen = width >= LaptopScreenBreakpoint; const { t } = useTranslation(); const handleSwitchCamera = useCallback(() => { - setFacingMode((prevState: any) => - prevState === FACING_MODE_USER - ? FACING_MODE_ENVIRONMENT - : FACING_MODE_USER, + setConstraint((prev) => + prev.facingMode === "user" + ? VideoConstraints.environment + : VideoConstraints.user, ); }, []); @@ -106,7 +117,7 @@ const CoverImageEditModal = ({ const formData = new FormData(); formData.append("cover_image", selectedFile); const url = `/api/v1/facility/${facility.id}/cover_image/`; - setIsUploading(true); + setIsProcessing(true); uploadFile( url, @@ -123,7 +134,7 @@ const CoverImageEditModal = ({ Notification.Error({ msg: "Something went wrong!", }); - setIsUploading(false); + setIsProcessing(false); } }, null, @@ -131,26 +142,28 @@ const CoverImageEditModal = ({ Notification.Error({ msg: "Network Failure. Please check your internet connectivity.", }); - setIsUploading(false); + setIsProcessing(false); }, ); await sleep(1000); - setIsUploading(false); + setIsProcessing(false); setIsCaptureImgBeingUploaded(false); onSave && onSave(); closeModal(); }; const handleDelete = async () => { + setIsProcessing(true); const { res } = await request(routes.deleteFacilityCoverImage, { pathParams: { id: facility.id! }, }); if (res?.ok) { Success({ msg: "Cover image deleted" }); - onDelete?.(); - closeModal(); } + setIsProcessing(false); + onDelete?.(); + closeModal(); }; const hasImage = !!(preview || facility.read_cover_image_url); @@ -277,13 +290,13 @@ const CoverImageEditModal = ({ closeModal(); dragProps.setFileDropError(""); }} - disabled={isUploading} + disabled={isProcessing} /> {facility.read_cover_image_url && ( {t("delete")} @@ -291,15 +304,15 @@ const CoverImageEditModal = ({ - {isUploading ? ( + {isProcessing ? ( ) : ( )} - {isUploading ? `${t("uploading")}...` : `${t("save")}`} + {isProcessing ? `${t("uploading")}...` : `${t("save")}`}
@@ -320,7 +333,7 @@ const CoverImageEditModal = ({ screenshotFormat="image/jpeg" width={1280} ref={webRef} - videoConstraints={{ ...videoConstraints, facingMode }} + videoConstraints={constraint} /> ) : ( @@ -365,7 +378,7 @@ const CoverImageEditModal = ({ setPreviewImage(null); }} className="my-2 w-full" - disabled={isUploading} + disabled={isProcessing} > {t("retake")} @@ -430,7 +443,7 @@ const CoverImageEditModal = ({ > {t("retake")} - + {isCaptureImgBeingUploaded ? ( <> Date: Fri, 9 Aug 2024 10:49:08 +0530 Subject: [PATCH 04/25] Added sorting for events (#8270) --- src/Common/constants.tsx | 7 +++++++ .../ConsultationDetails/Events/EventsList.tsx | 19 ++++++++++++++++++- src/Locale/en/SortOptions.json | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Common/constants.tsx b/src/Common/constants.tsx index 4a490f34e78..2bfecf94395 100644 --- a/src/Common/constants.tsx +++ b/src/Common/constants.tsx @@ -201,6 +201,13 @@ export const PATIENT_SORT_OPTIONS: SortOption[] = [ { isAscending: false, value: "-name" }, ]; +export const EVENTS_SORT_OPTIONS: SortOption[] = [ + { isAscending: false, value: "-created_date" }, + { isAscending: true, value: "created_date" }, + { isAscending: false, value: "-taken_at" }, + { isAscending: true, value: "taken_at" }, +]; + export const DISCHARGED_PATIENT_SORT_OPTIONS: SortOption[] = [ { isAscending: false, value: "-created_date" }, { isAscending: true, value: "created_date" }, diff --git a/src/Components/Facility/ConsultationDetails/Events/EventsList.tsx b/src/Components/Facility/ConsultationDetails/Events/EventsList.tsx index f759559c1a1..d77b3d9a8c2 100644 --- a/src/Components/Facility/ConsultationDetails/Events/EventsList.tsx +++ b/src/Components/Facility/ConsultationDetails/Events/EventsList.tsx @@ -7,15 +7,32 @@ import LoadingLogUpdateCard from "../../Consultations/DailyRounds/LoadingCard"; import GenericEvent from "./GenericEvent"; import { getEventIcon } from "./iconMap"; import { EventGeneric } from "./types"; +import SortDropdownMenu from "../../../Common/SortDropdown"; +import { EVENTS_SORT_OPTIONS } from "../../../../Common/constants"; +import { QueryParams } from "../../../../Utils/request/types"; +import { useState } from "react"; export default function EventsList() { const [consultationId] = useSlugs("consultation"); const { t } = useTranslation(); + const [query, setQuery] = useState(); return ( - + {() => ( <> +
+ +
+
diff --git a/src/Locale/en/SortOptions.json b/src/Locale/en/SortOptions.json index 11986b97663..29a8d1e8f4d 100644 --- a/src/Locale/en/SortOptions.json +++ b/src/Locale/en/SortOptions.json @@ -9,6 +9,8 @@ "facility__name,-last_consultation__current_bed__bed__name": "Bed No. N-1", "-review_time": "Latest review date first", "review_time": "Oldest review date first", + "taken_at": "Oldest taken date first", + "-taken_at": "Latest taken date first", "name": "Patient name A-Z", "-name": "Patient name Z-A", "bed__name": "Bed No. 1-N", From 18e988866eeac6e968ff4a8ba5e2814f5c8b3b17 Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Fri, 9 Aug 2024 15:53:56 +0530 Subject: [PATCH 05/25] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Fixes=20issue=20w?= =?UTF-8?q?ith=20treating=20physician=20field=20being=20disabled=20when=20?= =?UTF-8?q?a=20search=20text=20entered=20yields=20no=20results;=20?= =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Migrate=20`UserAutocompleteFormField`?= =?UTF-8?q?=20to=20use=20`useQuery`=20(#8274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add tests to replicate the issue * refactor name formatting to use utility fn * Upgrade UserAutocompleteFormField to use useQuery and have dedicated subcomponents based on linked facility or users api query * remove unused import * fix types * update cypress * fix issue with mergeQuery options and cleanup * fix cypress syntax error * add id for autocomplete input * update test * fix cypress * skip explicit clearing * remove test --- src/Components/ABDM/ABDMFacilityRecords.tsx | 11 +- src/Components/ABDM/ABDMRecordsTab.tsx | 4 +- src/Components/Assets/AssetManage.tsx | 5 +- .../Common/RelativeDateUserMention.tsx | 4 +- .../Common/UserAutocompleteFormField.tsx | 210 +++++++++++------- src/Components/Facility/ConsultationForm.tsx | 22 +- .../Facility/DoctorVideoSlideover.tsx | 13 +- src/Components/Facility/FacilityUsers.tsx | 4 +- src/Components/Facility/PatientNoteCard.tsx | 10 +- src/Components/Notifications/NoticeBoard.tsx | 4 +- src/Components/Patient/PatientHome.tsx | 20 +- src/Components/Patient/PatientInfoCard.tsx | 3 +- src/Components/Resource/CommentSection.tsx | 5 +- src/Components/Resource/ResourceBoard.tsx | 5 +- src/Components/Resource/ResourceDetails.tsx | 11 +- .../Resource/ResourceDetailsUpdate.tsx | 4 +- src/Components/Shifting/BadgesList.tsx | 9 +- src/Components/Shifting/CommentsSection.tsx | 5 +- src/Components/Shifting/ListFilter.tsx | 6 +- src/Components/Shifting/ShiftDetails.tsx | 11 +- .../Shifting/ShiftDetailsUpdate.tsx | 12 +- src/Components/Shifting/ShiftingBoard.tsx | 5 +- src/Components/Users/ManageUsers.tsx | 11 +- src/Redux/actions.tsx | 14 -- 24 files changed, 217 insertions(+), 191 deletions(-) diff --git a/src/Components/ABDM/ABDMFacilityRecords.tsx b/src/Components/ABDM/ABDMFacilityRecords.tsx index eadf39b8db7..cd21d269536 100644 --- a/src/Components/ABDM/ABDMFacilityRecords.tsx +++ b/src/Components/ABDM/ABDMFacilityRecords.tsx @@ -86,8 +86,8 @@ export default function ABDMFacilityRecords({ facilityId }: IProps) { consent.expiry, ) < new Date() ? "EXPIRED" - : consent.consent_artefacts?.[0]?.status ?? - consent.status} + : (consent.consent_artefacts?.[0]?.status ?? + consent.status)} @@ -102,13 +102,6 @@ export default function ABDMFacilityRecords({ facilityId }: IProps) { : "-"} - {/* - {`${consent.requester?.first_name} ${consent.requester?.last_name}`.trim()} -

- ({consent.requester.username}) -

- */} - {formatDateTime( consent.consent_artefacts?.[0]?.from_time ?? diff --git a/src/Components/ABDM/ABDMRecordsTab.tsx b/src/Components/ABDM/ABDMRecordsTab.tsx index d828335cd0d..37ae1a629db 100644 --- a/src/Components/ABDM/ABDMRecordsTab.tsx +++ b/src/Components/ABDM/ABDMRecordsTab.tsx @@ -5,7 +5,7 @@ import CareIcon from "../../CAREUI/icons/CareIcon"; import ButtonV2 from "../Common/components/ButtonV2"; import * as Notification from "../../Utils/Notifications.js"; import Loading from "../Common/Loading"; -import { classNames } from "../../Utils/utils"; +import { classNames, formatName } from "../../Utils/utils"; import { Link } from "raviger"; import routes from "../../Redux/api"; import request from "../../Utils/request/request"; @@ -75,7 +75,7 @@ function ConsentRequestCard({ consent }: IConsentRequestCardProps) { }
- {consent.requester.first_name} {consent.requester.last_name} + {formatName(consent.requester)}
diff --git a/src/Components/Assets/AssetManage.tsx b/src/Components/Assets/AssetManage.tsx index a9bb6eb78ea..469d1556fb5 100644 --- a/src/Components/Assets/AssetManage.tsx +++ b/src/Components/Assets/AssetManage.tsx @@ -10,7 +10,7 @@ import Pagination from "../Common/Pagination"; import { navigate } from "raviger"; import QRCode from "qrcode.react"; import AssetWarrantyCard from "./AssetWarrantyCard"; -import { formatDate, formatDateTime } from "../../Utils/utils"; +import { formatDate, formatDateTime, formatName } from "../../Utils/utils"; import Chip from "../../CAREUI/display/Chip"; import CareIcon from "../../CAREUI/icons/CareIcon"; import ButtonV2 from "../Common/components/ButtonV2"; @@ -148,8 +148,7 @@ const AssetManage = (props: AssetManageProps) => { - {transaction.performed_by.first_name}{" "} - {transaction.performed_by.last_name} + {formatName(transaction.performed_by)} diff --git a/src/Components/Common/RelativeDateUserMention.tsx b/src/Components/Common/RelativeDateUserMention.tsx index 70eadc5b7ed..541c38c3537 100644 --- a/src/Components/Common/RelativeDateUserMention.tsx +++ b/src/Components/Common/RelativeDateUserMention.tsx @@ -1,5 +1,5 @@ import CareIcon from "../../CAREUI/icons/CareIcon"; -import { formatDateTime, relativeDate } from "../../Utils/utils"; +import { formatDateTime, formatName, relativeDate } from "../../Utils/utils"; import { PerformedByModel } from "../HCX/misc"; function RelativeDateUserMention(props: { @@ -28,7 +28,7 @@ function RelativeDateUserMention(props: { }`} >
-

{`${props.user.first_name} ${props.user.last_name}`}

+

{formatName(props.user)}

{`@${props.user.username}`}

{props.user.user_type}

diff --git a/src/Components/Common/UserAutocompleteFormField.tsx b/src/Components/Common/UserAutocompleteFormField.tsx index 442eb0ae4fe..3ff6a3ae7c2 100644 --- a/src/Components/Common/UserAutocompleteFormField.tsx +++ b/src/Components/Common/UserAutocompleteFormField.tsx @@ -1,112 +1,158 @@ -import { useAsyncOptions } from "../../Common/hooks/useAsyncOptions"; -import { getFacilityUsers, getUserList } from "../../Redux/actions"; import { Autocomplete } from "../Form/FormFields/Autocomplete"; import FormField from "../Form/FormFields/FormField"; import { FormFieldBaseProps, useFormFieldPropsResolver, } from "../Form/FormFields/Utils"; -import { UserModel } from "../Users/models"; -import { isUserOnline } from "../../Utils/utils"; +import { + classNames, + formatName, + isUserOnline, + mergeQueryOptions, +} from "../../Utils/utils"; import { UserRole } from "../../Common/constants"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; +import useQuery from "../../Utils/request/useQuery"; +import routes from "../../Redux/api"; +import { UserBareMinimum } from "../Users/models"; -type Props = FormFieldBaseProps & { +type BaseProps = FormFieldBaseProps & { placeholder?: string; - facilityId?: string; - homeFacility?: string; userType?: UserRole; - showActiveStatus?: boolean; noResultsError?: string; }; -export default function UserAutocompleteFormField(props: Props) { +type LinkedFacilitySearchProps = BaseProps & { + facilityId: string; + homeFacility?: undefined; +}; + +type UserSearchProps = BaseProps & { + facilityId?: undefined; + homeFacility?: string; +}; + +export default function UserAutocomplete(props: UserSearchProps) { const field = useFormFieldPropsResolver(props); - const { fetchOptions, isLoading, options } = useAsyncOptions( - "id", - { queryResponseExtractor: (data) => data.results }, - ); + const [query, setQuery] = useState(""); + const [disabled, setDisabled] = useState(false); - let search_filter: { - limit: number; - offset: number; - home_facility?: string; - user_type?: string; - search_text?: string; - } = { limit: 50, offset: 0 }; + const { data, loading } = useQuery(routes.userList, { + query: { + home_facility: props.homeFacility, + user_type: props.userType, + search_text: query, + limit: 50, + offset: 0, + }, + }); - if (props.showActiveStatus && props.userType) { - search_filter = { ...search_filter, user_type: props.userType }; - } + useEffect(() => { + if ( + loading || + query || + !field.required || + !props.noResultsError || + !data?.results + ) { + return; + } - if (props.homeFacility) { - search_filter = { ...search_filter, home_facility: props.homeFacility }; - } + if (data.results.length === 0) { + setDisabled(true); + field.handleChange(undefined as unknown as UserBareMinimum); + } + }, [loading, query, field.required, data?.results, props.noResultsError]); - const getStatusIcon = (option: UserModel) => { - if (!props.showActiveStatus) return null; + return ( + + obj.username, + )} + optionLabel={formatName} + optionIcon={userOnlineDot} + optionDescription={(option) => + `${option.user_type} - ${option.username}` + } + optionValue={(option) => option} + onQuery={setQuery} + isLoading={loading} + /> + + ); +} - return ( -
- - - -
- ); - }; +export const LinkedFacilityUsers = (props: LinkedFacilitySearchProps) => { + const field = useFormFieldPropsResolver(props); - const items = options(field.value && [field.value]); + const [query, setQuery] = useState(""); - useEffect(() => { - if (props.required && !isLoading && !items.length && props.noResultsError) { - field.handleChange(undefined as unknown as UserModel); - } - }, [isLoading, items, props.required]); + const { data, loading } = useQuery(routes.getFacilityUsers, { + pathParams: { facility_id: props.facilityId }, + query: { + user_type: props.userType, + search_text: query, + limit: 50, + offset: 0, + }, + }); const noResultError = - (props.required && !isLoading && !items.length && props.noResultsError) || + (!query && + !loading && + field.required && + !data?.results?.length && + props.noResultsError) || undefined; + useEffect(() => { + if (noResultError) { + field.handleChange(undefined as unknown as UserBareMinimum); + } + }, [noResultError]); + return ( -
- `${option.user_type}`} - optionValue={(option) => option} - onQuery={(query) => - fetchOptions( - props.facilityId - ? getFacilityUsers(props.facilityId, { - ...search_filter, - search_text: query, - }) - : getUserList({ ...search_filter, search_text: query }), - ) - } - isLoading={isLoading} - /> -
+ obj.username, + )} + optionLabel={formatName} + optionIcon={userOnlineDot} + optionDescription={(option) => + `${option.user_type} - ${option.username}` + } + optionValue={(option) => option} + onQuery={setQuery} + isLoading={loading} + />
); -} - -const getUserFullName = (user: UserModel) => { - const personName = user.first_name + " " + user.last_name; - return personName.trim().length > 0 ? personName : user.username || ""; }; + +const userOnlineDot = (user: UserBareMinimum) => ( +
+); diff --git a/src/Components/Facility/ConsultationForm.tsx b/src/Components/Facility/ConsultationForm.tsx index 40d9741d712..c9339ce685b 100644 --- a/src/Components/Facility/ConsultationForm.tsx +++ b/src/Components/Facility/ConsultationForm.tsx @@ -33,8 +33,8 @@ import PatientCategorySelect from "../Patient/PatientCategorySelect"; import { SelectFormField } from "../Form/FormFields/SelectFormField"; import TextAreaFormField from "../Form/FormFields/TextAreaFormField"; import TextFormField from "../Form/FormFields/TextFormField"; -import UserAutocompleteFormField from "../Common/UserAutocompleteFormField"; -import { UserModel } from "../Users/models"; +import UserAutocomplete from "../Common/UserAutocompleteFormField"; +import { UserBareMinimum } from "../Users/models"; import { navigate } from "raviger"; import useAppHistory from "../../Common/hooks/useAppHistory"; @@ -90,7 +90,7 @@ type FormDetails = { referred_by_external?: string; transferred_from_location?: string; treating_physician: string; - treating_physician_object: UserModel | null; + treating_physician_object: UserBareMinimum | null; create_diagnoses: CreateDiagnosis[]; diagnoses: ConsultationDiagnosis[]; symptoms: EncounterSymptom[]; @@ -107,7 +107,7 @@ type FormDetails = { is_telemedicine: BooleanStrings; action?: number; assigned_to: string; - assigned_to_object: UserModel | null; + assigned_to_object: UserBareMinimum | null; special_instruction: string; review_interval: number; weight: string; @@ -386,8 +386,8 @@ export const ConsultationForm = ({ facilityId, patientId, id }: Props) => { admitted: data.admitted ? String(data.admitted) : "false", admitted_to: data.admitted_to ? data.admitted_to : "", category: data.category - ? PATIENT_CATEGORIES.find((i) => i.text === data.category)?.id ?? - "" + ? (PATIENT_CATEGORIES.find((i) => i.text === data.category)?.id ?? + "") : "", patient_no: data.patient_no ?? "", OPconsultation: data.consultation_notes, @@ -782,7 +782,9 @@ export const ConsultationForm = ({ facilityId, patientId, id }: Props) => { } }; - const handleDoctorSelect = (event: FieldChangeEvent) => { + const handleDoctorSelect = ( + event: FieldChangeEvent, + ) => { if (event.value?.id) { dispatch({ type: "set_form", @@ -1430,7 +1432,7 @@ export const ConsultationForm = ({ facilityId, patientId, id }: Props) => { className="col-span-6" ref={fieldRef["treating_physician"]} > - { state.form.treating_physician_object ?? undefined } onChange={handleDoctorSelect} - showActiveStatus userType={"Doctor"} homeFacility={facilityId} error={state.errors.treating_physician} @@ -1483,8 +1484,7 @@ export const ConsultationForm = ({ facilityId, patientId, id }: Props) => { className="col-span-6 flex-[2]" ref={fieldRef["assigned_to"]} > -
- - {user.first_name} {user.last_name} - + {formatName(user)} - {`${user.first_name} ${user.last_name}`} + {formatName(user)}
diff --git a/src/Components/Facility/PatientNoteCard.tsx b/src/Components/Facility/PatientNoteCard.tsx index 7f00700ff47..7d2a8c6eb70 100644 --- a/src/Components/Facility/PatientNoteCard.tsx +++ b/src/Components/Facility/PatientNoteCard.tsx @@ -1,4 +1,9 @@ -import { relativeDate, formatDateTime, classNames } from "../../Utils/utils"; +import { + relativeDate, + formatDateTime, + classNames, + formatName, +} from "../../Utils/utils"; import { USER_TYPES_MAP } from "../../Common/constants"; import { PatientNotesEditModel, PatientNotesModel } from "./models"; import ButtonV2 from "../Common/components/ButtonV2"; @@ -78,8 +83,7 @@ const PatientNoteCard = ({
- {note.created_by_object?.first_name || "Unknown"}{" "} - {note.created_by_object?.last_name} + {formatName(note.created_by_object)} {note.user_type && ( diff --git a/src/Components/Notifications/NoticeBoard.tsx b/src/Components/Notifications/NoticeBoard.tsx index db285eb9d6a..98c4daba2c4 100644 --- a/src/Components/Notifications/NoticeBoard.tsx +++ b/src/Components/Notifications/NoticeBoard.tsx @@ -1,6 +1,6 @@ import Page from "../Common/components/Page"; import Loading from "../Common/Loading"; -import { formatDateTime } from "../../Utils/utils"; +import { formatDateTime, formatName } from "../../Utils/utils"; import { useTranslation } from "react-i18next"; import CareIcon from "../../CAREUI/icons/CareIcon"; import useQuery from "../../Utils/request/useQuery"; @@ -25,7 +25,7 @@ export const NoticeBoard = () => {
{item.message}
- {`${item.caused_by.first_name} ${item.caused_by.last_name}`} -{" "} + {formatName(item.caused_by)} -{" "} {item.caused_by.user_type} diff --git a/src/Components/Patient/PatientHome.tsx b/src/Components/Patient/PatientHome.tsx index 1bee5a3b245..9482dc103dd 100644 --- a/src/Components/Patient/PatientHome.tsx +++ b/src/Components/Patient/PatientHome.tsx @@ -18,6 +18,7 @@ import { classNames, formatDate, formatDateTime, + formatName, formatPatientAge, isAntenatal, isPostPartum, @@ -30,7 +31,7 @@ import { useTranslation } from "react-i18next"; import CircularProgress from "../Common/components/CircularProgress"; import Page from "../Common/components/Page"; import ConfirmDialog from "../Common/ConfirmDialog"; -import UserAutocompleteFormField from "../Common/UserAutocompleteFormField"; +import UserAutocomplete from "../Common/UserAutocompleteFormField"; import dayjs from "../../Utils/dayjs"; import { triggerGoal } from "../../Integrations/Plausible"; import useAuthUser from "../../Common/hooks/useAuthUser"; @@ -275,14 +276,9 @@ export const PatientHome = (props: any) => {

Assigned Doctor: - { - patientData?.last_consultation?.assigned_to_object - .first_name - } - { - patientData?.last_consultation?.assigned_to_object - .last_name - } + {formatName( + patientData.last_consultation.assigned_to_object, + )} {patientData?.last_consultation?.assigned_to_object .alt_phone_number && ( @@ -300,8 +296,7 @@ export const PatientHome = (props: any) => {

Assigned Volunteer: - {patientData.assigned_to_object.first_name} - {patientData.assigned_to_object.last_name} + {formatName(patientData.assigned_to_object)}

)} @@ -1395,8 +1390,7 @@ export const PatientHome = (props: any) => { onClose={() => setOpenAssignVolunteerDialog(false)} description={
- {consultation?.treating_physician_object - ? `${consultation?.treating_physician_object.first_name} ${consultation?.treating_physician_object.last_name}` + ? formatName(consultation.treating_physician_object) : consultation?.deprecated_verified_by} - {created_by_object?.first_name || "Unknown"}{" "} - {created_by_object?.last_name} + {formatName(created_by_object)}
diff --git a/src/Components/Resource/ResourceBoard.tsx b/src/Components/Resource/ResourceBoard.tsx index 352942aff83..c80d11bf361 100644 --- a/src/Components/Resource/ResourceBoard.tsx +++ b/src/Components/Resource/ResourceBoard.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; import { downloadResourceRequests } from "../../Redux/actions"; import { navigate } from "raviger"; -import { classNames } from "../../Utils/utils"; +import { classNames, formatName } from "../../Utils/utils"; import { useDrag, useDrop } from "react-dnd"; import { formatDateTime } from "../../Utils/utils"; import { ExportButton } from "../Common/Export"; @@ -126,8 +126,7 @@ const ResourceCard = ({ resource }: any) => { >
- {resource.assigned_to_object.first_name}{" "} - {resource.assigned_to_object.last_name} -{" "} + {formatName(resource.assigned_to_object)} -{" "} {resource.assigned_to_object.user_type}
diff --git a/src/Components/Resource/ResourceDetails.tsx b/src/Components/Resource/ResourceDetails.tsx index c719556d561..4c01bdc4b9c 100644 --- a/src/Components/Resource/ResourceDetails.tsx +++ b/src/Components/Resource/ResourceDetails.tsx @@ -1,5 +1,5 @@ import { useState, lazy } from "react"; -import { classNames, formatDateTime } from "../../Utils/utils"; +import { classNames, formatDateTime, formatName } from "../../Utils/utils"; import { navigate } from "raviger"; import * as Notification from "../../Utils/Notifications.js"; import CommentSection from "./CommentSection"; @@ -241,8 +241,7 @@ export default function ResourceDetails(props: { id: string }) {

- Assigned to: {data.assigned_to_object.first_name}{" "} - {data.assigned_to_object.last_name} -{" "} + Assigned to: {formatName(data.assigned_to_object)} -{" "} {data.assigned_to_object.user_type}

@@ -359,8 +358,7 @@ export default function ResourceDetails(props: { id: string }) {
- {data?.created_by_object?.first_name}{" "} - {data?.created_by_object?.last_name} + {formatName(data.created_by_object)}
{data.created_date && formatDateTime(data.created_date)} @@ -373,8 +371,7 @@ export default function ResourceDetails(props: { id: string }) {
- {data?.last_edited_by_object?.first_name}{" "} - {data?.last_edited_by_object?.last_name} + {formatName(data.last_edited_by_object)}
{data.modified_date && formatDateTime(data.modified_date)} diff --git a/src/Components/Resource/ResourceDetailsUpdate.tsx b/src/Components/Resource/ResourceDetailsUpdate.tsx index 89d4d5a15ea..178ab596148 100644 --- a/src/Components/Resource/ResourceDetailsUpdate.tsx +++ b/src/Components/Resource/ResourceDetailsUpdate.tsx @@ -13,7 +13,7 @@ import RadioFormField from "../Form/FormFields/RadioFormField"; import { SelectFormField } from "../Form/FormFields/SelectFormField"; import TextAreaFormField from "../Form/FormFields/TextAreaFormField"; import TextFormField from "../Form/FormFields/TextFormField"; -import UserAutocompleteFormField from "../Common/UserAutocompleteFormField"; +import UserAutocomplete from "../Common/UserAutocompleteFormField"; import useAppHistory from "../../Common/hooks/useAppHistory"; import useQuery from "../../Utils/request/useQuery.js"; import routes from "../../Redux/api.js"; @@ -209,7 +209,7 @@ export const ResourceDetailsUpdate = (props: resourceProps) => { {assignedUserLoading ? ( ) : ( - - {created_by_object?.first_name || t("unknown")}{" "} - {created_by_object?.last_name} + {formatName(created_by_object)}
diff --git a/src/Components/Shifting/ListFilter.tsx b/src/Components/Shifting/ListFilter.tsx index af98f524ed2..12bb17db09c 100644 --- a/src/Components/Shifting/ListFilter.tsx +++ b/src/Components/Shifting/ListFilter.tsx @@ -21,7 +21,7 @@ import useConfig from "../../Common/hooks/useConfig"; import useMergeState from "../../Common/hooks/useMergeState"; import { useTranslation } from "react-i18next"; -import UserAutocompleteFormField from "../Common/UserAutocompleteFormField"; +import UserAutocomplete from "../Common/UserAutocompleteFormField"; import { dateQueryString, parsePhoneNumber } from "../../Utils/utils"; import dayjs from "dayjs"; import useQuery from "../../Utils/request/useQuery"; @@ -165,7 +165,7 @@ export default function ListFilter(props: any) { patient_phone_number: patient_phone_number === "+91" ? "" - : parsePhoneNumber(patient_phone_number) ?? "", + : (parsePhoneNumber(patient_phone_number) ?? ""), created_date_before: dateQueryString(created_date_before), created_date_after: dateQueryString(created_date_after), modified_date_before: dateQueryString(modified_date_before), @@ -268,7 +268,7 @@ export default function ListFilter(props: any) { {isAssignedLoading ? ( ) : ( -

- {t("assigned_to")}: {data?.assigned_to_object.first_name}{" "} - {data.assigned_to_object.last_name} -{" "} - {data.assigned_to_object.user_type} + {t("assigned_to")}: {formatName(data.assigned_to_object)}{" "} + - {data.assigned_to_object.user_type}

diff --git a/src/Components/Shifting/ShiftDetailsUpdate.tsx b/src/Components/Shifting/ShiftDetailsUpdate.tsx index 35e77066ef4..37adecaedcd 100644 --- a/src/Components/Shifting/ShiftDetailsUpdate.tsx +++ b/src/Components/Shifting/ShiftDetailsUpdate.tsx @@ -33,8 +33,8 @@ import CircularProgress from "../Common/components/CircularProgress.js"; import Card from "../../CAREUI/display/Card"; import RadioFormField from "../Form/FormFields/RadioFormField.js"; import Page from "../Common/components/Page.js"; -import UserAutocompleteFormField from "../Common/UserAutocompleteFormField.js"; -import { UserModel } from "../Users/models.js"; +import { LinkedFacilityUsers } from "../Common/UserAutocompleteFormField.js"; +import { UserBareMinimum } from "../Users/models.js"; import useQuery from "../../Utils/request/useQuery.js"; import routes from "../../Redux/api.js"; import { IShift } from "./models.js"; @@ -57,7 +57,7 @@ export const ShiftDetailsUpdate = (props: patientShiftProps) => { const [qParams, _] = useQueryParams(); const [isLoading, setIsLoading] = useState(true); - const [assignedUser, SetAssignedUser] = useState(); + const [assignedUser, SetAssignedUser] = useState(); const [consultationData, setConsultationData] = useState( {} as ConsultationModel, @@ -184,7 +184,9 @@ export const ShiftDetailsUpdate = (props: patientShiftProps) => { return !isInvalidForm; }; - const handleAssignedUserSelect = (event: FieldChangeEvent) => { + const handleAssignedUserSelect = ( + event: FieldChangeEvent, + ) => { const user = event.value; const form = { ...state.form }; form["assigned_to"] = user?.id; @@ -357,7 +359,7 @@ export const ShiftDetailsUpdate = (props: patientShiftProps) => { (assignedUserLoading ? ( ) : ( - { >
- {shift.assigned_to_object.first_name}{" "} - {shift.assigned_to_object.last_name} -{" "} + {formatName(shift.assigned_to_object)} + {" - "} {shift.assigned_to_object.user_type}
diff --git a/src/Components/Users/ManageUsers.tsx b/src/Components/Users/ManageUsers.tsx index 19bafebd115..1acd9ac2a3c 100644 --- a/src/Components/Users/ManageUsers.tsx +++ b/src/Components/Users/ManageUsers.tsx @@ -14,7 +14,12 @@ import routes from "../../Redux/api.js"; import * as Notification from "../../Utils/Notifications.js"; import request from "../../Utils/request/request.js"; import useQuery from "../../Utils/request/useQuery.js"; -import { classNames, isUserOnline, relativeTime } from "../../Utils/utils"; +import { + classNames, + formatName, + isUserOnline, + relativeTime, +} from "../../Utils/utils"; import { FacilitySelect } from "../Common/FacilitySelect"; import Pagination from "../Common/Pagination"; import UserDetails from "../Common/UserDetails"; @@ -178,7 +183,7 @@ export default function ManageUsers() { setUserData({ show: true, username: user.username, - name: `${user.first_name} ${user.last_name}`, + name: formatName(user), }); }; @@ -238,7 +243,7 @@ export default function ManageUsers() { id="name" className="mt-2 flex items-center gap-3 text-2xl font-bold capitalize" > - {`${user.first_name} ${user.last_name}`} + {formatName(user)} {user.last_login && cur_online ? (
{ - return fireRequest("userList", [], params, null, key); -}; - -export const getFacilityUsers = (id: string, params?: object) => { - return fireRequest( - "getFacilityUsers", - [], - { ...params }, - { facility_id: id }, - ); -}; - // asset bed export const listAssetBeds = (params: object, altKey?: string) => fireRequest("listAssetBeds", [], params, {}, altKey); From 57304aa7bc51d98562a478be3e4027881eea92da Mon Sep 17 00:00:00 2001 From: Shivank Kacker Date: Fri, 9 Aug 2024 15:54:12 +0530 Subject: [PATCH 06/25] Fixed date time format for edge cases (#8280) --- .../Facility/ConsultationDetails/Events/GenericEvent.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Components/Facility/ConsultationDetails/Events/GenericEvent.tsx b/src/Components/Facility/ConsultationDetails/Events/GenericEvent.tsx index ca9c13c599b..04ab5657149 100644 --- a/src/Components/Facility/ConsultationDetails/Events/GenericEvent.tsx +++ b/src/Components/Facility/ConsultationDetails/Events/GenericEvent.tsx @@ -32,7 +32,10 @@ const formatValue = (value: unknown, key?: string): ReactNode => { return trimmed; } - if (new Date(trimmed).toString() !== "Invalid Date") { + const dateTimeRegex = + /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?$/; + + if (trimmed.match(dateTimeRegex)) { return new Date(trimmed).toLocaleString(); } From e1184537c86f650f20cf42ed61c20fcd464f57af Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Mon, 12 Aug 2024 13:24:35 +0530 Subject: [PATCH 07/25] Replace old LOC options in Neuro table (#8291) --- .../Consultations/NeurologicalTables.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Components/Facility/Consultations/NeurologicalTables.tsx b/src/Components/Facility/Consultations/NeurologicalTables.tsx index aac558ca8b0..993f0e6cb9c 100644 --- a/src/Components/Facility/Consultations/NeurologicalTables.tsx +++ b/src/Components/Facility/Consultations/NeurologicalTables.tsx @@ -93,13 +93,17 @@ export const NeurologicalTable = (props: any) => { const [currentPage, setCurrentPage] = useState(1); const [totalCount, setTotalCount] = useState(0); + // To be removed in favour of proper fix upcoming in https://github.com/coronasafe/care_fe/pull/8119/files#diff-3f2dc697ea8b52c1b3b887c76623edb0a4e6ace175573dfbd3a7476ffee979a9L96-L103 const LOC_OPTIONS = [ - { id: 0, value: "Unknown" }, + { id: 20, value: "Unresponsive" }, + { id: 15, value: "Responds to Pain" }, + { id: 10, value: "Responds to Voice" }, { id: 5, value: "Alert" }, - { id: 10, value: "Drowsy" }, - { id: 15, value: "Stuporous" }, - { id: 20, value: "Comatose" }, - { id: 25, value: "Cannot Be Assessed" }, + { id: 25, value: "Agitated or Confused" }, + { + id: 30, + value: "Onset of Agitation and Confusion", + }, ]; const REACTION_OPTIONS = [ @@ -294,7 +298,7 @@ export const NeurologicalTable = (props: any) => { {locData.map((x: any, i: any) => (
{x.date} From 7ed9d4733bffbd424e7b4f8e4d1d19d3f3f771af Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Wed, 14 Aug 2024 13:45:22 +0530 Subject: [PATCH 08/25] Migrate rescript components to typescript; uninstall ReScript (#8316) * upgrade eslint and prettier packages * run project wide format * use prettier for tailwind lint rules * Rewrite component to typescript (Authored-by: Shivank @skks1212) * fix unused classname * unplug rescript * add critical care index page * fix issue with dropdown clipping in popup modal * adds icons for daily round sections * fix nested `p` tag error * fix pain chart not working for updates * fix range form field's text input being able to go beyond range * fix checbox not working * fix range form field unable to parse strings as floats * fix neurological monitoring sending incorrect values for some options * fix nursing care layout * add translations to editor index * fix pressure sore not working * replace gray shade with secondary * fix cypress * fix log update sections not compliant with vite hmr update rules * fix bunch of issues with range form field * Fix issues with "Nursing Care" section * Fix issues with "Dialysis" section * Fix issues with "Bloog Sugar" section * Fix issues with "Dialysis" section * Fix issues with "ABG Analaysis" section * Fix issues with "IO Balance" section * Fix issues with "Pupil Size" component * Fix issues with "Neurological Monitoring" section and RadioFormFIeld * fix uncontrolled input error in range form field * Added support for IV and NIV Respiratory Support and fix issues with Resp. support section * improve type definitions for Human Body component and Pressure Sore * Fix issues with "Pressure Sore" section * Visual improvements to Human Chart component * Fix issues with "Pain Chart" in Vitals section * Update preview componets in Consultation Dashboard to use newer components * Check for linked ventilators when filing resp. support section * update cypress tests * fix prine position padding and LOC layout * update LOC choices * update vertical spacing of radio form field * Nursing Care: reduced vertical spacing * Fix I/O Balance select menu not functional * ABG Analaysis: Correct pH value slider range to max 10 instead of 14 * Respiratory Support: Adds missing range value description for tidal volume * remove unused field `consciousness_level_detail` * Fix showig constricted when cannot be assessed selected * Fixes issue when right pupil's checkbox label causes to toggle left pupil's checbox value to change due to same id * Reduce spacing in Glasgow Coma Scale * Fix whitespace breaks in neurological monitoring preview: LOC * Adds missing support for progress note round type sections * Fix spacing between title of pressure sore and pain scale preview tabs * Fix size and spacing of Range Form Field's numeric input and unit selector * Fix pain scale and pressure sore popup not closing on clicking save button * Show Dialog Modal for mobile screens for Pressure sore and Pain scale region editors * ensure consistent colors for pressure sore and painscale buttons and body regions based on score * fix lint issues * prettify files that are not pretty * improve i18n support and code quality refactor * Critical Care details page part 1 (5 of 11 sections) * Resp. support section preview * Pressure Sore section preview * Nursing Care section preview * I/O balance section preview * Vitals section preview * submit BP mean to backend * add success notifications for completing * fix pressure sore colors * remove unused dependencies * Revert "remove unused dependencies" This reverts commit c0e6d5c5b758e33d97e493f417eac82c56881ed7. --- .eslintrc.json | 14 +- bsconfig.json | 32 - .../e2e/patient_spec/patient_logupdate.cy.ts | 8 +- cypress/pageobject/Patient/PatientCreation.ts | 6 +- package-lock.json | 3729 ++++++----------- package.json | 40 +- src/CAREUI/display/PopupModal.tsx | 124 + src/CAREUI/interactive/HumanChart.tsx | 90 + src/Common/constants.tsx | 341 +- src/Components/ABDM/ABDMFacilityRecords.tsx | 5 +- src/Components/Assets/AssetFilter.tsx | 2 +- src/Components/Assets/AssetManage.tsx | 2 +- src/Components/Assets/AssetWarrantyCard.tsx | 2 +- src/Components/CameraFeed/AssetBedSelect.tsx | 2 +- .../LiveMonitoringFilters.tsx | 2 +- src/Components/CameraFeed/FeedControls.tsx | 2 +- src/Components/Common/CareIcon.res | 19 - src/Components/Common/DialogModal.res | 20 - src/Components/Common/ExcelViewer.tsx | 13 +- .../Common/RelativeDateUserMention.tsx | 2 +- src/Components/Common/Sidebar/Sidebar.tsx | 4 +- src/Components/Common/Sidebar/SidebarItem.tsx | 3 +- src/Components/Common/SlideOver.res | 33 - .../Common/TemperatureFormField.tsx | 9 +- src/Components/Common/Transition.res | 26 - src/Components/Common/Uptime.tsx | 2 +- .../Common/UserAutocompleteFormField.tsx | 2 +- src/Components/Common/components/ButtonV2.tsx | 2 +- src/Components/Common/components/CheckBox.tsx | 28 - src/Components/Common/components/Checkbox.res | 15 - .../Common/components/ContactLink.tsx | 2 +- src/Components/Common/components/Link.res | 43 - src/Components/Common/components/Menu.tsx | 2 +- src/Components/Common/components/Radio.res | 15 - .../Common/components/SkeletonLoading.res | 144 - .../types/Prescription__Prescription.res | 75 - src/Components/Common/utils/ArrayUtils.res | 44 - src/Components/Common/utils/DateFns.res | 129 - src/Components/Common/utils/DictUtils.res | 26 - src/Components/Common/utils/ReactUtils.res | 3 - .../Common/utils/ValidationUtils.res | 22 - src/Components/Common/utils/WindowUtils.res | 9 - .../CriticalCare__ABGAnalysisEditor.res | 216 - .../ABGAnalysisEditor/DailyRound__ABG.res | 68 - .../CriticalCare_BloodSugarEditor.res | 144 - .../DailyRound__BloodSugar.res | 18 - .../CriticalCareRecording.res | 4 - .../CriticalCare__API.tsx | 43 - .../CriticalCare__Index.res | 210 - .../CriticalCare__Root.res | 47 - .../DailyRound__Medicines.res | 50 - .../CriticalCare_DialysisEditor.res | 116 - .../DialysisEditor/DailyRound__Dialysis.res | 10 - ...ticalCare__HemodynamicParametersEditor.res | 358 -- .../DailyRound__HemodynamicParameters.res | 71 - .../CriticalCare__IOBalanceEditor.res | 159 - .../IOBalance/DailyRound__IOBalance.res | 88 - .../IOBalance/IOBalance__Summary.res | 12 - .../IOBalance/IOBalance__UnitPicker.res | 98 - .../IOBalance/IOBalance__UnitSection.res | 91 - .../CriticalCare__Description.res | 20 - ...icalCare__NeurologicalMonitoringEditor.res | 580 --- .../CriticalCare__Switch.res | 28 - .../DailyRound__NeurologicalMonitoring.res | 117 - .../CriticalCare__NursingCareEditor.res | 157 - .../NursingCare/DailyRound__NursingCare.res | 12 - .../Others/CriticalCare__OthersEditor.res | 139 - .../Others/DailyRound__General.res | 57 - .../Others/DailyRound__Others.res | 19 - .../Pain/CriticalCare__PainEditor.res | 398 -- .../Pain/CriticalCare__PainInputModal.res | 200 - .../Pain/CriticalCare__PainViewer.res | 11 - .../Pain/DailyRound__Pain.res | 21 - .../CriticalCare__PressureSoreEditor.res | 421 -- .../CriticalCare__PressureSoreInputModal.res | 263 -- .../CriticalCare__PressureSoreViewer.res | 11 - .../PressureSore/DailyRound__PressureSore.res | 23 - .../Recording/CriticalCare__Recording.res | 258 -- .../Recording/Icons/ic-blood_sugar.svg | 3 - .../Recording/Icons/ic-dialysis.svg | 3 - .../Recording/Icons/ic-hemodynamic.svg | 3 - .../Recording/Icons/ic-io_balance.svg | 3 - .../Recording/Icons/ic-neurology.svg | 11 - .../Recording/Icons/ic-nursing_care.svg | 3 - .../Recording/Icons/ic-pressure_sore.svg | 3 - .../Recording/Icons/ic-ventilator.svg | 3 - .../Recording/styles.css | 3 - ...iticalCare__VentilatorParametersEditor.res | 335 -- ...__VentilatorParametersEditor__Invasive.res | 234 -- ...entilatorParametersEditor__NonInvasive.res | 216 - ...Care__VentilatorParametersEditor__None.res | 4 - ...tilatorParametersEditor__OxygenSupport.res | 149 - .../DailyRound__VentilatorParameters.res | 128 - .../CriticalCare__DoubleRangeSlider.res | 30 - .../components/CriticalCare__Dropdown.res | 100 - .../components/CriticalCare__Home.res | 327 -- .../CriticalCare__InputGroupError.res | 13 - .../components/CriticalCare__Loader.res | 6 - .../components/CriticalCare__NumberInput.res | 22 - .../components/CriticalCare__PageTitle.res | 9 - .../CriticalCare__PupilRangeSlider.res | 59 - .../components/CriticalCare__RadioButton.res | 41 - .../components/Notifications.res | 5 - .../components/PressureSore.js | 216 - .../components/ShowOnChecked.res | 25 - .../components/Slider.res | 147 - .../components/styles.css | 387 -- .../types/CriticalCare_BloodSugar.res | 56 - .../types/CriticalCare_Dialysis.res | 20 - .../types/CriticalCare__ABGAnalysis.res | 43 - .../types/CriticalCare__DailyRound.res | 95 - .../CriticalCare__HemodynamicParameters.res | 92 - ...ticalCare__HemodynamicParametersRhythm.res | 4 - .../types/CriticalCare__IOBalance.res | 72 - .../CriticalCare__NeurologicalMonitoring.res | 321 -- .../types/CriticalCare__NursingCare.res | 139 - .../types/CriticalCare__Others.res | 41 - .../types/CriticalCare__Pain.res | 521 --- .../types/CriticalCare__PressureSore.res | 535 --- .../types/CriticalCare__Types.res | 13 - .../CriticalCare__VentilatorParameters.res | 295 -- .../CriticalCareRecording/types/Options.res | 13 - .../types/VentilatorParametersType.res | 32 - src/Components/DeathReport/DeathReport.tsx | 2 +- .../ConditionVerificationStatusMenu.tsx | 2 +- src/Components/ExternalResult/ResultList.tsx | 4 +- src/Components/Facility/BedTypeCard.tsx | 2 +- .../Facility/CentralNursingStation.tsx | 2 +- src/Components/Facility/ConsultationCard.tsx | 9 +- .../ConsultationUpdatesTab.tsx | 2 +- .../ConsultationDetails/Events/EventsList.tsx | 2 +- .../Facility/ConsultationDetails/index.tsx | 9 +- src/Components/Facility/ConsultationForm.tsx | 5 +- .../Facility/Consultations/Beds.res | 18 - .../Facility/Consultations/Beds.tsx | 3 +- .../DailyRounds/LogUpdateCardAttribute.tsx | 4 +- .../Consultations/DailyRoundsList.tsx | 2 +- .../Facility/Consultations/Feed.tsx | 12 +- .../Facility/Consultations/LiveFeed.tsx | 24 +- .../Facility/Consultations/Mews.tsx | 4 +- .../Consultations/NeurologicalTables.tsx | 81 +- .../Facility/Consultations/NursingPlot.tsx | 31 +- .../Facility/Consultations/NutritionPlots.tsx | 8 +- .../Facility/Consultations/PainDiagrams.tsx | 14 +- .../Consultations/PressureSoreDiagrams.tsx | 16 +- .../Consultations/PrimaryParametersPlot.tsx | 8 +- .../components/BinaryChronologicalChart.tsx | 4 +- .../Facility/CoverImageEditModal.tsx | 6 +- .../Facility/DischargedPatientsList.tsx | 2 +- src/Components/Facility/FacilityCreate.tsx | 2 +- src/Components/Facility/FacilityHome.tsx | 4 +- src/Components/Facility/FacilityUsers.tsx | 2 +- src/Components/Facility/HospitalList.tsx | 2 +- src/Components/Facility/InventoryLog.tsx | 8 +- .../Investigations/InvestigationTable.tsx | 2 +- .../Investigations/Reports/ReportTable.tsx | 10 +- .../Investigations/ViewInvestigations.tsx | 2 +- .../Facility/PatientNotesSlideover.tsx | 4 +- src/Components/Facility/TreatmentSummary.tsx | 2 +- src/Components/Facility/models.tsx | 2 - .../Form/FormFields/Autocomplete.tsx | 4 +- .../FormFields/AutocompleteMultiselect.tsx | 2 +- src/Components/Form/FormFields/FormField.tsx | 14 +- src/Components/Form/FormFields/Month.tsx | 2 +- .../Form/FormFields/PhoneNumberFormField.tsx | 2 +- .../Form/FormFields/RadioFormField.tsx | 71 +- .../Form/FormFields/RangeFormField.tsx | 217 + .../Form/FormFields/SelectFormField.tsx | 2 + .../Form/FormFields/TextAreaFormField.tsx | 2 +- .../Form/FormFields/TextFormField.tsx | 4 +- src/Components/Form/SelectMenuV2.tsx | 17 +- .../LogUpdate/CriticalCareEditor.tsx | 209 + .../LogUpdate/CriticalCarePreview.tsx | 543 +++ .../LogUpdate/Sections/ABGAnalysis.tsx | 125 + .../LogUpdate/Sections/BloodSugar.tsx | 59 + .../LogUpdate/Sections/Dialysis.tsx | 35 + .../LogUpdate/Sections/IOBalance.tsx | 196 + .../Sections/NeurologicalMonitoring.tsx | 184 + .../LogUpdate/Sections/NursingCare.tsx | 76 + .../Sections/PressureSore/PressureSore.tsx | 235 ++ .../LogUpdate/Sections/PressureSore/utils.ts | 25 + .../RespiratorySupport/OxygenSupport.tsx | 96 + .../RespiratorySupport/Ventilator.tsx | 125 + .../VentilatorModeSelector.tsx | 46 + .../Sections/RespiratorySupport/index.tsx | 138 + src/Components/LogUpdate/Sections/Vitals.tsx | 168 + src/Components/LogUpdate/Sections/index.tsx | 50 + .../LogUpdate/components/PainChart.tsx | 176 + .../LogUpdate/components/PupilSizeSelect.tsx | 122 + src/Components/LogUpdate/utils.ts | 14 + .../Medicine/PrescriptionDetailCard.tsx | 2 +- src/Components/Medicine/PrintPreview.tsx | 1 - .../Medicine/ResponsiveMedicineTables.tsx | 2 +- src/Components/Notifications/NoticeBoard.tsx | 4 +- .../Patient/DailyRoundListDetails.tsx | 12 +- src/Components/Patient/DailyRounds.tsx | 14 +- src/Components/Patient/FileUpload.tsx | 12 +- .../Patient/InsuranceDetailsCard.tsx | 4 +- src/Components/Patient/ManagePatients.tsx | 4 +- .../Patient/PatientConsentRecordBlock.tsx | 4 +- src/Components/Patient/PatientHome.tsx | 32 +- src/Components/Patient/PatientInfoCard.tsx | 9 +- src/Components/Patient/PatientRegister.tsx | 12 +- src/Components/Patient/SampleTestCard.tsx | 4 +- src/Components/Patient/SampleViewAdmin.tsx | 2 +- src/Components/Patient/models.tsx | 100 +- src/Components/Resource/CommentSection.tsx | 4 +- src/Components/Resource/ResourceBoard.tsx | 4 +- src/Components/Resource/ResourceDetails.tsx | 2 +- src/Components/Scribe/Scribe.tsx | 2 +- src/Components/Scribe/formDetails.ts | 8 +- src/Components/Shifting/CommentsSection.tsx | 4 +- src/Components/Shifting/ShiftDetails.tsx | 2 +- src/Components/Shifting/ShiftingBoard.tsx | 2 +- src/Components/Symptoms/SymptomsBuilder.tsx | 2 +- src/Components/Users/ManageUsers.tsx | 15 +- src/Components/Users/UserAdd.tsx | 14 +- src/Components/Users/UserProfile.tsx | 28 +- .../VitalsMonitor/HL7PatientVitalsMonitor.tsx | 12 +- .../VitalsMonitor/VitalsMonitorFooter.tsx | 2 +- src/Locale/en/Auth.json | 2 +- src/Locale/en/Common.json | 5 +- src/Locale/en/Consultation.json | 4 +- src/Locale/en/LogUpdate.json | 56 + src/Locale/en/Medicine.json | 2 +- src/Locale/en/index.js | 2 + src/Redux/api.tsx | 2 + src/Routers/routes/ConsultationRoutes.tsx | 33 +- src/Utils/request/README.md | 37 +- src/Utils/request/useQuery.ts | 2 +- src/Utils/useFileManager.tsx | 2 +- src/Utils/useFileUpload.tsx | 8 +- src/Utils/utils.ts | 52 + src/style/CAREUI.css | 13 + src/style/index.css | 2 +- 235 files changed, 5194 insertions(+), 13033 deletions(-) delete mode 100644 bsconfig.json create mode 100644 src/CAREUI/display/PopupModal.tsx create mode 100644 src/CAREUI/interactive/HumanChart.tsx delete mode 100644 src/Components/Common/CareIcon.res delete mode 100644 src/Components/Common/DialogModal.res delete mode 100644 src/Components/Common/SlideOver.res delete mode 100644 src/Components/Common/Transition.res delete mode 100644 src/Components/Common/components/CheckBox.tsx delete mode 100644 src/Components/Common/components/Checkbox.res delete mode 100644 src/Components/Common/components/Link.res delete mode 100644 src/Components/Common/components/Radio.res delete mode 100644 src/Components/Common/components/SkeletonLoading.res delete mode 100644 src/Components/Common/prescription-builder/types/Prescription__Prescription.res delete mode 100644 src/Components/Common/utils/ArrayUtils.res delete mode 100644 src/Components/Common/utils/DateFns.res delete mode 100644 src/Components/Common/utils/DictUtils.res delete mode 100644 src/Components/Common/utils/ReactUtils.res delete mode 100644 src/Components/Common/utils/ValidationUtils.res delete mode 100644 src/Components/Common/utils/WindowUtils.res delete mode 100644 src/Components/CriticalCareRecording/ABGAnalysisEditor/CriticalCare__ABGAnalysisEditor.res delete mode 100644 src/Components/CriticalCareRecording/ABGAnalysisEditor/DailyRound__ABG.res delete mode 100644 src/Components/CriticalCareRecording/BloodSugarEditor/CriticalCare_BloodSugarEditor.res delete mode 100644 src/Components/CriticalCareRecording/BloodSugarEditor/DailyRound__BloodSugar.res delete mode 100644 src/Components/CriticalCareRecording/CriticalCareRecording.res delete mode 100644 src/Components/CriticalCareRecording/CriticalCare__API.tsx delete mode 100644 src/Components/CriticalCareRecording/CriticalCare__Index.res delete mode 100644 src/Components/CriticalCareRecording/CriticalCare__Root.res delete mode 100644 src/Components/CriticalCareRecording/DailyRound__Medicines.res delete mode 100644 src/Components/CriticalCareRecording/DialysisEditor/CriticalCare_DialysisEditor.res delete mode 100644 src/Components/CriticalCareRecording/DialysisEditor/DailyRound__Dialysis.res delete mode 100644 src/Components/CriticalCareRecording/HemodynamicParameters/CriticalCare__HemodynamicParametersEditor.res delete mode 100644 src/Components/CriticalCareRecording/HemodynamicParameters/DailyRound__HemodynamicParameters.res delete mode 100644 src/Components/CriticalCareRecording/IOBalance/CriticalCare__IOBalanceEditor.res delete mode 100644 src/Components/CriticalCareRecording/IOBalance/DailyRound__IOBalance.res delete mode 100644 src/Components/CriticalCareRecording/IOBalance/IOBalance__Summary.res delete mode 100644 src/Components/CriticalCareRecording/IOBalance/IOBalance__UnitPicker.res delete mode 100644 src/Components/CriticalCareRecording/IOBalance/IOBalance__UnitSection.res delete mode 100644 src/Components/CriticalCareRecording/NeurologicalMonitoring/CriticalCare__Description.res delete mode 100644 src/Components/CriticalCareRecording/NeurologicalMonitoring/CriticalCare__NeurologicalMonitoringEditor.res delete mode 100644 src/Components/CriticalCareRecording/NeurologicalMonitoring/CriticalCare__Switch.res delete mode 100644 src/Components/CriticalCareRecording/NeurologicalMonitoring/DailyRound__NeurologicalMonitoring.res delete mode 100644 src/Components/CriticalCareRecording/NursingCare/CriticalCare__NursingCareEditor.res delete mode 100644 src/Components/CriticalCareRecording/NursingCare/DailyRound__NursingCare.res delete mode 100644 src/Components/CriticalCareRecording/Others/CriticalCare__OthersEditor.res delete mode 100644 src/Components/CriticalCareRecording/Others/DailyRound__General.res delete mode 100644 src/Components/CriticalCareRecording/Others/DailyRound__Others.res delete mode 100644 src/Components/CriticalCareRecording/Pain/CriticalCare__PainEditor.res delete mode 100644 src/Components/CriticalCareRecording/Pain/CriticalCare__PainInputModal.res delete mode 100644 src/Components/CriticalCareRecording/Pain/CriticalCare__PainViewer.res delete mode 100644 src/Components/CriticalCareRecording/Pain/DailyRound__Pain.res delete mode 100644 src/Components/CriticalCareRecording/PressureSore/CriticalCare__PressureSoreEditor.res delete mode 100644 src/Components/CriticalCareRecording/PressureSore/CriticalCare__PressureSoreInputModal.res delete mode 100644 src/Components/CriticalCareRecording/PressureSore/CriticalCare__PressureSoreViewer.res delete mode 100644 src/Components/CriticalCareRecording/PressureSore/DailyRound__PressureSore.res delete mode 100644 src/Components/CriticalCareRecording/Recording/CriticalCare__Recording.res delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-blood_sugar.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-dialysis.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-hemodynamic.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-io_balance.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-neurology.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-nursing_care.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-pressure_sore.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/Icons/ic-ventilator.svg delete mode 100644 src/Components/CriticalCareRecording/Recording/styles.css delete mode 100644 src/Components/CriticalCareRecording/VentilatorParametersEditor/CriticalCare__VentilatorParametersEditor.res delete mode 100644 src/Components/CriticalCareRecording/VentilatorParametersEditor/CriticalCare__VentilatorParametersEditor__Invasive.res delete mode 100644 src/Components/CriticalCareRecording/VentilatorParametersEditor/CriticalCare__VentilatorParametersEditor__NonInvasive.res delete mode 100644 src/Components/CriticalCareRecording/VentilatorParametersEditor/CriticalCare__VentilatorParametersEditor__None.res delete mode 100644 src/Components/CriticalCareRecording/VentilatorParametersEditor/CriticalCare__VentilatorParametersEditor__OxygenSupport.res delete mode 100644 src/Components/CriticalCareRecording/VentilatorParametersEditor/DailyRound__VentilatorParameters.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__DoubleRangeSlider.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__Dropdown.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__Home.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__InputGroupError.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__Loader.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__NumberInput.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__PageTitle.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__PupilRangeSlider.res delete mode 100644 src/Components/CriticalCareRecording/components/CriticalCare__RadioButton.res delete mode 100644 src/Components/CriticalCareRecording/components/Notifications.res delete mode 100644 src/Components/CriticalCareRecording/components/PressureSore.js delete mode 100644 src/Components/CriticalCareRecording/components/ShowOnChecked.res delete mode 100644 src/Components/CriticalCareRecording/components/Slider.res delete mode 100644 src/Components/CriticalCareRecording/components/styles.css delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare_BloodSugar.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare_Dialysis.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__ABGAnalysis.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__DailyRound.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__HemodynamicParameters.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__HemodynamicParametersRhythm.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__IOBalance.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__NeurologicalMonitoring.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__NursingCare.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__Others.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__Pain.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__PressureSore.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__Types.res delete mode 100644 src/Components/CriticalCareRecording/types/CriticalCare__VentilatorParameters.res delete mode 100644 src/Components/CriticalCareRecording/types/Options.res delete mode 100644 src/Components/CriticalCareRecording/types/VentilatorParametersType.res delete mode 100644 src/Components/Facility/Consultations/Beds.res create mode 100644 src/Components/Form/FormFields/RangeFormField.tsx create mode 100644 src/Components/LogUpdate/CriticalCareEditor.tsx create mode 100644 src/Components/LogUpdate/CriticalCarePreview.tsx create mode 100644 src/Components/LogUpdate/Sections/ABGAnalysis.tsx create mode 100644 src/Components/LogUpdate/Sections/BloodSugar.tsx create mode 100644 src/Components/LogUpdate/Sections/Dialysis.tsx create mode 100644 src/Components/LogUpdate/Sections/IOBalance.tsx create mode 100644 src/Components/LogUpdate/Sections/NeurologicalMonitoring.tsx create mode 100644 src/Components/LogUpdate/Sections/NursingCare.tsx create mode 100644 src/Components/LogUpdate/Sections/PressureSore/PressureSore.tsx create mode 100644 src/Components/LogUpdate/Sections/PressureSore/utils.ts create mode 100644 src/Components/LogUpdate/Sections/RespiratorySupport/OxygenSupport.tsx create mode 100644 src/Components/LogUpdate/Sections/RespiratorySupport/Ventilator.tsx create mode 100644 src/Components/LogUpdate/Sections/RespiratorySupport/VentilatorModeSelector.tsx create mode 100644 src/Components/LogUpdate/Sections/RespiratorySupport/index.tsx create mode 100644 src/Components/LogUpdate/Sections/Vitals.tsx create mode 100644 src/Components/LogUpdate/Sections/index.tsx create mode 100644 src/Components/LogUpdate/components/PainChart.tsx create mode 100644 src/Components/LogUpdate/components/PupilSizeSelect.tsx create mode 100644 src/Components/LogUpdate/utils.ts create mode 100644 src/Locale/en/LogUpdate.json diff --git a/.eslintrc.json b/.eslintrc.json index 0fc2f64ddaf..37bfeb77bb9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -15,7 +15,7 @@ "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "plugin:i18next/recommended", - "plugin:tailwindcss/recommended", + "plugin:prettier/recommended", "plugin:storybook/recommended" ], "overrides": [ @@ -46,10 +46,6 @@ "i18next" ], "rules": { - "quotes": [ - "error", - "double" - ], "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ "error", @@ -59,6 +55,7 @@ "caughtErrorsIgnorePattern": "^_" } ], + "@typescript-eslint/no-explicit-any": "warn", "react/react-in-jsx-scope": "off", "i18next/no-literal-string": [ "warn", @@ -81,12 +78,7 @@ ] } } - ], - "tailwindcss/no-custom-classname": "off", - "tailwindcss/migration-from-tailwind-2": "error", - "tailwindcss/classnames-order": "off", - "tailwindcss/enforces-shorthand": "off", - "tailwindcss/no-contradicting-classname": "error" + ] }, "ignorePatterns": [ "dist", diff --git a/bsconfig.json b/bsconfig.json deleted file mode 100644 index 140429fcd62..00000000000 --- a/bsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "care_fe", - "reason": { - "react-jsx": 3 - }, - "bsc-flags": [ - "-bs-super-errors" - ], - "sources": [ - { - "dir": "src", - "subdirs": true - } - ], - "package-specs": [ - { - "module": "es6", - "in-source": true - } - ], - "suffix": ".bs.js", - "bs-dependencies": [ - "@rescript/react", - "@glennsl/bs-json", - "rescript-webapi" - ], - "ppx-flags": [], - "refmt": 3, - "gentypeconfig": { - "language": "typescript" - } -} \ No newline at end of file diff --git a/cypress/e2e/patient_spec/patient_logupdate.cy.ts b/cypress/e2e/patient_spec/patient_logupdate.cy.ts index cd7e30e1575..162ebd7e620 100644 --- a/cypress/e2e/patient_spec/patient_logupdate.cy.ts +++ b/cypress/e2e/patient_spec/patient_logupdate.cy.ts @@ -57,7 +57,7 @@ describe("Patient Log Update in Normal, Critical and TeleIcu", () => { patientLogupdate.typeSpo2(patientSpo2); patientLogupdate.selectRhythm(patientRhythmType); patientLogupdate.typeRhythm(patientRhythm); - cy.get("#consciousness_level-2").click(); + cy.get("#consciousness_level-option-RESPONDS_TO_PAIN").click(); cy.submitButton("Save"); cy.verifyNotification("Telemedicine log created successfully"); }); @@ -82,7 +82,7 @@ describe("Patient Log Update in Normal, Critical and TeleIcu", () => { patientLogupdate.typeSpo2(patientSpo2); patientLogupdate.selectRhythm(patientRhythmType); patientLogupdate.typeRhythm(patientRhythm); - cy.get("#consciousness_level-2").click(); + cy.get("#consciousness_level-option-RESPONDS_TO_PAIN").click(); cy.submitButton("Save"); cy.verifyNotification("Brief Update log created successfully"); cy.closeNotification(); @@ -137,7 +137,7 @@ describe("Patient Log Update in Normal, Critical and TeleIcu", () => { patientLogupdate.typeSpo2(patientSpo2); patientLogupdate.selectRhythm(patientRhythmType); patientLogupdate.typeRhythm(patientRhythm); - cy.get("#consciousness_level-2").click(); + cy.get("#consciousness_level-option-RESPONDS_TO_PAIN").click(); cy.submitButton("Save"); cy.wait(2000); cy.verifyNotification("Brief Update log created successfully"); @@ -161,7 +161,7 @@ describe("Patient Log Update in Normal, Critical and TeleIcu", () => { patientLogupdate.typePulse(patientPulse); patientLogupdate.typeTemperature(patientTemperature); patientLogupdate.typeRespiratory(patientRespiratory); - cy.get("#consciousness_level-2").click(); + cy.get("#consciousness_level-option-RESPONDS_TO_PAIN").click(); cy.submitButton("Save"); cy.verifyNotification("Brief Update log created successfully"); cy.closeNotification(); diff --git a/cypress/pageobject/Patient/PatientCreation.ts b/cypress/pageobject/Patient/PatientCreation.ts index 482c281c63a..739601d5b56 100644 --- a/cypress/pageobject/Patient/PatientCreation.ts +++ b/cypress/pageobject/Patient/PatientCreation.ts @@ -46,7 +46,7 @@ export class PatientPage { } checkPhoneNumberIsEmergencyNumber() { - cy.get("#emergency_contact_checkbox > div > input").click(); + cy.get("#emergency_contact_checkbox").click(); } typePatientDateOfBirth(dateOfBirth: string) { @@ -93,11 +93,11 @@ export class PatientPage { } clickPatientAntenatalStatusYes() { - cy.get("#is_antenatal-0").click(); + cy.get("#is_antenatal-option-true").click(); } clickPatientPostPartumStatusYes() { - cy.get("#is_postpartum-0").click(); + cy.get("#is_postpartum-option-true").click(); } clickCancelButton() { diff --git a/package-lock.json b/package-lock.json index 2458c891d41..d3837e25bcf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,6 @@ "@pnotify/core": "^5.2.0", "@pnotify/mobile": "^5.2.0", "@react-spring/web": "^9.7.3", - "@rescript/react": "^0.11.0", "@sentry/browser": "^8.12.0", "@yaireo/ui-range": "^2.1.15", "@yudiel/react-qr-scanner": "^2.0.0-beta.3", @@ -29,7 +28,6 @@ "dayjs": "^1.11.11", "echarts": "^5.5.0", "echarts-for-react": "^3.0.2", - "eslint-mdx": "^3.1.5", "events": "^3.3.0", "glob": "^10.4.2", "hi-profiles": "^1.0.6", @@ -57,7 +55,6 @@ "redux": "^4.2.1", "redux-thunk": "^2.4.2", "rehype-raw": "^6.1.1", - "rescript-webapi": "^0.8.0", "use-keyboard-shortcut": "^1.1.6", "uuid": "^9.0.1", "xlsx": "^0.18.5" @@ -84,37 +81,28 @@ "@types/react-google-recaptcha": "^2.1.9", "@types/react-qr-reader": "^2.1.7", "@types/react-transition-group": "^4.4.10", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", "@vitejs/plugin-react-swc": "^3.6.0", "autoprefixer": "^10.4.19", "cypress": "^13.13.1", "cypress-localstorage-commands": "^2.2.5", "cypress-split": "^1.23.2", - "eslint": "^8.44.0", - "eslint-config-prettier": "^8.8.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-i18next": "^6.0.3", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-mdx": "^2.2.0", - "eslint-plugin-only-warn": "^1.1.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.34.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-i18next": "^6.0.9", + "eslint-plugin-mdx": "^3.1.5", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-storybook": "^0.8.0", - "eslint-plugin-tailwindcss": "^3.15.1", "gentype": "^4.5.0", "husky": "^8.0.3", "lint-staged": "^13.2.3", "local-cypress": "^1.2.6", "postcss": "^8.4.38", - "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.5.14", + "prettier": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.5", "prop-types": "^15.8.1", "redux-devtools-extension": "^2.13.9", - "rescript": "^10.1.4", "snyk": "^1.1291.0", "storybook": "^8.1.0", "tailwindcss": "^3.4.3", @@ -131,6 +119,8 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -2696,6 +2686,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -2707,9 +2698,10 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -2718,6 +2710,8 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2740,6 +2734,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2751,15 +2747,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -2770,26 +2763,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -2801,6 +2787,8 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -2874,6 +2862,9 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -2887,6 +2878,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "peer": true, "engines": { "node": ">=12.22" }, @@ -2896,9 +2889,12 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "peer": true }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -3157,6 +3153,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3169,6 +3166,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -3177,6 +3175,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3186,16 +3185,17 @@ } }, "node_modules/@npmcli/config": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.2.0.tgz", - "integrity": "sha512-YoEYZFg0hRSRP/Chmq+J4FvULFvji6SORUYWQc10FiJ+ReAnViXcDCENg6kM6dID04bAoKNUygrby798+gYBbQ==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.3.4.tgz", + "integrity": "sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==", + "dev": true, "dependencies": { "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/package-json": "^5.1.1", "ci-info": "^4.0.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", + "ini": "^4.1.2", + "nopt": "^7.2.1", + "proc-log": "^4.2.0", "semver": "^7.3.5", "walk-up-path": "^3.0.1" }, @@ -3207,6 +3207,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -3215,6 +3216,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "dev": true, "funding": [ { "type": "github", @@ -3226,28 +3228,19 @@ } }, "node_modules/@npmcli/config/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/config/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@npmcli/config/node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, "dependencies": { "abbrev": "^2.0.0" }, @@ -3259,12 +3252,66 @@ } }, "node_modules/@npmcli/config/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -3272,15 +3319,26 @@ "node": ">=10" } }, - "node_modules/@npmcli/config/node_modules/yallist": { + "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } }, "node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", - "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", + "dev": true, "dependencies": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", @@ -3295,14 +3353,16 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3317,10 +3377,118 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/@npmcli/package-json/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -3334,6 +3502,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -3768,15 +3937,6 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@rescript/react": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.11.0.tgz", - "integrity": "sha512-RzoAO+3cJwXE2D7yodMo4tBO2EkeDYCN/I/Sj/yRweI3S1CY1ZBOF/GMcVtjeIurJJt7KMveqQXTaRrqoGZBBg==", - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -6136,6 +6296,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, "dependencies": { "@types/estree": "*" } @@ -6201,6 +6362,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.3.tgz", "integrity": "sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -6315,6 +6477,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dev": true, "dependencies": { "@types/estree": "*" } @@ -6396,19 +6559,14 @@ "node_modules/@types/is-empty": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.3.tgz", - "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==" + "integrity": "sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==", + "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, "node_modules/@types/lodash": { "version": "4.17.0", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", @@ -6622,7 +6780,8 @@ "node_modules/@types/supports-color": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", - "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==" + "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==", + "dev": true }, "node_modules/@types/trusted-types": { "version": "2.0.7", @@ -6633,7 +6792,8 @@ "node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", @@ -6663,32 +6823,31 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -6696,59 +6855,26 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -6756,43 +6882,144 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -6800,35 +7027,38 @@ } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, + "peer": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -6840,26 +7070,56 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, + "peer": true, "dependencies": { - "yallist": "^4.0.0" + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "peer": true, "dependencies": { - "lru-cache": "^6.0.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -6867,26 +7127,79 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@typescript-eslint/utils": { + "node_modules/@typescript-eslint/types": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6895,11 +7208,13 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -6911,7 +7226,7 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", @@ -6926,7 +7241,7 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", @@ -6952,7 +7267,8 @@ "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.6.0", @@ -7399,6 +7715,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -7410,6 +7727,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -7616,6 +7934,11 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/aria-hidden": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", @@ -7708,26 +8031,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -7764,29 +8067,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { @@ -7872,12 +8166,6 @@ "node": ">=4" } }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -7974,15 +8262,6 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/axios": { "version": "1.6.8", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", @@ -7993,15 +8272,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -8225,6 +8495,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8346,29 +8617,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -8467,6 +8715,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8506,6 +8755,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8531,6 +8781,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8913,12 +9164,14 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, "engines": [ "node >= 6.0" ], @@ -9050,22 +9303,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -9297,12 +9534,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -9490,7 +9721,9 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -9881,6 +10114,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, "dependencies": { "dequal": "^2.0.0" }, @@ -9944,6 +10178,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -10172,6 +10407,12 @@ "node": ">=4" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -10282,14 +10523,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -10459,6 +10700,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -10491,6 +10733,8 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -10541,39 +10785,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-compat-utils": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.0.tgz", - "integrity": "sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -10582,59 +10797,11 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/eslint-mdx": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-3.1.5.tgz", "integrity": "sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q==", + "dev": true, "dependencies": { "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", @@ -10663,9 +10830,10 @@ } }, "node_modules/eslint-mdx/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -10673,107 +10841,135 @@ "node": ">=0.4.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "node_modules/eslint-plugin-i18next": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.0.9.tgz", + "integrity": "sha512-tAof/p58sN4Az+P6kqu+RijqddalHhz0X6fe+exyBJAUvN9Yk1plOKl8XMySCIQS+vnRWbzzThgHXeDe++uEXQ==", "dev": true, "dependencies": { - "debug": "^3.2.7" + "lodash": "^4.17.21", + "requireindex": "~1.1.0" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-plugin-mdx": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-3.1.5.tgz", + "integrity": "sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "eslint-mdx": "^3.1.5", + "eslint-plugin-markdown": "^3.0.1", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "tslib": "^2.6.2", + "unified": "^11.0.4", + "vfile": "^6.0.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=8.0.0" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.6.0.tgz", - "integrity": "sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==", + "node_modules/eslint-plugin-mdx/node_modules/eslint-plugin-markdown": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", + "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", "dev": true, - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.5.0" + "mdast-util-from-markdown": "^0.8.5" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=8" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-plugin-i18next": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-i18next/-/eslint-plugin-i18next-6.0.3.tgz", - "integrity": "sha512-RtQXYfg6PZCjejIQ/YG+dUj/x15jPhufJ9hUDGH0kCpJ6CkVMAWOQ9exU1CrbPmzeykxLjrXkjAaOZF/V7+DOA==", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "dependencies": { - "lodash": "^4.17.21", - "requireindex": "~1.1.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">=0.10.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "node_modules/eslint-plugin-react": { + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { + "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", @@ -10785,1718 +10981,91 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=4.0" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-markdown": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", - "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", + "node_modules/eslint-plugin-storybook": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.8.0.tgz", + "integrity": "sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==", "dev": true, "dependencies": { - "mdast-util-from-markdown": "^0.8.5" + "@storybook/csf": "^0.0.1", + "@typescript-eslint/utils": "^5.62.0", + "requireindex": "^1.2.0", + "ts-dedent": "^2.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 18" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": ">=6" } }, - "node_modules/eslint-plugin-mdx": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-2.3.4.tgz", - "integrity": "sha512-kr6tgaifKL+AVGYMtdYc2VCsIjfYQXuUCKz4rK58d2DpnPFHrmgXIOC7NcMvaEld+VOEpxBSCCnjnsf4IVCQGg==", + "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", "dev": true, "dependencies": { - "eslint-mdx": "^2.3.4", - "eslint-plugin-markdown": "^3.0.1", - "remark-mdx": "^2.3.0", - "remark-parse": "^10.0.2", - "remark-stringify": "^10.0.3", - "tslib": "^2.6.1", - "unified": "^10.1.2", - "vfile": "^5.3.7" + "lodash": "^4.17.15" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@npmcli/config": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.4.1.tgz", - "integrity": "sha512-uSz+elSGzjCMANWa5IlbGczLYPkNI/LeR+cHrgaTqTrTSh9RHhOFA4daD2eRUz6lMtOW+Fnsb+qv7V2Zz8ML0g==", - "dev": true, - "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^4.0.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/eslint-plugin-mdx/node_modules/@types/node": { - "version": "18.19.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz", - "integrity": "sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/eslint-plugin-mdx/node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/ci-info": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", - "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/eslint-mdx": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-2.3.4.tgz", - "integrity": "sha512-u4NszEUyoGtR7Q0A4qs0OymsEQdCO6yqWlTzDa9vGWsK7aMotdnW0hqifHTkf6lEtA2vHk2xlkWHTCrhYLyRbw==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0", - "acorn-jsx": "^5.3.2", - "espree": "^9.6.1", - "estree-util-visit": "^1.2.1", - "remark-mdx": "^2.3.0", - "remark-parse": "^10.0.2", - "remark-stringify": "^10.0.3", - "synckit": "^0.9.0", - "tslib": "^2.6.1", - "unified": "^10.1.2", - "unified-engine": "^10.1.0", - "unist-util-visit": "^4.1.2", - "uvu": "^0.5.6", - "vfile": "^5.3.7" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "eslint": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/estree-util-visit": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", - "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/import-meta-resolve": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", - "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/load-plugin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.1.0.tgz", - "integrity": "sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==", - "dev": true, - "dependencies": { - "@npmcli/config": "^6.0.0", - "import-meta-resolve": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdx": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", - "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", - "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdx-jsx": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", - "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "mdast-util-from-markdown": "^1.1.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-mdxjs-esm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", - "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdx-expression": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", - "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdx-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", - "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", - "dev": true, - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdx-md": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", - "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", - "dev": true, - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdxjs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", - "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", - "dev": true, - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-extension-mdxjs-esm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", - "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-mdx-expression": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", - "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-events-to-acorn": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", - "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^2.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/eslint-plugin-mdx/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/eslint-plugin-mdx/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", - "dev": true, - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "dev": true, - "dependencies": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/remark-stringify": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", - "integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unified-engine": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-10.1.0.tgz", - "integrity": "sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==", - "dev": true, - "dependencies": { - "@types/concat-stream": "^2.0.0", - "@types/debug": "^4.0.0", - "@types/is-empty": "^1.0.0", - "@types/node": "^18.0.0", - "@types/unist": "^2.0.0", - "concat-stream": "^2.0.0", - "debug": "^4.0.0", - "fault": "^2.0.0", - "glob": "^8.0.0", - "ignore": "^5.0.0", - "is-buffer": "^2.0.0", - "is-empty": "^1.0.0", - "is-plain-obj": "^4.0.0", - "load-plugin": "^5.0.0", - "parse-json": "^6.0.0", - "to-vfile": "^7.0.0", - "trough": "^2.0.0", - "unist-util-inspect": "^7.0.0", - "vfile-message": "^3.0.0", - "vfile-reporter": "^7.0.0", - "vfile-statistics": "^2.0.0", - "yaml": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-inspect": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.2.tgz", - "integrity": "sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-position-from-estree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", - "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-remove-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", - "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/vfile-reporter": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.5.tgz", - "integrity": "sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==", - "dev": true, - "dependencies": { - "@types/supports-color": "^8.0.0", - "string-width": "^5.0.0", - "supports-color": "^9.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile": "^5.0.0", - "vfile-message": "^3.0.0", - "vfile-sort": "^3.0.0", - "vfile-statistics": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/vfile-sort": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.1.tgz", - "integrity": "sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==", - "dev": true, - "dependencies": { - "vfile": "^5.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/vfile-statistics": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.1.tgz", - "integrity": "sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==", - "dev": true, - "dependencies": { - "vfile": "^5.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/eslint-plugin-mdx/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/eslint-plugin-n": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", - "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^13.24.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-only-warn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.1.0.tgz", - "integrity": "sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-plugin-prettier/node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-storybook": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.8.0.tgz", - "integrity": "sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==", - "dev": true, - "dependencies": { - "@storybook/csf": "^0.0.1", - "@typescript-eslint/utils": "^5.62.0", - "requireindex": "^1.2.0", - "ts-dedent": "^2.2.0" - }, - "engines": { - "node": ">= 18" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/eslint-plugin-storybook/node_modules/requireindex": { @@ -12508,20 +11077,16 @@ "node": ">=0.10.5" } }, - "node_modules/eslint-plugin-tailwindcss": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.15.1.tgz", - "integrity": "sha512-4RXRMIaMG07C2TBEW1k0VM4+dDazz1kxcZhkK4zirvmHGZTA4jnlSO2kq5mamuSPi+Wo17dh2SlC8IyFBuCd7Q==", + "node_modules/eslint-plugin-storybook/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "fast-glob": "^3.2.5", - "postcss": "^8.4.4" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "tailwindcss": "^3.4.0" + "node": ">=10" } }, "node_modules/eslint-scope": { @@ -12548,6 +11113,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -12559,6 +11125,8 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12570,15 +11138,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -12594,6 +11159,8 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -12601,29 +11168,22 @@ "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -12635,6 +11195,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -12651,6 +11212,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -12675,6 +11237,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -12705,6 +11269,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -12714,6 +11279,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" @@ -12733,6 +11299,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -12954,7 +11521,9 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true }, "node_modules/fast-shuffle": { "version": "6.1.0", @@ -12969,21 +11538,9 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { @@ -13029,6 +11586,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -13323,6 +11882,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -13338,6 +11898,8 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -13350,7 +11912,9 @@ "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "peer": true }, "node_modules/flow-parser": { "version": "0.236.0", @@ -13437,15 +12001,6 @@ "node": ">= 6" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -13538,7 +12093,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "devOptional": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -13808,6 +12364,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -13986,7 +12543,8 @@ "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/gunzip-maybe": { "version": "1.4.2", @@ -14599,6 +13157,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, "engines": { "node": ">= 4" } @@ -14627,9 +13186,10 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -14639,6 +13199,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -14656,6 +13217,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "devOptional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -14664,7 +13226,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "devOptional": true }, "node_modules/ini": { "version": "2.0.0", @@ -14992,12 +13555,14 @@ "node_modules/is-empty": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", - "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==" + "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==", + "dev": true }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -15041,6 +13606,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -15184,6 +13750,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -15527,6 +14094,17 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -15587,7 +14165,9 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -15609,7 +14189,9 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -15684,6 +14266,8 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -15706,24 +14290,6 @@ "node": ">=6" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", @@ -15760,6 +14326,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -16223,9 +14791,10 @@ } }, "node_modules/load-plugin": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-6.0.2.tgz", - "integrity": "sha512-3KRkTvCOsyNrx4zvBl/+ZMqPdVyp26TIf6xkmfEGuGwCfNQ/HzhktwbJCxd1KJpzPbK42t/WVOL3cX+TDaMRuQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-6.0.3.tgz", + "integrity": "sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==", + "dev": true, "dependencies": { "@npmcli/config": "^8.0.0", "import-meta-resolve": "^4.0.0" @@ -16263,6 +14832,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -16305,7 +14875,8 @@ "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", @@ -16399,6 +14970,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16533,6 +15105,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "dev": true, "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", @@ -16549,6 +15122,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -16566,22 +15140,25 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -16605,6 +15182,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0" }, @@ -16617,6 +15195,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -16651,6 +15230,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -16666,6 +15246,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -16686,6 +15267,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -16698,6 +15280,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -16722,14 +15305,16 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-mdx-jsx/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -16738,6 +15323,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16747,6 +15333,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16756,6 +15343,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16765,6 +15353,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16774,6 +15363,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" @@ -16787,6 +15377,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16796,15 +15387,17 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -16828,6 +15421,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0" }, @@ -16840,6 +15434,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -16874,6 +15469,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -16889,6 +15485,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -16909,6 +15506,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dev": true, "dependencies": { "@types/unist": "^2.0.0", "character-entities": "^2.0.0", @@ -16927,12 +15525,14 @@ "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "dev": true }, "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -16942,17 +15542,19 @@ } }, "node_modules/mdast-util-mdx/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-mdx/node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -16976,6 +15578,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0" }, @@ -16988,6 +15591,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17022,6 +15626,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17037,6 +15642,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17057,6 +15663,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -17069,6 +15676,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dev": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -17086,22 +15694,25 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-mdxjs-esm/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/mdast-util-mdxjs-esm/node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -17125,6 +15736,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0" }, @@ -17137,6 +15749,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17171,6 +15784,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17186,6 +15800,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17206,6 +15821,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -17218,6 +15834,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" @@ -17228,9 +15845,10 @@ } }, "node_modules/mdast-util-phrasing/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -17316,6 +15934,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -17332,9 +15951,10 @@ } }, "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -17343,6 +15963,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0" }, @@ -17450,9 +16071,10 @@ } }, "node_modules/micromark-core-commonmark": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", - "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17486,6 +16108,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17510,12 +16133,14 @@ "node_modules/micromark-extension-mdx-expression/node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/micromark-extension-mdx-jsx": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "dev": true, "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", @@ -17536,12 +16161,14 @@ "node_modules/micromark-extension-mdx-jsx/node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/micromark-extension-mdx-md": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "dev": true, "dependencies": { "micromark-util-types": "^2.0.0" }, @@ -17554,6 +16181,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "dev": true, "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", @@ -17573,6 +16201,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -17592,12 +16221,14 @@ "node_modules/micromark-extension-mdxjs-esm/node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/micromark-extension-mdxjs/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -17609,6 +16240,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17629,6 +16261,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17650,6 +16283,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17674,12 +16308,14 @@ "node_modules/micromark-factory-mdx-expression/node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/micromark-factory-space": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17699,6 +16335,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17720,6 +16357,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17741,6 +16379,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17760,6 +16399,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17778,6 +16418,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17798,6 +16439,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17817,6 +16459,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17835,6 +16478,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17871,6 +16515,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17895,12 +16540,14 @@ "node_modules/micromark-util-events-to-acorn/node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17916,6 +16563,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -17934,6 +16582,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -18018,9 +16667,10 @@ ] }, "node_modules/micromark-util-subtokenize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", - "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -18042,6 +16692,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -18057,6 +16708,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -18155,6 +16807,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -18341,12 +16994,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/negotiator": { @@ -18469,15 +17117,112 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, "node_modules/npm-run-path": { @@ -18759,37 +17504,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -18838,6 +17552,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, "dependencies": { "wrappy": "1" } @@ -18878,6 +17593,8 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "peer": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -18923,6 +17640,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -18937,6 +17655,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -19046,6 +17765,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -19054,6 +17774,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -19546,14 +18267,16 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "peer": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -19594,9 +18317,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz", - "integrity": "sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.5.tgz", + "integrity": "sha512-axfeOArc/RiGHjOIy9HytehlC0ZLeMaqY09mm8YCkMzznKiDkwFzOpBvtuhuv3xG5qB73+Mj7OCe2j/L1ryfuQ==", "dev": true, "engines": { "node": ">=14.21.3" @@ -19721,9 +18444,10 @@ } }, "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -19743,6 +18467,25 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -19871,6 +18614,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -20947,6 +19691,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -20956,9 +19701,10 @@ } }, "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -21069,6 +19815,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -21412,6 +20159,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "dev": true, "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -21425,6 +20173,7 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", @@ -21437,17 +20186,19 @@ } }, "node_modules/remark-parse/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", + "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -21471,6 +20222,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0" }, @@ -21483,6 +20235,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -21517,6 +20270,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -21532,6 +20286,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -21552,6 +20307,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -21642,6 +20398,7 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dev": true, "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", @@ -21653,9 +20410,10 @@ } }, "node_modules/remark-stringify/node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, "dependencies": { "@types/unist": "*" } @@ -21731,24 +20489,6 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "node_modules/rescript": { - "version": "10.1.4", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-10.1.4.tgz", - "integrity": "sha512-FFKlS9AG/XrLepWsyw7B+A9DtQBPWEPDPDKghV831Y2KGbie+eeFBOS0xtRHp0xbt7S0N2Dm6hhX+kTZQ/3Ybg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "bsc": "bsc", - "bsrefmt": "bsrefmt", - "bstracing": "lib/bstracing", - "rescript": "rescript" - } - }, - "node_modules/rescript-webapi": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rescript-webapi/-/rescript-webapi-0.8.0.tgz", - "integrity": "sha512-PdjHqho8+kI7AIC3DlLgD99H8zzHphzpIhyv2skVtWaSJGK819+ZqWMC3mHEtSjlcFoYaLXliNt8sb6Taa2Mpg==" - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -21806,10 +20546,20 @@ "node": ">=8" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -21825,6 +20575,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -21839,6 +20590,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21896,6 +20648,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -22607,6 +21360,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "devOptional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -22683,6 +21437,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -22733,9 +21497,10 @@ } }, "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" @@ -22749,6 +21514,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -22837,6 +21603,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -22911,6 +21678,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -22931,9 +21699,10 @@ } }, "node_modules/synckit": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", - "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -23232,7 +22001,9 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "peer": true }, "node_modules/thenify": { "version": "3.3.1", @@ -23368,69 +22139,6 @@ "node": ">=8.0" } }, - "node_modules/to-vfile": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.4.tgz", - "integrity": "sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==", - "dev": true, - "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^5.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/to-vfile/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true - }, - "node_modules/to-vfile/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/to-vfile/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/to-vfile/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/tocbot": { "version": "4.27.20", "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.27.20.tgz", @@ -23499,6 +22207,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-custom-error": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", @@ -23522,34 +22242,11 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/tsutils": { "version": "3.21.0", @@ -23622,6 +22319,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -23739,7 +22438,8 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, "node_modules/typescript": { "version": "5.4.5", @@ -23858,9 +22558,10 @@ } }, "node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -23876,18 +22577,19 @@ } }, "node_modules/unified-engine": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-11.2.0.tgz", - "integrity": "sha512-H9wEDpBSM0cpEUuuYAOIiPzLCVN0pjASZZ6FFNzgzYS/HHzl9tArk/ereOMGtcF8m8vgjzw+HrU3YN7oenT7Ww==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-11.2.1.tgz", + "integrity": "sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg==", + "dev": true, "dependencies": { "@types/concat-stream": "^2.0.0", "@types/debug": "^4.0.0", "@types/is-empty": "^1.0.0", "@types/node": "^20.0.0", "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", "concat-stream": "^2.0.0", "debug": "^4.0.0", + "extend": "^3.0.0", "glob": "^10.0.0", "ignore": "^5.0.0", "is-empty": "^1.0.0", @@ -23908,9 +22610,10 @@ } }, "node_modules/unified-engine/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -23919,6 +22622,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -23927,6 +22631,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", @@ -23945,6 +22650,7 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, "engines": { "node": ">=14.16" }, @@ -23974,9 +22680,10 @@ } }, "node_modules/unist-util-inspect": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.0.0.tgz", - "integrity": "sha512-/3Wn/wU6/H6UEo4FoYUeo8KUePN8ERiZpQYFWYoihOsr1DoDuv80PeB0hobVZyYSvALa2e556bG1A1/AbwU4yg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz", + "integrity": "sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -23989,6 +22696,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -24013,6 +22721,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -24030,6 +22739,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" @@ -24062,6 +22772,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -24076,6 +22787,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -24272,7 +22984,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "devOptional": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -24335,6 +23048,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -24359,9 +23081,10 @@ } }, "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz", + "integrity": "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -24434,6 +23157,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -24447,6 +23171,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -24456,9 +23181,10 @@ } }, "node_modules/vfile-reporter": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.0.tgz", - "integrity": "sha512-NfHyHdkCcy0BsXiLA3nId29TY7W7hgpc8nd8Soe3imATx5N4/+mkLYdMR+Y6Zvu6BXMMi0FZsD4FLCm1dN85Pg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.1.tgz", + "integrity": "sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==", + "dev": true, "dependencies": { "@types/supports-color": "^8.0.0", "string-width": "^6.0.0", @@ -24478,6 +23204,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -24488,12 +23215,14 @@ "node_modules/vfile-reporter/node_modules/emoji-regex": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true }, "node_modules/vfile-reporter/node_modules/string-width": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^10.2.1", @@ -24510,6 +23239,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -24524,6 +23254,7 @@ "version": "9.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, "engines": { "node": ">=12" }, @@ -24535,6 +23266,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -24547,6 +23279,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-4.0.0.tgz", "integrity": "sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==", + "dev": true, "dependencies": { "vfile": "^6.0.0", "vfile-message": "^4.0.0" @@ -24560,6 +23293,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-3.0.0.tgz", "integrity": "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==", + "dev": true, "dependencies": { "vfile": "^6.0.0", "vfile-message": "^4.0.0" @@ -24573,6 +23307,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -24930,7 +23665,8 @@ "node_modules/walk-up-path": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==" + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true }, "node_modules/warning": { "version": "4.0.3", @@ -25105,13 +23841,13 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", @@ -25120,8 +23856,8 @@ "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -25580,7 +24316,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true }, "node_modules/write-file-atomic": { "version": "2.4.3", @@ -25653,6 +24390,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, "engines": { "node": ">= 14" } @@ -25671,6 +24409,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index aa8d3f5df01..28ad8b13ab6 100644 --- a/package.json +++ b/package.json @@ -19,21 +19,17 @@ "Coronasafe", "care", "react", - "rescript", "tailwind", "pwa", - "typescritp", + "typescript", "vite" ], "author": "Coronsafe Care Contributors", "license": "MIT", "scripts": { - "build:res": "rescript clean && rescript build", "build:react": "cross-env NODE_ENV=production vite build", - "build": "npm run build:res && npm run generate-build-meta && npm run build:react", - "dev:res": "rescript clean && rescript build -w", - "dev:react": "vite", - "dev": "npm run build:res && npm run dev:react", + "build": "npm run generate-build-meta && npm run build:react", + "dev": "vite", "preview": "cross-env NODE_ENV=production vite preview", "generate-build-meta": "node ./scripts/generate-build-version.js", "test": "snyk test", @@ -57,7 +53,6 @@ "@pnotify/core": "^5.2.0", "@pnotify/mobile": "^5.2.0", "@react-spring/web": "^9.7.3", - "@rescript/react": "^0.11.0", "@sentry/browser": "^8.12.0", "@yaireo/ui-range": "^2.1.15", "@yudiel/react-qr-scanner": "^2.0.0-beta.3", @@ -69,7 +64,6 @@ "dayjs": "^1.11.11", "echarts": "^5.5.0", "echarts-for-react": "^3.0.2", - "eslint-mdx": "^3.1.5", "events": "^3.3.0", "glob": "^10.4.2", "hi-profiles": "^1.0.6", @@ -97,7 +91,6 @@ "redux": "^4.2.1", "redux-thunk": "^2.4.2", "rehype-raw": "^6.1.1", - "rescript-webapi": "^0.8.0", "use-keyboard-shortcut": "^1.1.6", "uuid": "^9.0.1", "xlsx": "^0.18.5" @@ -124,37 +117,28 @@ "@types/react-google-recaptcha": "^2.1.9", "@types/react-qr-reader": "^2.1.7", "@types/react-transition-group": "^4.4.10", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^7.18.0", "@vitejs/plugin-react-swc": "^3.6.0", "autoprefixer": "^10.4.19", "cypress": "^13.13.1", "cypress-localstorage-commands": "^2.2.5", "cypress-split": "^1.23.2", - "eslint": "^8.44.0", - "eslint-config-prettier": "^8.8.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-i18next": "^6.0.3", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-mdx": "^2.2.0", - "eslint-plugin-only-warn": "^1.1.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.34.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-i18next": "^6.0.9", + "eslint-plugin-mdx": "^3.1.5", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-storybook": "^0.8.0", - "eslint-plugin-tailwindcss": "^3.15.1", "gentype": "^4.5.0", "husky": "^8.0.3", "lint-staged": "^13.2.3", "local-cypress": "^1.2.6", "postcss": "^8.4.38", - "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.5.14", + "prettier": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.5", "prop-types": "^15.8.1", "redux-devtools-extension": "^2.13.9", - "rescript": "^10.1.4", "snyk": "^1.1291.0", "storybook": "^8.1.0", "tailwindcss": "^3.4.3", @@ -186,4 +170,4 @@ "node": ">=20.12.0" }, "packageManager": "npm@10.5.0" -} +} \ No newline at end of file diff --git a/src/CAREUI/display/PopupModal.tsx b/src/CAREUI/display/PopupModal.tsx new file mode 100644 index 00000000000..37b5719d9bd --- /dev/null +++ b/src/CAREUI/display/PopupModal.tsx @@ -0,0 +1,124 @@ +import { ReactNode, useEffect, useRef, useState } from "react"; +import { Cancel, Submit } from "../../Components/Common/components/ButtonV2"; +import { classNames } from "../../Utils/utils"; +import { useTranslation } from "react-i18next"; +import useBreakpoints from "../../Common/hooks/useBreakpoints"; +import DialogModal from "../../Components/Common/Dialog"; + +type Props = { + show: boolean; + onHide: () => void; + children: ReactNode; + className?: string; + onSubmit?: () => void; +}; + +export default function PopupModal(props: Props) { + const { t } = useTranslation(); + const isMobile = useBreakpoints({ default: true, lg: false }); + + if (!isMobile) { + return ; + } + + return ( + +
+ {props.children} +
+ + {props.onSubmit && ( + + )} +
+
+
+ ); +} + +const DesktopView = (props: Props) => { + const { t } = useTranslation(); + const [position, setPosition] = useState({ x: 0, y: 0 }); + const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 }); + const modal = useRef(null); + const [children, setChildren] = useState(props.children); + + useEffect(() => { + // just to make sure the animation runs smoothly + if (props.show) { + setChildren(props.children); + } + }, [props.children, props.show]); + + useEffect(() => { + const handleOutsideClick = (e: MouseEvent) => { + const isModalClicked = + modal.current && modal.current.contains(e.target as Node); + if (!isModalClicked) { + props.onHide(); + } + }; + + if (props.show) { + const currentMousePosition = mousePosition; + const modalHeight = modal.current?.clientHeight || 0; + const modalWidth = modal.current?.clientWidth || 0; + const xRelative = currentMousePosition.x; + const yRelative = currentMousePosition.y; + const containerHeight = window.innerHeight; + const containerWidth = window.innerWidth; + const top = + yRelative + modalHeight > containerHeight + ? yRelative - modalHeight + : yRelative; + const left = + xRelative + modalWidth > containerWidth + ? xRelative - modalWidth + : xRelative; + setPosition({ x: left, y: top }); + } + + document.addEventListener("mousedown", handleOutsideClick); + return () => { + document.removeEventListener("mousedown", handleOutsideClick); + }; + }, [props.show]); + + useEffect(() => { + const handleMouseMove = (e: MouseEvent) => { + setMousePosition({ x: e.clientX, y: e.clientY }); + }; + document.addEventListener("mousemove", handleMouseMove); + return () => { + document.removeEventListener("mousemove", handleMouseMove); + }; + }, []); + + return ( +
+ {children} +
+ + {props.onSubmit && ( + + )} +
+
+ ); +}; diff --git a/src/CAREUI/interactive/HumanChart.tsx b/src/CAREUI/interactive/HumanChart.tsx new file mode 100644 index 00000000000..c3b7cca80c3 --- /dev/null +++ b/src/CAREUI/interactive/HumanChart.tsx @@ -0,0 +1,90 @@ +import { Fragment } from "react/jsx-runtime"; +import { HumanBodyPaths, HumanBodyRegion } from "../../Common/constants"; + +type Props = { + regionColor: (region: HumanBodyRegion) => string; + regionLabelClassName: (region: HumanBodyRegion) => string; + regionText: (region: HumanBodyRegion) => string; + onPartSelect: (region: HumanBodyRegion) => void; +}; + +export default function HumanBodyChart({ + regionLabelClassName, + regionColor, + regionText, + onPartSelect, +}: Props) { + const getTitle = (text: string) => text.split(/(?=[A-Z])/).join(" "); + + return ( +
+ {[HumanBodyPaths.anterior, HumanBodyPaths.posterior].map((paths, i) => ( +
+

+ {i === 0 ? "Front" : "Back"} +

+
+ {paths.map((path, j) => ( + + ))} +
+ + {paths.map((path, j) => { + const value = regionText(path.region); + return ( + + {value && ( + + {value} + + )} + onPartSelect(path.region)} + > + {getTitle(path.region)} + + + ); + })} + +
+ ))} +
+ ); +} diff --git a/src/Common/constants.tsx b/src/Common/constants.tsx index 2bfecf94395..6d37d91013a 100644 --- a/src/Common/constants.tsx +++ b/src/Common/constants.tsx @@ -346,26 +346,41 @@ export const DISCHARGE_REASONS = [ ] as const; export const CONSCIOUSNESS_LEVEL = [ - { id: "UNRESPONSIVE", text: "Unresponsive" }, - { id: "RESPONDS_TO_PAIN", text: "Responds to Pain" }, - { id: "RESPONDS_TO_VOICE", text: "Responds to Voice" }, - { id: "ALERT", text: "Alert" }, - { id: "AGITATED_OR_CONFUSED", text: "Agitated or Confused" }, + { id: 20, value: "UNRESPONSIVE" }, + { id: 15, value: "RESPONDS_TO_PAIN" }, + { id: 10, value: "RESPONDS_TO_VOICE" }, + { id: 5, value: "ALERT" }, + { id: 25, value: "AGITATED_OR_CONFUSED" }, { - id: "ONSET_OF_AGITATION_AND_CONFUSION", - text: "Onset of Agitation and Confusion", + id: 30, + value: "ONSET_OF_AGITATION_AND_CONFUSION", }, ] as const; -export const LINES_CATHETER_CHOICES: Array = [ - { id: 1, text: "CVP catheter " }, - { id: 2, text: "Arterial Line" }, - { id: 3, text: "Quinton catheter" }, - { id: 4, text: "Chest Tubes (ICD)" }, - { id: 5, text: "NG Tube/GT" }, - { id: 6, text: "Urine Catheters" }, - { id: 7, text: "Other" }, -]; +export const PUPIL_REACTION_OPTIONS = [ + { id: 0, value: "UNKNOWN" }, + { id: 5, value: "BRISK" }, + { id: 10, value: "SLUGGISH" }, + { id: 15, value: "FIXED" }, + { id: 20, value: "CANNOT_BE_ASSESSED" }, +] as const; + +export const LIMB_RESPONSE_OPTIONS = [ + { id: 0, value: "UNKNOWN" }, + { id: 5, value: "STRONG" }, + { id: 10, value: "MODERATE" }, + { id: 15, value: "WEAK" }, + { id: 20, value: "FLEXION" }, + { id: 25, value: "EXTENSION" }, + { id: 30, value: "NONE" }, +] as const; + +export const OXYGEN_MODALITY_OPTIONS = [ + { value: "NASAL_PRONGS" }, + { value: "SIMPLE_FACE_MASK" }, + { value: "NON_REBREATHING_MASK" }, + { value: "HIGH_FLOW_NASAL_CANNULA" }, +] as const; export const GENDER_TYPES = [ { id: 1, text: "Male", icon: "M" }, @@ -401,11 +416,30 @@ export const ADMITTED_TO = [ ]; export const RESPIRATORY_SUPPORT = [ - { id: "NIV", text: "NON_INVASIVE" }, - { id: "IV", text: "INVASIVE" }, - { id: "O2", text: "OXYGEN_SUPPORT" }, - { id: "NONE", text: "UNKNOWN" }, -]; + { id: "NIV", value: "NON_INVASIVE" }, + { id: "IV", value: "INVASIVE" }, + { id: "O2", value: "OXYGEN_SUPPORT" }, + { id: "NONE", value: "UNKNOWN" }, +] as const; + +export const VENTILATOR_MODE_OPTIONS = [ + "VCV", + "PCV", + "PRVC", + "APRV", + "VC_SIMV", + "PC_SIMV", + "PRVC_SIMV", + "ASV", + "PSV", +] as const; + +export const INSULIN_INTAKE_FREQUENCY_OPTIONS = [ + "UNKNOWN", + "OD", + "BD", + "TD", +] as const; export type PatientCategoryID = "Comfort" | "Stable" | "Moderate" | "Critical"; @@ -665,21 +699,21 @@ export const RESOURCE_FILTER_ORDER: Array = [ { id: 4, text: "-modified_date", desc: "DESC Modified Date" }, ]; -export const NURSING_CARE_FIELDS: Array = [ - { id: 1, text: "personal_hygiene", desc: "Personal Hygiene" }, - { id: 2, text: "positioning", desc: "Positioning" }, - { id: 3, text: "suctioning", desc: "Suctioning" }, - { id: 4, text: "ryles_tube_care", desc: "Ryles Tube Care" }, - { id: 5, text: "iv_sitecare", desc: "IV Site Care" }, - { id: 6, text: "nubulisation", desc: "Nubulisation" }, - { id: 7, text: "dressing", desc: "Dressing" }, - { id: 8, text: "dvt_pump_stocking", desc: "DVT Pump Stocking" }, - { id: 9, text: "restrain", desc: "Restrain" }, - { id: 10, text: "chest_tube_care", desc: "Chest Tube Care" }, - { id: 11, text: "tracheostomy_care", desc: "Tracheostomy Care" }, - { id: 12, text: "stoma_care", desc: "Stoma Care" }, - { id: 13, text: "catheter_care", desc: "Catheter Care" }, -]; +export const NURSING_CARE_PROCEDURES = [ + "personal_hygiene", + "positioning", + "suctioning", + "ryles_tube_care", + "iv_sitecare", + "nubulisation", + "dressing", + "dvt_pump_stocking", + "restrain", + "chest_tube_care", + "tracheostomy_care", + "stoma_care", + "catheter_care", +] as const; export const EYE_OPEN_SCALE = [ { value: 4, text: "Spontaneous" }, @@ -732,13 +766,7 @@ export const LOCATION_BED_TYPES: Array = [ { id: "BED_WITH_OXYGEN_SUPPORT", name: "Bed with oxygen support" }, { id: "REGULAR", name: "Regular" }, ]; -// Deprecated Bed Types -// { -// id: "ICU_WITH_NON_INVASIVE_VENTILATOR", -// name: "ICU with non invasive ventilator", -// }, -// { id: "ICU_WITH_OXYGEN_SUPPORT", name: "ICU with oxygen support" }, -// { id: "ICU_WITH_INVASIVE_VENTILATOR", name: "ICU with invasive ventilator" } + export const ASSET_META_TYPE = [ { id: "CAMERA", text: "Camera(ONVIF)" }, { id: "HL7MONITOR", text: "Vitals Monitor(HL7)" }, @@ -1405,3 +1433,230 @@ export const DEFAULT_ALLOWED_EXTENSIONS = [ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.oasis.opendocument.spreadsheet,application/pdf", ]; + +export const HumanBodyPaths = { + anterior: [ + { + d: "M535.244,212.572c32.253.43,32.684-31.823,32.684-31.823,9.891-.215,14.191-19.783,13.331-23.653s-7.526-1.5-7.526-1.5c3.656-30.1-9.676-48.38-17.847-53.756S535.244,95.6,535.244,95.6h.43s-12.472.86-20.643,6.236-21.5,23.653-17.846,53.756c0,0-6.666-2.365-7.526,1.5s3.44,23.438,13.331,23.653c0,0,.43,32.253,32.684,31.823Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorHead", + }, + { + d: "M512.129,213.97s31.608,4.954,47.574-1.394v14.456s-26.287,4.355-47.574,0Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorNeck", + }, + { + d: "M505.355,231.279s-56.766,25.8-69.452,34.4c0,0,15.7,20.857,21.072,66.872C456.975,332.555,469.417,246.838,505.355,231.279Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightShoulder", + }, + { + d: "M526.482,232.838l.806,137.346s-46.607-22.2-67.745,18.762C459.543,388.946,455.685,234.612,526.482,232.838Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightChest", + }, + { + d: "M433.108,269.768s34.728,55.552,18.279,141.992c0,0-19.57-9.107-33.761-7.333,0,0-1.613-106.276,0-110.952S429.721,271.058,433.108,269.768Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightArm", + }, + { + d: "M415.207,408.781s27.254-.968,35.963,11.45c0,0-7.58,59.024-13.547,77.57s-19.03,56.766-19.03,56.766l-22.254-2.742s1.451-34.672,1.29-45.477,5-49.993,9.514-62.249S415.207,408.781,415.207,408.781Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightForearm", + }, + { + d: "M396.6,556.524l18.245,2.606a1.808,1.808,0,0,1,1.565,1.776c.049,6.373.053,30.692-2.6,41.987-2.568,10.951-16.244,28.022-26.205,35.726a4.126,4.126,0,0,1-6.575-2.7c-.192-1.322-.39-2.923-.584-4.855a1.828,1.828,0,0,0-2.054-1.637l-4.174.551a1.818,1.818,0,0,1-2.026-2.171c.631-3.043,1.887-8.187,3.72-11.529,2.591-4.724,5.9-18.948,5.442-26.76a1.79,1.79,0,0,0-1.514-1.635,7.118,7.118,0,0,0-5.448,1c-1.364,1.043-3.83,4.558-5.963,7.825-1.941,2.973-6.715.452-5.152-2.736.018-.037.037-.074.056-.111,1.936-3.71,13.063-18.708,16.288-24.513,2.9-5.221,13.627-8.747,15.171-11.984A1.706,1.706,0,0,1,396.6,556.524Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightHand", + }, + { + d: "M674.037,556.2l-18.244,2.606a1.808,1.808,0,0,0-1.566,1.776c-.049,6.373-.052,30.692,2.6,41.988,2.569,10.951,16.244,28.021,26.205,35.726a4.126,4.126,0,0,0,6.576-2.7c.191-1.322.389-2.922.584-4.855a1.827,1.827,0,0,1,2.053-1.637l4.174.551a1.818,1.818,0,0,0,2.027-2.17c-.632-3.043-1.888-8.188-3.721-11.53-2.59-4.723-5.9-18.948-5.442-26.76a1.79,1.79,0,0,1,1.515-1.634,7.114,7.114,0,0,1,5.447,1c1.364,1.043,3.83,4.558,5.964,7.826,1.94,2.973,6.715.451,5.151-2.736-.018-.038-.037-.075-.056-.112-1.935-3.709-13.063-18.707-16.288-24.513-2.9-5.221-13.627-8.746-15.171-11.984A1.707,1.707,0,0,0,674.037,556.2Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftHand", + }, + { + d: "M544.705,232.838h19.137s18.062,15.643,20,19.513,29.888,42.79,26.878,128.154c0,0-16.557-16.556-31.178-15.051,0,0,2.365-33.114-34.834-34.619Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftChest", + }, + { + d: "M569.432,231.279s61.927,31.824,65.153,35.694c0,0-12.9,9.752-18.707,73.791C615.878,340.764,610.072,268.048,569.432,231.279Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftShoulder", + }, + { + d: "M638.455,271.058s14.407,18.923,14.837,23.223-1.291,105.362.86,108.8c0,0-26.233,1.29-34.834,9.891,0,0-4.3-51.176.86-78.484S633.079,279.659,638.455,271.058Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftArm", + }, + { + d: "M621.038,419s16.342-12.257,33.974-10.537c0,0,7.741,26.233,8.816,34.189s10.321,49.241,9.246,66.658.087,41.069.087,41.069-16.214,3.44-20.084,4.731c0,0-17.2-46.661-18.062-52.036S620.982,426.52,621.038,419Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftForearm", + }, + { + d: "M510.758,934.272s-20.723,1.451-24.973,1.5a56.32,56.32,0,0,0-1.556,10.672c0,4.355.484,25.481-.645,28.061s-21.771,27.254-23.383,30.641.645,8.386,1.935,9.192,2.1,4.757,4.193,5.644c1.807.765,3.064,3.709,5.644,4.032s10.482-.645,12.418.726c0,0,.887,3.144,2.58,3.306.864.082,5.644,1.774,10.644-5.967s13.04-35.019,13.439-37.791c.249-1.732-1.183-2.125-1.506-5.189a112.484,112.484,0,0,1,1.855-20.64C513.419,948.3,510.758,934.272,510.758,934.272Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightFoot", + }, + { + d: "M563.251,934.191s20.756.564,25.006.616c0,0,.151,7.125.151,11.479s.162,24.351,1.29,26.932,22.531,27.576,24.144,30.963-.645,8.386-1.935,9.192-2.1,4.758-4.193,5.645c-1.807.764-3.064,3.709-5.645,4.031s-10.482-.645-12.417.726c0,0-.887,3.145-2.581,3.306-.864.082-5.644,1.774-10.643-5.967s-13.04-35.018-13.439-37.79c-.25-1.733,1.182-2.126,1.5-5.19a112.484,112.484,0,0,0-1.855-20.64C560.623,947.334,563.251,934.191,563.251,934.191Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftFoot", + }, + { + d: "M485.2,932.363l24.513-1.4s1.666-37.2,2.526-41.285,4.731-85.149,4.086-99.771c0,0-30,2.527-49.348-3.924,0,0-6.451,44.026-1.828,62.841C467.775,859.527,484.874,929.6,485.2,932.363Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightLeg", + }, + { + d: "M469.231,420.715s-5.966-30.318-4.515-34.834a115.141,115.141,0,0,1,16.772-10.966c10.428-5.483,29.727-6.773,36.339-3.548,5.81,2.834,4.972,2.548,13.439,4.73l.054-142.13h9.192V334.92s32.415,1.291,31.931,33.06a72.9,72.9,0,0,0,8.869,2.419c5.322,1.129,23.062,9.031,25.642,19.675,0,0-4.945,22.2-3.655,32.684,0,0-39.4-29.835-47.306-31.609s-12.959,2.31-16.933,2.8c-4.483.547-11.71-.628-18.142-2.9C514.306,388.7,475.2,414.909,469.231,420.715Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLowerChest", + }, + { + d: "M461.813,481.665c2.43-11.313,8.042-43.207,7.1-55.467,0,0,48.3-30.56,50.88-30.4s12.122,5.564,23.841,2.338c0,0,6.719-3.225,13.331.162s34.874,24.149,46.324,28.987c0,0-.524,28.746,1.573,37.777s10.159,42.091,10.966,46.123,0,.806,0,.806-58.057,50.155-59.669,52.574c0,0-6.451-6.29-20.481-6.774s-20.643,6.774-20.643,6.774l-60.152-51.122S460.965,485.617,461.813,481.665Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorAbdomen", + }, + { + d: "M554.381,790.77s30.748,3.226,51.39-4.945c0,0,3.441,40.424,0,63.432s-16.449,76.871-17.094,81.816c0,0-23.33.108-25.91-1.4,0,0-3.011-33.328-3.871-43S550.08,810.982,554.381,790.77Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftLeg", + }, + { + d: "M454.072,520.056s-4.515,29.35-6.128,48.7.323,59.346,6.128,81.278,21.288,89.343,14.514,131.272c0,0,20.464,8.064,47.808,4.516,0,0,7.2-74.822,6.7-87.73,0,0,3.333-50.745,3.333-58.7s1.72-27.738,1.72-27.738-20.642-10.106-14.837-44.08C513.311,567.576,462.351,524.571,454.072,520.056Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorRightThigh", + }, + { + d: "M553.114,785.825s37.713,2.741,50.615-3.548c0,0-6.451-35.8-1.129-63.325s19.943-77.408,20.8-92.03,2.33-87.3-7.221-108.371l-56.426,49.455s3.441,37.629-18.922,44.725c0,0,7.741,68.807,7.741,78.913S554.857,777.654,553.114,785.825Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorLeftThigh", + }, + { + d: "M535.624,610.466s16.722-10.1,18.818-27.355-3.386-17.578-5.805-18.545-13.063-1.291-13.063-1.291h.1s-10.644.323-13.063,1.291-7.9,1.29-5.806,18.545S535.624,610.466,535.624,610.466Z", + transform: "translate(-362.967 -95.599)", + region: "AnteriorGroin", + }, + ], + + posterior: [ + { + d: "M 506.9838 158.0121 C 509.6029 173.1336 512.1258 187.9477 521.5039 184.4407 C 517.7283 191.6346 525.6919 202.9266 528.0919 210.8841 C 544.9623 208.3461 562.3174 208.3461 579.1878 210.8841 C 581.5893 202.9236 589.5363 191.6662 585.7863 184.4511 C 595.6744 187.4586 596.8188 174.3021 600.3813 158.5926 C 600.1173 156.4611 595.9999 158.5806 594.7788 159.0816 C 597.7384 128.3122 591.2088 97.1811 553.7104 97.22 C 516.1444 97.1497 509.5249 128.2116 512.5008 159.0891 C 511.0564 158.4651 508.4914 157.0971 506.9838 158.0121 Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorHead", + }, + { + d: "M 503.129 213.97 s 30.871 -1.97 46.871 0.03 v 12.456 s -26 -2.456 -47.574 0 Z", + transform: "translate(-362.967 -95.599)", + region: "PosteriorNeck", + }, + { + d: "M545.584,228.037V361.6s-13.6,10.828-25.282,13.145c-10.077,2-36.162,3.374-36.766-.857S478.9,239.117,545.584,228.037Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftChest", + }, + { + d: "M563.865,228.037V361.6s13.6,10.828,25.282,13.145c10.076,2,36.161,3.374,36.766-.857S630.546,239.117,563.865,228.037Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightChest", + }, + { + d: "M550.973,228.188h8.914l.151,136.435s20.7,17.828,59.681,16.317c0,0-4.684,38.528-1.057,56.508s9.216,41.248,9.216,41.248-77.812,30.218-145.954-.151c0,0,9.67-35.96,9.972-58.321a167.6,167.6,0,0,0-4.23-39.888s37.924,5.439,62.1-15.713C549.764,364.623,550.52,228.188,550.973,228.188Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorAbdomen", + }, + { + d: "M523.223,230.857s-40.694,20.548-50.968,25.182-11.08,5.439-11.08,5.439,15.512,18.735,18.533,70.509C479.708,331.987,489.58,244.354,523.223,230.857Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftShoulder", + }, + { + d: "M587.084,230.857s40.693,20.548,50.968,25.182,11.08,5.439,11.08,5.439S633.62,280.213,630.6,331.987C630.6,331.987,620.726,244.354,587.084,230.857Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightShoulder", + }, + { + d: "M457.951,265.306s-12.49,14.706-13.5,29.613,1.813,82.194.6,95.691c0,0,15.512-1.209,22.16,3.022s9.872,4.23,9.872,4.23,3.223-32.232,1.41-53.385S467.823,277.393,457.951,265.306Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftArm", + }, + { + d: "M444.655,394.639s3.627-1.209,8.864,1.612,21.153,4.835,21.153,4.835a241.987,241.987,0,0,1-6.245,50.968c-6.446,27.8-23.167,79.977-22.966,81.992,0,0-17.325-4.03-20.951-3.828,0,0,1.209-21.354,1.612-31.427s.2-42.91,6.648-63.659S444.454,396.049,444.655,394.639Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftForearm", + }, + { + d: "M423.5,533.844s-4.029,2.82-7.454,5.036-12.49,13.1-15.311,18.131-11.482,15.915-10.274,16.923,5.44.2,7.454-2.216,7.051-8.663,10.476-7.253c0,0,1.007,12.087-3.224,22.966s-4.633,13.7-4.633,13.7,2.591,2.22,7.063.809q.291-.091.592-.2s1.612,4.835.806,8.864,3.022,3.425,7.655,1.007,21.959-22.562,24.175-35.053,1.611-40.895,1.611-40.895S427.33,534.65,423.5,533.844Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftHand", + }, + { + d: "M650.678,265.306s12.49,14.706,13.5,29.613-1.813,82.194-.6,95.691c0,0-15.512-1.209-22.16,3.022s-9.871,4.23-9.871,4.23-3.224-32.232-1.41-53.385S640.807,277.393,650.678,265.306Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightArm", + }, + { + d: "M663.974,394.639s-3.626-1.209-8.864,1.612-21.153,4.835-21.153,4.835a242.066,242.066,0,0,0,6.245,50.968c6.447,27.8,23.168,79.977,22.966,81.992,0,0,17.325-4.03,20.951-3.828,0,0-1.208-21.354-1.611-31.427s-.2-42.91-6.648-63.659S664.175,396.049,663.974,394.639Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightForearm", + }, + { + d: "M685.127,533.844s4.029,2.82,7.453,5.036,12.491,13.1,15.311,18.131,11.483,15.915,10.274,16.923-5.439.2-7.454-2.216-7.051-8.663-10.475-7.253c0,0-1.008,12.087,3.223,22.966s4.633,13.7,4.633,13.7-2.59,2.22-7.062.809q-.291-.091-.593-.2s-1.612,4.835-.806,8.864-3.022,3.425-7.655,1.007-21.958-22.562-24.174-35.053-1.612-40.895-1.612-40.895S681.3,534.65,685.127,533.844Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightHand", + }, + { + d: "M552.635,495.366s0,66.279-.6,69.9c-.051.277-.126.982-.2,2.065-5.691,6.673-27.473,28.254-58.673,9.04a10.164,10.164,0,0,1-1.738-1.309c-23.066-21.783-7.076-50.968-6.371-52.2l-2.216-1.234c-.176.327-17.652,32.107,6.849,55.249a14.16,14.16,0,0,0,2.166,1.662c9.519,5.842,18.232,8.033,25.988,8.033,16.116,0,27.977-9.519,33.642-15.235-1.661,20.07-6.144,82.369-6.5,86-.4,4.231-7.605,77.51-7.605,80.935,0,0-36.111-4.785-45.579-2.972,0,0,.2-37.672-2.821-59.63s-14.5-65.473-15.914-101.936-1.411-65.473,7.453-91.46C480.514,482.272,499.048,497.582,552.635,495.366Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftThighAndButtock", + }, + { + d: "M555.471,495.366s0,66.279.6,69.9c.051.277.126.982.2,2.065,5.691,6.673,27.473,28.254,58.673,9.04a10.164,10.164,0,0,0,1.738-1.309c23.066-21.783,7.076-50.968,6.371-52.2l2.216-1.234c.176.327,17.652,32.107-6.85,55.249a14.151,14.151,0,0,1-2.165,1.662c-9.519,5.842-18.232,8.033-25.988,8.033-16.116,0-27.977-9.519-33.643-15.235,1.662,20.07,6.145,82.369,6.5,86,.4,4.231,7.605,77.51,7.605,80.935,0,0,36.111-4.785,45.579-2.972,0,0-.2-37.672,2.82-59.63s14.5-65.473,15.915-101.936,1.41-65.473-7.453-91.46C627.592,482.272,609.058,497.582,555.471,495.366Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightThighAndButtock", + }, + { + d: "M492.2,739.529s21.354-2.418,42.909,3.425c0,0,3.627,43.312,1.612,61.846s-7.655,75.445-6.849,80.078c0,0-19.944.907-25.988,2.518,0,0-2.619-29.009-9.267-49.154S486.961,754.839,492.2,739.529Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftLeg", + }, + { + d: "M617.088,739.529s-21.354-2.418-42.909,3.425c0,0-3.626,43.312-1.612,61.846s7.655,75.445,6.85,80.078c0,0,19.944.907,25.987,2.518,0,0,2.619-29.009,9.267-49.154S622.326,754.839,617.088,739.529Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightLeg", + }, + { + d: "M504.387,891.023s17.728-.806,24.879-2.619c0,0,2.015,6.245,1.209,18.131s-1.007,21.555-.6,23.771,1.813,9.67-1.209,15.512S520,967.172,516.978,972.007s-10.275,5.439-11.886-1.611c0,0-1.813,3.424-7.857,1.41s-9.67-1.209-11.483-5.44-4.835-11.684-1.41-16.922,18.937-18.534,20.145-25.182S505.6,895.455,504.387,891.023Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorLeftFoot", + }, + { + d: "M604.752,891.023s-17.728-.806-24.88-2.619c0,0-2.014,6.245-1.209,18.131s1.008,21.555.605,23.771-1.813,9.67,1.209,15.512,8.662,21.354,11.684,26.189,10.274,5.439,11.886-1.611c0,0,1.813,3.424,7.856,1.41s9.67-1.209,11.483-5.44,4.835-11.684,1.41-16.922-18.936-18.534-20.145-25.182S603.543,895.455,604.752,891.023Z", + transform: "translate(-390.349 -94.472)", + region: "PosteriorRightFoot", + }, + ], +} as const; + +export type HumanBodyRegion = (typeof HumanBodyPaths)[ + | "anterior" + | "posterior"][number]["region"]; + +export const PressureSoreExudateAmountOptions = [ + "None", + "Light", + "Moderate", + "Heavy", +] as const; + +export const PressureSoreTissueTypeOptions = [ + "Closed", + "Epithelial", + "Granulation", + "Slough", + "Necrotic", +] as const; diff --git a/src/Components/ABDM/ABDMFacilityRecords.tsx b/src/Components/ABDM/ABDMFacilityRecords.tsx index cd21d269536..a37fc0d4932 100644 --- a/src/Components/ABDM/ABDMFacilityRecords.tsx +++ b/src/Components/ABDM/ABDMFacilityRecords.tsx @@ -42,8 +42,7 @@ export default function ABDMFacilityRecords({ facilityId }: IProps) {
- {/* eslint-disable-next-line tailwindcss/migration-from-tailwind-2 */} -
+
@@ -152,7 +151,7 @@ export default function ABDMFacilityRecords({ facilityId }: IProps) { View ) : ( -

+

View

)} diff --git a/src/Components/Assets/AssetFilter.tsx b/src/Components/Assets/AssetFilter.tsx index 0470ea7f701..bf07bad4b09 100644 --- a/src/Components/Assets/AssetFilter.tsx +++ b/src/Components/Assets/AssetFilter.tsx @@ -46,7 +46,7 @@ function AssetFilter(props: any) { useEffect(() => { setFacilityId(facility?.id ? `${facility?.id}` : ""); setLocationId( - facility?.id === qParams.facility ? qParams.location ?? "" : "", + facility?.id === qParams.facility ? (qParams.location ?? "") : "", ); }, [facility?.id, qParams.facility, qParams.location]); diff --git a/src/Components/Assets/AssetManage.tsx b/src/Components/Assets/AssetManage.tsx index 469d1556fb5..4c17721e1f9 100644 --- a/src/Components/Assets/AssetManage.tsx +++ b/src/Components/Assets/AssetManage.tsx @@ -110,7 +110,7 @@ const AssetManage = (props: AssetManageProps) => { const PrintPreview = () => (
-
+
-
+
{Object.keys(details).map((key) => (
diff --git a/src/Components/CameraFeed/AssetBedSelect.tsx b/src/Components/CameraFeed/AssetBedSelect.tsx index dafb28d133f..d9f37d5ed2a 100644 --- a/src/Components/CameraFeed/AssetBedSelect.tsx +++ b/src/Components/CameraFeed/AssetBedSelect.tsx @@ -109,7 +109,7 @@ export const CameraPresetDropdown = ( leaveFrom="opacity-100" leaveTo="opacity-0" > - + {options?.map((obj) => ( {
- {props.totalCount}{" "} + {props.totalCount}{" "} Camera(s) present
diff --git a/src/Components/CameraFeed/FeedControls.tsx b/src/Components/CameraFeed/FeedControls.tsx index 8cff960505a..1bacd6c1cfc 100644 --- a/src/Components/CameraFeed/FeedControls.tsx +++ b/src/Components/CameraFeed/FeedControls.tsx @@ -224,7 +224,7 @@ export default function FeedControls({ shortcutsDisabled, ...props }: Props) {
{controls.position}
-
+
{controls.zoom} {controls.reset} diff --git a/src/Components/Common/CareIcon.res b/src/Components/Common/CareIcon.res deleted file mode 100644 index 343e01f1ddb..00000000000 --- a/src/Components/Common/CareIcon.res +++ /dev/null @@ -1,19 +0,0 @@ -type reactClass -module CareIcon = { - @module("../../CAREUI/icons/CareIcon.tsx") @react.component - external make: ( - ~icon: option, - ~className: option, - ~onClick: option unit>, - ~id: option - ) => React.element = "default" -} - -@react.component -let make = ( - ~icon = ?, - ~className = ?, - ~onClick = ?, - ~id = ?, -) => - diff --git a/src/Components/Common/DialogModal.res b/src/Components/Common/DialogModal.res deleted file mode 100644 index ae03ad8139c..00000000000 --- a/src/Components/Common/DialogModal.res +++ /dev/null @@ -1,20 +0,0 @@ -type reactClass -module DialogModal = { - @module("./Dialog.tsx") @react.component - external make: ( - ~title: React.element, - ~show: bool, - ~onClose: unit => unit, - ~className: string, - ~children: React.element, - ) => React.element = "default" -} - -@react.component -let make = ( - ~title: React.element, - ~show: bool, - ~onClose: unit => unit, - ~className: string, - ~children: React.element, -) => {children} diff --git a/src/Components/Common/ExcelViewer.tsx b/src/Components/Common/ExcelViewer.tsx index 643b411a9b0..a7e5879ef1f 100644 --- a/src/Components/Common/ExcelViewer.tsx +++ b/src/Components/Common/ExcelViewer.tsx @@ -39,9 +39,9 @@ const ExcelViewer = ({ const [selectedRowsData, setSelectedRowsData] = useState([]); const initialSelectedRows = fileData - ? fileData + ? (fileData .map((_, i) => i) - .filter((i) => !errors.some((err) => err.index === i)) ?? [] + .filter((i) => !errors.some((err) => err.index === i)) ?? []) : []; const [selectedRows, setSelectedRows] = @@ -132,9 +132,7 @@ const ExcelViewer = ({ return (
{showCheckbox && (
@@ -197,10 +195,7 @@ const ExcelViewer = ({ <> +
{/* flexible spacing */} diff --git a/src/Components/Common/Sidebar/SidebarItem.tsx b/src/Components/Common/Sidebar/SidebarItem.tsx index b119aa58565..bf0b0589011 100644 --- a/src/Components/Common/Sidebar/SidebarItem.tsx +++ b/src/Components/Common/Sidebar/SidebarItem.tsx @@ -32,8 +32,7 @@ const SidebarItemBase = forwardRef( return ( - -
-
- -
setShow(false)} - /> - -
- -
children
-
-
-
-
- diff --git a/src/Components/Common/TemperatureFormField.tsx b/src/Components/Common/TemperatureFormField.tsx index 2d81ab3d8df..236d87826e9 100644 --- a/src/Components/Common/TemperatureFormField.tsx +++ b/src/Components/Common/TemperatureFormField.tsx @@ -3,6 +3,7 @@ import { FormFieldBaseProps } from "../Form/FormFields/Utils"; import RangeAutocompleteFormField from "../Form/FormFields/RangeAutocompleteFormField"; import CareIcon from "../../CAREUI/icons/CareIcon"; import ButtonV2 from "./components/ButtonV2"; +import { fahrenheitToCelsius } from "../../Utils/utils"; type TemperatureUnit = "celsius" | "fahrenheit"; @@ -74,11 +75,3 @@ export default function TemperatureFormField(props: Props) { /> ); } - -export const celsiusToFahrenheit = (celsius: number) => { - return (celsius * 9) / 5 + 32; -}; - -export const fahrenheitToCelsius = (fahrenheit: number) => { - return ((fahrenheit - 32) * 5) / 9; -}; diff --git a/src/Components/Common/Transition.res b/src/Components/Common/Transition.res deleted file mode 100644 index 54d3e4c772d..00000000000 --- a/src/Components/Common/Transition.res +++ /dev/null @@ -1,26 +0,0 @@ -type reactClass -module Transition = { - @module("./Transition.tsx") @react.component - external make: ( - ~show: option, - ~enter: string, - ~enterFrom: string, - ~enterTo: string, - ~leave: string, - ~leaveFrom: string, - ~leaveTo: string, - ~children: 'a, - ) => React.element = "default" -} - -@react.component -let make = ( - ~show=None, - ~enter="", - ~enterFrom="", - ~enterTo="", - ~leave="", - ~leaveFrom="", - ~leaveTo="", - ~children, -) => children diff --git a/src/Components/Common/Uptime.tsx b/src/Components/Common/Uptime.tsx index 6883d0f3871..a1cf0ee90b3 100644 --- a/src/Components/Common/Uptime.tsx +++ b/src/Components/Common/Uptime.tsx @@ -51,7 +51,7 @@ function UptimeInfo({
- {date} + {date}
{incidents.length === 0 ? ( <> diff --git a/src/Components/Common/UserAutocompleteFormField.tsx b/src/Components/Common/UserAutocompleteFormField.tsx index 3ff6a3ae7c2..a42fea1890c 100644 --- a/src/Components/Common/UserAutocompleteFormField.tsx +++ b/src/Components/Common/UserAutocompleteFormField.tsx @@ -151,7 +151,7 @@ export const LinkedFacilityUsers = (props: LinkedFacilitySearchProps) => { const userOnlineDot = (user: UserBareMinimum) => (
diff --git a/src/Components/Common/components/ButtonV2.tsx b/src/Components/Common/components/ButtonV2.tsx index 014a182ba94..bc67e150fdc 100644 --- a/src/Components/Common/components/ButtonV2.tsx +++ b/src/Components/Common/components/ButtonV2.tsx @@ -128,7 +128,7 @@ const ButtonV2 = ({ if (href && !(disabled || loading)) { return ( - + diff --git a/src/Components/Common/components/CheckBox.tsx b/src/Components/Common/components/CheckBox.tsx deleted file mode 100644 index ac1193220dc..00000000000 --- a/src/Components/Common/components/CheckBox.tsx +++ /dev/null @@ -1,28 +0,0 @@ -interface Props { - id?: string; - className?: string; - name?: string; - onCheck: (value: boolean) => void; - checked?: boolean; - error?: string; - required?: boolean; - label?: string; -} - -export default function Checkbox(props: Props) { - return ( -
-
- props.onCheck(event.target.checked)} - /> - -
-
- ); -} diff --git a/src/Components/Common/components/Checkbox.res b/src/Components/Common/components/Checkbox.res deleted file mode 100644 index 967de556c04..00000000000 --- a/src/Components/Common/components/Checkbox.res +++ /dev/null @@ -1,15 +0,0 @@ -let str = React.string - -@react.component -let make = (~id, ~label, ~onChange, ~checked=false) => -
- - -
diff --git a/src/Components/Common/components/ContactLink.tsx b/src/Components/Common/components/ContactLink.tsx index ff13433cc3b..ee834b3f2a9 100644 --- a/src/Components/Common/components/ContactLink.tsx +++ b/src/Components/Common/components/ContactLink.tsx @@ -9,7 +9,7 @@ export default function ContactLink(props: ContactLinkProps) {
Webapi.Dom.KeyboardEvent.t = "%identity" - -let onConfirm = (href, onClick, event) => { - ReactEvent.Mouse.preventDefault(event) - Belt.Option.mapWithDefault(onClick, (), onClick => onClick(event)) - RescriptReactRouter.push(href) -} - -let onCancel = event => event |> ReactEvent.Mouse.preventDefault - -let handleOnClick = (href, confirm, onClick, event) => { - let keyboardEvent = event |> unsafeAsKeyboardEvent - let modifierPressed = keyboardEvent |> ctrlKey || keyboardEvent |> metaKey - - switch (modifierPressed, confirm) { - | (true, _) => () - | (false, Some(confirmationText)) => - WindowUtils.confirm( - ~onCancel=() => onCancel(event), - confirmationText, - () => onConfirm(href, onClick, event), - ) - | (false, None) => onConfirm(href, onClick, event) - } -} - -@react.component -let make = ( - ~href, - ~ariaLabel=?, - ~className=?, - ~confirm=?, - ~id=?, - ~onClick=?, - ~title=?, - ~children, -) => - - children - diff --git a/src/Components/Common/components/Menu.tsx b/src/Components/Common/components/Menu.tsx index a6f66ff9d2f..632644df988 100644 --- a/src/Components/Common/components/Menu.tsx +++ b/src/Components/Common/components/Menu.tsx @@ -34,7 +34,7 @@ export default function DropdownMenu({
-
- - -
diff --git a/src/Components/Common/components/SkeletonLoading.res b/src/Components/Common/components/SkeletonLoading.res deleted file mode 100644 index 71f4f11df91..00000000000 --- a/src/Components/Common/components/SkeletonLoading.res +++ /dev/null @@ -1,144 +0,0 @@ -let card = (~className="", ()) => -
-
-
-
-
-
-
-
-
-
-
-
-
- -let smallCard = () => -
-
-
-
-
-
-
-
-
-
-
-
-
- -let userCard = () => -
-
-
-
-
-
-
-
-
-
-
-
-
-
- -let heading = () => -
-
-
-
-
-
-
- -let profileCard = () => -
-
-
-
-
-
-
-
-
-
-
- -let image = () => -
-
-
-
-
-
- -let courseCard = () => -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -let paragraph = () => -
-
-
-
-
-
-
-
- -let contents = () => -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -let pageLoad = () => -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -let multiple = (~count, ~element) => - Array.make(count, element) - |> Array.mapi((key, element) =>
string_of_int}> element
) - |> React.array diff --git a/src/Components/Common/prescription-builder/types/Prescription__Prescription.res b/src/Components/Common/prescription-builder/types/Prescription__Prescription.res deleted file mode 100644 index 97c42c6257f..00000000000 --- a/src/Components/Common/prescription-builder/types/Prescription__Prescription.res +++ /dev/null @@ -1,75 +0,0 @@ -@genType -type t = { - medicine: string, - dosage: string, - days: int, - dosage_new : string, - route : string, - notes : string -} - -let medicine = t => t.medicine -let dosage = t => t.dosage -let days = t => t.days -let dosage_new = t => t.dosage_new -let route = t => t.route -let notes = t => t.notes - -let make = (medicine, dosage, days, dosage_new, route, notes) => { - medicine: medicine, - dosage: dosage, - days: days, - route : route, - notes : notes, - dosage_new : dosage_new -} - -let empty = () => { - medicine: "", - route: "", - dosage: "", - dosage_new: "0 mg", - days: 0, - notes: "" -} - -let updateMedicine = (medicine, t) => {...t, medicine: medicine} -let updateDosage = (dosage, t) => {...t, dosage: dosage} -let updateDays = (days, t) => {...t, days: days} -let updateDosageNew = (dosage, t) => {...t, dosage_new: dosage} -let updateRoute = (route, t) => {...t, route: route} -let updateNotes = (notes, t) => {...t, notes: notes} - -let decode = json => { - open Json.Decode - { - medicine: json |> field("medicine", string), - dosage: json |> field("dosage", string), - days: json |> field("days", int), - route: json |> field("route", string), - dosage_new: json |> field("dosage_new", string), - notes: json |> field("notes", string), - } -} - -let encode = t => { - open Json.Encode - object_(list{ - ("medicine", t.medicine |> string), - ("dosage", t.dosage |> string), - ("dosage_new", t.dosage_new |> string), - ("route", t.route |> string), - ("notes", t.notes |> string), - ("days", t.days |> int), - }) -} - -let encodeArray = prescriptions => - prescriptions |> { - open Json.Encode - array(encode) - } - -let makeFromJs = json => { - Js.Array.isArray(json) ? Js.Array.map(p => make(p["medicine"], p["dosage"], p["days"], p["dosage_new"], p["route"], p["notes"]), json) : [] -} diff --git a/src/Components/Common/utils/ArrayUtils.res b/src/Components/Common/utils/ArrayUtils.res deleted file mode 100644 index c5f55b7b9e5..00000000000 --- a/src/Components/Common/utils/ArrayUtils.res +++ /dev/null @@ -1,44 +0,0 @@ -exception UnsafeFindFailed(string) - -let copyAndSort = (f, t) => { - let cp = Js.Array.copy(t) - Js.Array.sortInPlaceWith(f, cp) -} - -let copyAndPush = (e, t) => { - let copy = Js.Array.copy(t) - Js.Array.push(e, copy) |> ignore - copy -} - -let isEmpty = a => Js.Array.length(a) == 0 - -let isNotEmpty = a => !isEmpty(a) - -let replaceWithIndex = (i, t, l) => Js.Array.mapi((a, index) => index == i ? t : a, l) - -let flatten = a => a |> Js.Array.reduce((flat, next) => flat |> Js.Array.concat(next), []) - -let sort_uniq = (f, t) => t |> Array.to_list |> List.sort_uniq(f) |> Array.of_list - -let getOpt = (a, i) => - try Some(a |> Array.get(i)) catch { - | Not_found => None - } - -let swapUp = (i, t) => - if i <= 0 || i >= (t |> Array.length) { - t - } else { - let copy = Js.Array.copy(t) - - copy[i] = t[i - 1] - copy[i - 1] = t[i] - copy - } - -let swapDown = (i, t) => swapUp(i + 1, t) - -let last = t => t->Js.Array.unsafe_get(Js.Array.length(t) - 1) - -let findAndReplace = (index, f, array) => array |> Array.mapi((i, p) => i == index ? f(p) : p) diff --git a/src/Components/Common/utils/DateFns.res b/src/Components/Common/utils/DateFns.res deleted file mode 100644 index 4fa70abb144..00000000000 --- a/src/Components/Common/utils/DateFns.res +++ /dev/null @@ -1,129 +0,0 @@ -type locale - -@deriving(abstract) -type formatDistanceOptions = { - @optional - includeSeconds: bool, - @optional - addSuffix: bool, - @optional - locale: locale, -} - -@deriving(abstract) -type formatDistanceStrictOptions = { - @optional - addSuffix: bool, - @optional - unit: string, - @optional - roundingMethod: string, - @optional - locale: locale, -} - -// TODO: This function should return the user's actual / selected timezone. -let currentTimeZone = () => "Asia/Kolkata" - -// TODO: This function should return either "HH:mm", or "h:mm a" depending on user's preferred time format. -let selectedTimeFormat = () => "HH:mm" - -@module("date-fns") -external formatDistanceOpt: (Js.Date.t, Js.Date.t, formatDistanceOptions) => string = - "formatDistance" - -@module("date-fns") -external formatDistanceStrictOpt: (Js.Date.t, Js.Date.t, formatDistanceStrictOptions) => string = - "formatDistanceStrict" - -@module("date-fns") -external formatDistanceToNowOpt: (Js.Date.t, formatDistanceOptions) => string = - "formatDistanceToNow" - -@module("date-fns") -external formatDistanceToNowStrictOpt: (Js.Date.t, formatDistanceStrictOptions) => string = - "formatDistanceToNowStrict" - -let formatDistance = (date, baseDate, ~includeSeconds=false, ~addSuffix=false, ()) => { - let options = formatDistanceOptions(~includeSeconds, ~addSuffix, ()) - formatDistanceOpt(date, baseDate, options) -} - -let formatDistanceStrict = ( - date, - baseDate, - ~addSuffix=false, - ~unit=?, - ~roundingMethod="round", - (), -) => { - let options = formatDistanceStrictOptions(~addSuffix, ~unit?, ~roundingMethod, ()) - formatDistanceStrictOpt(date, baseDate, options) -} - -let formatDistanceToNow = (date, ~includeSeconds=false, ~addSuffix=false, ()) => { - let options = formatDistanceOptions(~includeSeconds, ~addSuffix, ()) - formatDistanceToNowOpt(date, options) -} - -let formatDistanceToNowStrict = (date, ~addSuffix=false, ~unit=?, ~roundingMethod="round", ()) => { - let options = formatDistanceStrictOptions(~addSuffix, ~unit?, ~roundingMethod, ()) - - formatDistanceToNowStrictOpt(date, options) -} - -@deriving(abstract) -type formatOptions = { - timeZone: string, - @optional - locale: locale, - @optional - weekStartsOn: int, - @optional - firstWeekContainsDate: int, - @optional - useAdditionalWeekYearTokens: bool, - @optional - useAdditionalDayOfYearTokens: bool, -} - -@module("date-fns-tz") -external formatTz: (Js.Date.t, string, formatOptions) => string = "format" - -let format = (date, fmt) => { - let timeZone = currentTimeZone() - - // Since the passed date is not time-zone-sensitive, we need to pass the - // time-zone here so that the user's timezone is displayed in the generated - // string. - formatTz(date, fmt, formatOptions(~timeZone, ())) -} - -let formatPreset = (date, ~short=false, ~year=false, ~time=false, ()) => { - let leading = short ? "MMM d" : "MMMM d" - let middle = year ? ", yyyy" : "" - let trailing = time ? " " ++ selectedTimeFormat() : "" - - format(date, leading ++ (middle ++ trailing)) -} - -@module("date-fns") -external decodeISOJs: Js.Json.t => Js.Date.t = "parseISO" - -let decodeISO = json => - if Js.typeof(json) == "string" { - decodeISOJs(json) - } else { - raise(Json.Decode.DecodeError("Expected string, got " ++ Js.typeof(json))) - } - -let encodeISO = date => Js.Date.toISOString(date)->Js.Json.string - -@module("date-fns") external parseISO: string => Js.Date.t = "parseISO" - -@module("date-fns") external isPast: Js.Date.t => bool = "isPast" - -@module("date-fns") external isFuture: Js.Date.t => bool = "isFuture" - -@module("date-fns") -external differenceInSeconds: (Js.Date.t, Js.Date.t) => int = "differenceInSeconds" diff --git a/src/Components/Common/utils/DictUtils.res b/src/Components/Common/utils/DictUtils.res deleted file mode 100644 index 748ceed51c7..00000000000 --- a/src/Components/Common/utils/DictUtils.res +++ /dev/null @@ -1,26 +0,0 @@ -let setOptionalString = (key, value, payload) => { - if String.trim(value) !== "" { - Js.Dict.set(payload, key, Js.Json.string(value)) - } -} - -let setOptionalNumber = (key, value, payload) => { - switch value { - | Some(v) => Js.Dict.set(payload, key, Js.Json.number(float_of_int(v))) - | None => Js.Dict.set(payload, key, Js.Json.null) - } -} - -let setOptionalFloat = (key, value, payload) => { - switch value { - | Some(v) => Js.Dict.set(payload, key, Js.Json.number(v)) - | None => Js.Dict.set(payload, key, Js.Json.null) - } -} - -let setOptionalBool = (key, value, payload) => { - switch value { - | Some(v) => Js.Dict.set(payload, key, Js.Json.boolean(v)) - | None => Js.Dict.set(payload, key, Js.Json.null) - } -} diff --git a/src/Components/Common/utils/ReactUtils.res b/src/Components/Common/utils/ReactUtils.res deleted file mode 100644 index c83a85853d4..00000000000 --- a/src/Components/Common/utils/ReactUtils.res +++ /dev/null @@ -1,3 +0,0 @@ -let nullUnless = (element, condition) => condition ? element : React.null - -let nullIf = (element, condition) => nullUnless(element, !condition) diff --git a/src/Components/Common/utils/ValidationUtils.res b/src/Components/Common/utils/ValidationUtils.res deleted file mode 100644 index 61a79fbffa2..00000000000 --- a/src/Components/Common/utils/ValidationUtils.res +++ /dev/null @@ -1,22 +0,0 @@ -let isInputInRangeFloat = (minString, maxString, val) => { - let min = Js.Float.fromString(minString) - let max = Js.Float.fromString(maxString) - let value = Js.Option.getWithDefault(min, val) - if value < min || value > max { - Some("Input outside range") - } else { - None - } -} - -let isInputInRangeInt = (min, max, val) => { - switch val { - | Some(value) => - switch (value < min, value > max) { - | (true, _) => Some("Input less than " ++ string_of_int(min)) - | (_, true) => Some("Input greater than maximum") - | _ => None - } - | None => None - } -} diff --git a/src/Components/Common/utils/WindowUtils.res b/src/Components/Common/utils/WindowUtils.res deleted file mode 100644 index e8eb1ceb4dc..00000000000 --- a/src/Components/Common/utils/WindowUtils.res +++ /dev/null @@ -1,9 +0,0 @@ -let confirm = (~onCancel=?, message, f) => - if { - open Webapi.Dom - window -> Window.confirm(message) - } { - f() - } else { - Belt.Option.mapWithDefault(onCancel, (), onCancel => onCancel()) - } diff --git a/src/Components/CriticalCareRecording/ABGAnalysisEditor/CriticalCare__ABGAnalysisEditor.res b/src/Components/CriticalCareRecording/ABGAnalysisEditor/CriticalCare__ABGAnalysisEditor.res deleted file mode 100644 index c3e5a6e7025..00000000000 --- a/src/Components/CriticalCareRecording/ABGAnalysisEditor/CriticalCare__ABGAnalysisEditor.res +++ /dev/null @@ -1,216 +0,0 @@ -open CriticalCare__Types -let str = React.string - -@module("../CriticalCare__API") -external updateDailyRound: (string, string, Js.Json.t, _ => unit, _ => unit) => unit = - "updateDailyRound" - -let string_of_float = data => Belt.Option.mapWithDefault(data, "", Js.Float.toString) -let string_of_int = data => Belt.Option.mapWithDefault(data, "", Js.Int.toString) -let int_of_string = data => data->Belt.Int.fromString -let float_of_string = data => data->Belt.Float.fromString - -type state = { - po2: option, - pco2: option, - pH: option, - hco3: option, - baseExcess: option, - lactate: option, - sodium: option, - potassium: option, - dirty: bool, - saving: bool, -} - -type action = - | SetPO2(option) - | SetPCO2(option) - | SetpH(option) - | SetHCO3(option) - | SetBaseExcess(option) - | SetLactate(option) - | SetSodium(option) - | SetPotassium(option) - | SetSaving - | ClearSaving - -let reducer = (state, action) => { - switch action { - | SetPO2(po2) => {...state, po2: po2, dirty: true} - | SetPCO2(pco2) => {...state, pco2: pco2, dirty: true} - | SetpH(pH) => {...state, pH: pH, dirty: true} - | SetHCO3(hco3) => {...state, hco3: hco3, dirty: true} - | SetBaseExcess(baseExcess) => {...state, baseExcess: baseExcess, dirty: true} - | SetLactate(lactate) => {...state, lactate: lactate, dirty: true} - | SetSodium(sodium) => {...state, sodium: sodium, dirty: true} - | SetPotassium(potassium) => {...state, potassium: potassium, dirty: true} - | SetSaving => {...state, saving: true} - | ClearSaving => {...state, saving: false} - } -} - -let initialState = abg => { - { - po2: ABGAnalysis.po2(abg), - pco2: ABGAnalysis.pco2(abg), - pH: ABGAnalysis.pH(abg), - hco3: ABGAnalysis.hco3(abg), - baseExcess: ABGAnalysis.baseExcess(abg), - lactate: ABGAnalysis.lactate(abg), - sodium: ABGAnalysis.sodium(abg), - potassium: ABGAnalysis.potassium(abg), - saving: false, - dirty: false, - } -} - -let makePayload = state => { - let payload = Js.Dict.empty() - DictUtils.setOptionalNumber("po2", state.po2, payload) - DictUtils.setOptionalNumber("pco2", state.pco2, payload) - DictUtils.setOptionalFloat("ph", state.pH, payload) - DictUtils.setOptionalFloat("hco3", state.hco3, payload) - DictUtils.setOptionalNumber("base_excess", state.baseExcess, payload) - DictUtils.setOptionalFloat("lactate", state.lactate, payload) - DictUtils.setOptionalFloat("sodium", state.sodium, payload) - DictUtils.setOptionalFloat("potassium", state.potassium, payload) - payload -} - -let successCB = (send, updateCB, data) => { - send(ClearSaving) - updateCB(CriticalCare__DailyRound.makeFromJs(data)) -} - -let errorCB = (send, _error) => { - send(ClearSaving) -} - -let saveData = (id, consultationId, state, send, updateCB) => { - send(SetSaving) - updateDailyRound( - consultationId, - id, - Js.Json.object_(makePayload(state)), - successCB(send, updateCB), - errorCB(send), - ) -} - -let getStatus = (min, minText, max, maxText, val) => { - if val >= min && val <= max { - ("Normal", "#059669") - } else if val < min { - (minText, "#DC2626") - } else { - (maxText, "#DC2626") - } -} - - - -@react.component -let make = (~arterialBloodGasAnalysis, ~updateCB, ~id, ~consultationId) => { - let (state, send) = React.useReducer(reducer, initialState(arterialBloodGasAnalysis)) - -
- -
- send(SetPO2(int_of_string(s)))} - getLabel={getStatus(50.0, "Low", 200.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(10, 400, state.po2)} - /> - send(SetPCO2(int_of_string(s)))} - getLabel={getStatus(35.0, "Low", 45.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(10, 200, state.pco2)} - /> - send(SetpH(float_of_string(s)))} - getLabel={getStatus(7.35, "Low", 7.45, "High")} - hasError={ValidationUtils.isInputInRangeFloat("0.0", "10.0", state.pH)} - /> - send(SetHCO3(float_of_string(s)))} - getLabel={getStatus(22.0, "Low", 26.0, "High")} - hasError={ValidationUtils.isInputInRangeFloat("5.0", "80.0", state.hco3)} - /> - send(SetBaseExcess(int_of_string(s)))} - getLabel={getStatus(-2.0, "Low", 2.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(-20, 20, state.baseExcess)} - /> - send(SetLactate(float_of_string(s)))} - getLabel={getStatus(0.0, "Low", 2.0, "High")} - hasError={ValidationUtils.isInputInRangeFloat("0.0", "20.0", state.lactate)} - /> - send(SetSodium(float_of_string(s)))} - getLabel={getStatus(135.0, "Low", 145.0, "High")} - hasError={ValidationUtils.isInputInRangeFloat("100.0", "170.0", state.sodium)} - /> - send(SetPotassium(float_of_string(s)))} - getLabel={getStatus(3.5, "Low", 5.5, "High")} - hasError={ValidationUtils.isInputInRangeFloat("1.0", "10.0", state.potassium)} - /> -
- -
-} diff --git a/src/Components/CriticalCareRecording/ABGAnalysisEditor/DailyRound__ABG.res b/src/Components/CriticalCareRecording/ABGAnalysisEditor/DailyRound__ABG.res deleted file mode 100644 index 82b7e25f7e9..00000000000 --- a/src/Components/CriticalCareRecording/ABGAnalysisEditor/DailyRound__ABG.res +++ /dev/null @@ -1,68 +0,0 @@ -let str = React.string -open CriticalCare__Types - -@react.component -let make = ( - ~arterialBloodGasAnalysis, - ~renderOptionalIntWithIndicators, - ~renderOptionalFloatWithIndicators, -) => { -
- {renderOptionalIntWithIndicators( - "PO2", - ABGAnalysis.po2(arterialBloodGasAnalysis), - 35, - 45, - "Low", - "High", - )} - {renderOptionalFloatWithIndicators( - "pH", - ABGAnalysis.pH(arterialBloodGasAnalysis), - 7.35, - 7.45, - "Low", - "High", - )} - {renderOptionalFloatWithIndicators( - "HCO3", - ABGAnalysis.hco3(arterialBloodGasAnalysis), - 22.0, - 26.0, - "Low", - "High", - )} - {renderOptionalIntWithIndicators( - "Base Excess", - ABGAnalysis.baseExcess(arterialBloodGasAnalysis), - -2, - 2, - "Low", - "High", - )} - {renderOptionalFloatWithIndicators( - "Lactate", - ABGAnalysis.lactate(arterialBloodGasAnalysis), - 0.0, - 2.0, - "Low", - "High", - )} - {renderOptionalFloatWithIndicators( - "Sodium", - ABGAnalysis.sodium(arterialBloodGasAnalysis), - 135.0, - 145.0, - "Low", - "High", - )} - {renderOptionalFloatWithIndicators( - "Potassium", - ABGAnalysis.potassium(arterialBloodGasAnalysis), - 3.5, - 5.5, - "Low", - "High", - )} -
-} diff --git a/src/Components/CriticalCareRecording/BloodSugarEditor/CriticalCare_BloodSugarEditor.res b/src/Components/CriticalCareRecording/BloodSugarEditor/CriticalCare_BloodSugarEditor.res deleted file mode 100644 index 65db7a1bbf8..00000000000 --- a/src/Components/CriticalCareRecording/BloodSugarEditor/CriticalCare_BloodSugarEditor.res +++ /dev/null @@ -1,144 +0,0 @@ -let str = React.string -open CriticalCare__Types - -@module("../CriticalCare__API") -external updateDailyRound: (string, string, Js.Json.t, _ => unit, _ => unit) => unit = - "updateDailyRound" - -type state = { - blood_sugar_level: option, - insulin_intake_dose: option, - insulin_intake_frequency: BloodSugar.frequency, - dirty: bool, - saving: bool, -} - -type action = - | SetBloodSugarLevel(int) - | SetDosage(float) - | SetFrequency(BloodSugar.frequency) - | SetSaving - | ClearSaving - -let reducer = (state, action) => { - switch action { - | SetBloodSugarLevel(blood_sugar_level) => { - ...state, - blood_sugar_level: Some(blood_sugar_level), - dirty: true, - } - | SetDosage(dosage) => {...state, insulin_intake_dose: Some(dosage), dirty: true} - | SetFrequency(frequency) => {...state, insulin_intake_frequency: frequency, dirty: true} - | SetSaving => {...state, saving: true} - | ClearSaving => {...state, saving: false} - } -} - -let getStatus = (min, max, val) => { - if val >= min && val <= max { - ("Normal", "#059669") - } else if val < min { - ("Low", "#DC2626") - } else { - ("High", "#DC2626") - } -} - -let initialState = bloodsugarParameters => { - { - blood_sugar_level: BloodSugar.bloodsugar_level(bloodsugarParameters), - insulin_intake_dose: BloodSugar.dosage(bloodsugarParameters), - insulin_intake_frequency: BloodSugar.frequency(bloodsugarParameters), - saving: false, - dirty: false, - } -} - -let makePayload = state => { - let payload = Js.Dict.empty() - - DictUtils.setOptionalNumber("blood_sugar_level", state.blood_sugar_level, payload) - DictUtils.setOptionalFloat("insulin_intake_dose", state.insulin_intake_dose, payload) - Js.Dict.set( - payload, - "insulin_intake_frequency", - Js.Json.string(BloodSugar.encodeFrequency(state.insulin_intake_frequency)), - ) - payload -} - -let successCB = (send, updateCB, data) => { - send(ClearSaving) - updateCB(CriticalCare__DailyRound.makeFromJs(data)) -} - -let errorCB = (send, _error) => { - send(ClearSaving) -} - -let saveData = (id, consultationId, state, send, updateCB) => { - send(SetSaving) - updateDailyRound( - consultationId, - id, - Js.Json.object_(makePayload(state)), - successCB(send, updateCB), - errorCB(send), - ) -} - -@react.component -let make = (~bloodsugarParameters, ~updateCB, ~id, ~consultationId) => { - let (state, send) = React.useReducer(reducer, initialState(bloodsugarParameters)) - -
-

{str("Blood Sugar")}

-
- send(SetBloodSugarLevel(int_of_string(s)))} - getLabel={getStatus(70.0, 110.0)} - hasError={ValidationUtils.isInputInRangeInt(0, 700, state.blood_sugar_level)} - /> -

{str("Insulin Intake")}

- send(SetDosage(float_of_string(s)))} - getLabel={_ => ("", "#ff0000")} - hasError={ValidationUtils.isInputInRangeFloat("0", "100", state.insulin_intake_dose)} - /> -
- -
- {Js.Array.map( - f => - send(SetFrequency(f))} - />, - [OD, BD, TD, UNKNOWN], - )->React.array} -
-
-
- -
-} diff --git a/src/Components/CriticalCareRecording/BloodSugarEditor/DailyRound__BloodSugar.res b/src/Components/CriticalCareRecording/BloodSugarEditor/DailyRound__BloodSugar.res deleted file mode 100644 index c650e27284d..00000000000 --- a/src/Components/CriticalCareRecording/BloodSugarEditor/DailyRound__BloodSugar.res +++ /dev/null @@ -1,18 +0,0 @@ -let str = React.string -open CriticalCare__Types - -@react.component -let make = (~bloodSugar, ~renderLine, ~renderOptionalIntWithIndicators, ~renderOptionalFloat) => { -
- {renderOptionalIntWithIndicators( - "Blood Sugar Level", - BloodSugar.bloodsugar_level(bloodSugar), - 70, - 110, - "Low", - "High", - )} - {renderOptionalFloat("Dosage", BloodSugar.dosage(bloodSugar))} - {renderLine("Frequency", BloodSugar.frequencyToString(BloodSugar.frequency(bloodSugar)))} -
-} diff --git a/src/Components/CriticalCareRecording/CriticalCareRecording.res b/src/Components/CriticalCareRecording/CriticalCareRecording.res deleted file mode 100644 index acbd4aee531..00000000000 --- a/src/Components/CriticalCareRecording/CriticalCareRecording.res +++ /dev/null @@ -1,4 +0,0 @@ -@react.component -let make = (~id, ~facilityId, ~patientId, ~consultationId, ~preview) => { -
-} diff --git a/src/Components/CriticalCareRecording/CriticalCare__API.tsx b/src/Components/CriticalCareRecording/CriticalCare__API.tsx deleted file mode 100644 index 7bddbf9eaee..00000000000 --- a/src/Components/CriticalCareRecording/CriticalCare__API.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { fireRequestV2 } from "../../Redux/fireRequest"; -import routes from "../../Redux/api"; -import request from "../../Utils/request/request"; - -export const loadDailyRound = ( - consultationId: string, - id: string, - successCB: any = () => null, - errorCB: any = () => null, -) => { - fireRequestV2("getDailyReport", [], {}, successCB, errorCB, { - consultationId, - id, - }); -}; - -export const updateDailyRound = ( - consultationId: string, - id: string, - params: object, - successCB: any = () => null, - errorCB: any = () => null, -) => { - fireRequestV2("updateDailyRound", [], params, successCB, errorCB, { - consultationId, - id, - }); -}; - -export const getAsset = ( - consultationId: string, - setAsset: React.Dispatch>, -) => { - request(routes.listConsultationBeds, { - query: { consultation: consultationId, limit: 1 }, - }).then(({ data }) => { - // here its fetching the ventilator type assets - const assets = data?.results[0].assets_objects?.filter( - (asset) => asset.asset_class == "VENTILATOR", - ); - setAsset(assets?.length || 0); - }); -}; diff --git a/src/Components/CriticalCareRecording/CriticalCare__Index.res b/src/Components/CriticalCareRecording/CriticalCare__Index.res deleted file mode 100644 index 0290728fd82..00000000000 --- a/src/Components/CriticalCareRecording/CriticalCare__Index.res +++ /dev/null @@ -1,210 +0,0 @@ -let str = React.string -open CriticalCare__Types - -let renderLine = (title, value) => { -
- {str(`${title}:`)} - {str(value)} -
-} - -let renderIndicators = (title, value, isMin, isMax, minText, maxText) => { - let indicator = if isMax { - - - {str(maxText)} - - } else if isMin { - - - {str(minText)} - - } else { - - - {str("Normal")} - - } - -
- {str(`${title}:`)} - {str(value)} - {indicator} -
-} - -let renderOptionalIntWithIndicators = (title, value, min, max, minText, maxText) => { - Belt.Option.mapWithDefault(value, React.null, v => { - renderIndicators(title, string_of_int(v), v < min, v > max, minText, maxText) - }) -} - -let renderOptionalFloatWithIndicators = (title, value, min, max, minText, maxText) => { - Belt.Option.mapWithDefault(value, React.null, v => - renderIndicators(title, Js.Float.toString(v), v < min, v > max, minText, maxText) - ) -} - -let renderIntWithIndicators = (title, value, min, max, minText, maxText) => { - renderIndicators(title, string_of_int(value), value < min, value > max, minText, maxText) -} - -let renderFloatWithIndicators = (title, value, min, max, minText, maxText) => { - renderIndicators(title, Js.Float.toString(value), value < min, value > max, minText, maxText) -} - -let renderOptionalInt = (title, value) => { - Belt.Option.mapWithDefault(value, React.null, v => renderLine(title, string_of_int(v))) -} - -let renderOptionalFloat = (title, value) => { - Belt.Option.mapWithDefault(value, React.null, v => renderLine(title, Js.Float.toString(v))) -} - -let renderOptionalBool = (title, value) => { - Belt.Option.mapWithDefault(value, React.null, v => renderLine(title, v ? "Yes" : "No")) -} - -let renderOptionalDescription = (title, value) => { - switch value { - | Some(v) => -
- {str(`${title}:`)} - {str(v)} -
- | None => React.null - } -} - -let title = text => { -
{str(text)}
-} - -@genType @react.component -let make = ( - ~id, - ~facilityId, - ~patientId, - ~consultationId, - ~dailyRound: CriticalCare__DailyRound.t, -) => { - let neurologicalMonitoring = DailyRound.neurologicalMonitoring(dailyRound) - let hemodynamicParameter = DailyRound.hemodynamicParameters(dailyRound) - let nursingCare = DailyRound.nursingCare(dailyRound) - let arterialBloodGasAnalysis = DailyRound.arterialBloodGasAnalysis(dailyRound) - let ioBalance = DailyRound.ioBalance(dailyRound) - let dialysis = DailyRound.dialysis(dailyRound) - let pressureSoreParameter = DailyRound.pressureSoreParameter(dailyRound) - let bloodSugar = DailyRound.bloodSugar(dailyRound) - let ventilatorParameters = DailyRound.ventilatorParameters(dailyRound) - let medicine = DailyRound.medicine(dailyRound) - let others = DailyRound.others(dailyRound) - -
-
- - {str("Go back to Consultation")} - -
-
-
-

{str("Consultation Update")}

-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - ()} - id={id} - consultationId={consultationId} - /> -
-
-
- - -
-
-
- - -
-
-
-
-
-} diff --git a/src/Components/CriticalCareRecording/CriticalCare__Root.res b/src/Components/CriticalCareRecording/CriticalCare__Root.res deleted file mode 100644 index 33f2564096c..00000000000 --- a/src/Components/CriticalCareRecording/CriticalCare__Root.res +++ /dev/null @@ -1,47 +0,0 @@ -@module("./CriticalCare__API") -external loadDailyRound: (string, string, _ => unit, _ => unit) => unit = "loadDailyRound" - -open CriticalCare__Types -let str = React.string - -type state = { - loading: bool, - dailyRound: option, -} - -let successCB = (setState, dailyRound) => { - setState(_state => {loading: false, dailyRound: Some(DailyRound.makeFromJs(dailyRound))}) -} - -let errorCB = (setState, _error) => { - setState(_state => {dailyRound: None, loading: false}) -} - -let loadData = (setState, consultationId, id) => { - loadDailyRound(consultationId, id, successCB(setState), errorCB(setState)) -} - -@react.component -let make = (~id, ~facilityId, ~patientId, ~consultationId, ~preview) => { - let (state, setState) = React.useState(() => {loading: true, dailyRound: None}) - React.useEffect1(() => { - loadData(setState, consultationId, id) - None - }, [id]) - -
- {state.loading - ? - : switch state.dailyRound { - | Some(dailyRound) => - preview - ? - : - - | None => { - Notifications.error({msg: "No Data "}) - <> - } - }} -
-} diff --git a/src/Components/CriticalCareRecording/DailyRound__Medicines.res b/src/Components/CriticalCareRecording/DailyRound__Medicines.res deleted file mode 100644 index ce143c24d29..00000000000 --- a/src/Components/CriticalCareRecording/DailyRound__Medicines.res +++ /dev/null @@ -1,50 +0,0 @@ -let str = React.string - -@react.component -let make = (~prescriptions) => { -
- {ArrayUtils.isEmpty(prescriptions) - ?
{str("No Medicines Prescribed")}
- :
-
-
- - - - - - - - - {Js.Array.mapi((p, index) => { - - - - - - }, prescriptions)->React.array} -
- {str("Medicine")} - - {str("Dosage")} - - {str("Days")} -
- {str(Prescription__Prescription.medicine(p))} - - {str(Prescription__Prescription.dosage(p))} - - {str(string_of_int(Prescription__Prescription.days(p)))} -
-
-
-
} -
-} diff --git a/src/Components/CriticalCareRecording/DialysisEditor/CriticalCare_DialysisEditor.res b/src/Components/CriticalCareRecording/DialysisEditor/CriticalCare_DialysisEditor.res deleted file mode 100644 index bb10cf38a69..00000000000 --- a/src/Components/CriticalCareRecording/DialysisEditor/CriticalCare_DialysisEditor.res +++ /dev/null @@ -1,116 +0,0 @@ -let str = React.string -open CriticalCare__Types - -@module("../CriticalCare__API") -external updateDailyRound: (string, string, Js.Json.t, _ => unit, _ => unit) => unit = - "updateDailyRound" - -type state = { - dialysis_fluid_balance: option, - dialysis_net_balance: option, - dirty: bool, - saving: bool, -} - -type action = - | SetFluidBalance(int) - | SetNetBalance(int) - | SetSaving - | ClearSaving - -let reducer = (state, action) => { - switch action { - | SetFluidBalance(fluid_balance) => { - ...state, - dialysis_fluid_balance: Some(fluid_balance), - dirty: true, - } - | SetNetBalance(net_balance) => { - ...state, - dialysis_net_balance: Some(net_balance), - dirty: true, - } - | SetSaving => {...state, saving: true} - | ClearSaving => {...state, saving: false} - } -} - -let initialState = dialysis_parameters => { - { - dialysis_fluid_balance: Dialysis.fluid_balance(dialysis_parameters), - dialysis_net_balance: Dialysis.net_balance(dialysis_parameters), - saving: false, - dirty: false, - } -} - -let makePayload = state => { - let payload = Js.Dict.empty() - - DictUtils.setOptionalNumber("dialysis_fluid_balance", state.dialysis_fluid_balance, payload) - DictUtils.setOptionalNumber("dialysis_net_balance", state.dialysis_net_balance, payload) - - payload -} - -let successCB = (send, updateCB, data) => { - send(ClearSaving) - updateCB(CriticalCare__DailyRound.makeFromJs(data)) -} - -let errorCB = (send, _error) => { - send(ClearSaving) -} - -let saveData = (id, consultationId, state, send, updateCB) => { - send(SetSaving) - updateDailyRound( - consultationId, - id, - Js.Json.object_(makePayload(state)), - successCB(send, updateCB), - errorCB(send), - ) -} - - -@react.component -let make = (~dialysisParameters, ~updateCB, ~id, ~consultationId) => { - let (state, send) = React.useReducer(reducer, initialState(dialysisParameters)) - -
-

{str("Dialysis")}

-
-
- send(SetFluidBalance(int_of_string(s)))} - getLabel={_ => ("", "#ff0000")} - hasError={ValidationUtils.isInputInRangeInt(0, 5000, state.dialysis_fluid_balance)} - /> - send(SetNetBalance(int_of_string(s)))} - getLabel={_ => ("", "#ff0000")} - hasError={ValidationUtils.isInputInRangeInt(0, 5000, state.dialysis_net_balance)} - /> -
- -
-
-} diff --git a/src/Components/CriticalCareRecording/DialysisEditor/DailyRound__Dialysis.res b/src/Components/CriticalCareRecording/DialysisEditor/DailyRound__Dialysis.res deleted file mode 100644 index c023acb1636..00000000000 --- a/src/Components/CriticalCareRecording/DialysisEditor/DailyRound__Dialysis.res +++ /dev/null @@ -1,10 +0,0 @@ -let str = React.string -open CriticalCare__Types - -@react.component -let make = (~dialysis, ~renderOptionalInt) => { -
- {renderOptionalInt("Fluid Balance", Dialysis.fluid_balance(dialysis))} - {renderOptionalInt("Net Balance", Dialysis.net_balance(dialysis))} -
-} diff --git a/src/Components/CriticalCareRecording/HemodynamicParameters/CriticalCare__HemodynamicParametersEditor.res b/src/Components/CriticalCareRecording/HemodynamicParameters/CriticalCare__HemodynamicParametersEditor.res deleted file mode 100644 index 47cc040440e..00000000000 --- a/src/Components/CriticalCareRecording/HemodynamicParameters/CriticalCare__HemodynamicParametersEditor.res +++ /dev/null @@ -1,358 +0,0 @@ -open CriticalCare__Types -let str = React.string - -@module("../CriticalCare__API") -external updateDailyRound: (string, string, Js.Json.t, _ => unit, _ => unit) => unit = - "updateDailyRound" - -let fahrenheitToCelcius = (temp: option) => { - switch temp { - | Some(x) => - Js.Float.toFixedWithPrecision((x -. 32.0) *. (5.0 /. 9.0), ~digits=2)->Belt.Float.fromString - | None => None - } -} -let celciusToFahrenheit = (temp: option) => { - switch temp { - | Some(x) => - Js.Float.toFixedWithPrecision(x *. 9.0 /. 5.0 +. 32.0, ~digits=2)->Belt.Float.fromString - | None => None - } -} - -type state = { - pain: array, - systolic: option, - diastolic: option, - pulse: option, - spo2: option, - temperature: option, - resp: option, - rhythm: HemodynamicParameters.rhythm, - rhythmDetails: string, - tempInCelcius: bool, - dirty: bool, - saving: bool, -} - -type action = - | SetPain(array) - | SetSystolic(int) - | SetDiastolic(int) - | SetPulse(int) - | SetSPO2(int) - | SetTemperature(float) - | ToggleTemperatureUnit - | SetResp(int) - | SetRhythm(HemodynamicParameters.rhythm) - | SetRhythmDetails(string) - | SetSaving - | ClearSaving - -let reducer = (state, action) => { - switch action { - | SetPain(pain) => { - ...state, - pain, - dirty: true, - } - | SetSystolic(systolic) => { - ...state, - systolic: Some(systolic), - dirty: true, - } - | SetDiastolic(diastolic) => { - ...state, - diastolic: Some(diastolic), - dirty: true, - } - | SetPulse(pulse) => {...state, pulse: Some(pulse), dirty: true} - | SetSPO2(spo2) => {...state, spo2: Some(spo2), dirty: true} - | SetTemperature(temperature) => { - ...state, - temperature: Some(temperature), - dirty: true, - } - | ToggleTemperatureUnit => { - ...state, - temperature: state.tempInCelcius - ? state.temperature->celciusToFahrenheit - : state.temperature->fahrenheitToCelcius, - tempInCelcius: !state.tempInCelcius, - } - | SetResp(resp) => { - ...state, - resp: Some(resp), - dirty: true, - } - | SetRhythm(rhythm) => {...state, rhythm, dirty: true} - | SetRhythmDetails(rhythmDetails) => { - ...state, - rhythmDetails, - dirty: true, - } - | SetSaving => {...state, saving: true} - | ClearSaving => {...state, saving: false} - } -} - -let initialState = hdp => { - let bp = HemodynamicParameters.bp(hdp) - - { - pain: HemodynamicParameters.pain(hdp), - systolic: Belt.Option.map(bp, HemodynamicParameters.systolic), - diastolic: Belt.Option.map(bp, HemodynamicParameters.diastolic), - pulse: HemodynamicParameters.pulse(hdp), - spo2: HemodynamicParameters.spo2(hdp), - temperature: HemodynamicParameters.temperature(hdp), - resp: HemodynamicParameters.resp(hdp), - rhythm: HemodynamicParameters.rhythm(hdp), - rhythmDetails: Belt.Option.getWithDefault(HemodynamicParameters.rhythmDetails(hdp), ""), - tempInCelcius: false, - saving: false, - dirty: false, - } -} - -let computeMeanArterialPressure = (systolic, diastolic) => { - float_of_int(systolic + 2 * diastolic) /. 3.0 -} - -let makePainField = p => { - let payload = Js.Dict.empty() - Js.Dict.set(payload, "region", Js.Json.string(Pain.endcodeRegion(p))) - Js.Dict.set(payload, "scale", Js.Json.number(float_of_int(Pain.scale(p)))) - Js.Dict.set(payload, "description", Js.Json.string(p.description)) - payload -} - -let makeBpPayload = (systolic, diastolic) => { - let payload = Js.Dict.empty() - Js.Dict.set(payload, "systolic", Js.Json.number(float_of_int(systolic))) - Js.Dict.set(payload, "diastolic", Js.Json.number(float_of_int(diastolic))) - Js.Dict.set(payload, "mean", Js.Json.number(computeMeanArterialPressure(systolic, diastolic))) - payload -} - -let makePayload = state => { - let payload = Js.Dict.empty() - - switch (state.systolic, state.diastolic) { - | (Some(systolic), Some(diastolic)) => - Js.Dict.set(payload, "bp", Js.Json.object_(makeBpPayload(systolic, diastolic))) - | (_, _) => () - } - Js.Dict.set( - payload, - "pain_scale_enhanced", - Js.Json.objectArray(Js.Array.map(makePainField, state.pain)), - ) - DictUtils.setOptionalNumber("pulse", state.pulse, payload) - DictUtils.setOptionalNumber("ventilator_spo2", state.spo2, payload) - DictUtils.setOptionalFloat( - "temperature", - state.tempInCelcius ? state.temperature->celciusToFahrenheit : state.temperature, - payload, - ) - DictUtils.setOptionalNumber("resp", state.resp, payload) - Js.Dict.set(payload, "rhythm", Js.Json.string(HemodynamicParameters.encodeRhythm(state.rhythm))) - DictUtils.setOptionalString("rhythm_detail", state.rhythmDetails, payload) - payload -} -let successCB = (send, updateCB, data) => { - send(ClearSaving) - updateCB(CriticalCare__DailyRound.makeFromJs(data)) -} - -let errorCB = (send, _error) => { - send(ClearSaving) -} - -let saveData = (id, consultationId, state, send, updateCB) => { - send(SetSaving) - updateDailyRound( - consultationId, - id, - Js.Json.object_(makePayload(state)), - successCB(send, updateCB), - errorCB(send), - ) -} - -let getStatus = (min, minText, max, maxText, val) => { - switch (val >= min, val <= max) { - | (true, true) => ("Normal", "#059669") - | (true, false) => (maxText, "#DC2626") - | _ => (minText, "#DC2626") - } -} - -let meanArterialPressure = state => { - switch (state.systolic, state.diastolic) { - | (Some(systolic), Some(diastolic)) => computeMeanArterialPressure(systolic, diastolic) - | (_, _) => 0.0 - } -} - -let getPainStatus = val => { - if val == 0.0 { - ("No Pain", "#059669") - } else if val < 4.0 { - ("Minute", "#ff3f00") - } else if val < 8.0 { - ("Moderate", "#ff002c") - } else { - ("Severe", "#de000c") - } -} - -@react.component -let make = (~hemodynamicParameter, ~updateCB, ~id, ~consultationId) => { - let (state, send) = React.useReducer(reducer, initialState(hemodynamicParameter)) - -
-

{str("Vitals")}

-
-
-
-

{str("BP (mm hg)")}

-

- {str( - `Mean Arterial Pressure: ${Js.Float.toFixedWithPrecision( - meanArterialPressure(state), - ~digits=2, - )}`, - )} -

-
- send(SetSystolic(int_of_string(s)))} - getLabel={getStatus(100.0, "Low", 140.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(0, 250, state.systolic)} - /> - send(SetDiastolic(int_of_string(s)))} - getLabel={getStatus(50.0, "Low", 90.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(30, 180, state.diastolic)} - /> - send(SetSPO2(int_of_string(s)))} - getLabel={getStatus(90.0, "Low", 100.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(0, 100, state.spo2)} - /> -
-
- ToggleTemperatureUnit->send}> - {state.tempInCelcius ? "C"->str : "F"->str} -
} - start={state.tempInCelcius ? "35" : "95"} - end={state.tempInCelcius ? "41" : "106"} - interval={"10"} - step={0.1} - value={Belt.Option.mapWithDefault(state.temperature, "", Js.Float.toString)} - setValue={s => send(SetTemperature(float_of_string(s)))} - getLabel={state.tempInCelcius - ? getStatus(36.4, "Low", 37.5, "High") - : getStatus(97.6, "Low", 99.6, "High")} - hasError={state.tempInCelcius - ? ValidationUtils.isInputInRangeFloat("35", "41", state.temperature) - : ValidationUtils.isInputInRangeFloat("95", "106", state.temperature)} - /> - send(SetResp(int_of_string(s)))} - getLabel={getStatus(12.0, "Low", 16.0, "High")} - hasError={ValidationUtils.isInputInRangeInt(0, 150, state.resp)} - /> -
-
-

{str("Pain")}

-

{str("Mark region and intensity of pain")}

-
-
- { - send(SetPain(data)) - }} - id={id} - consultationId={consultationId} - /> -
- send(SetPulse(int_of_string(s)))} - getLabel={getStatus(40.0, "Bradycardia", 100.0, "Tachycardia")} - hasError={ValidationUtils.isInputInRangeInt(0, 200, state.pulse)} - /> -
- -
- {Js.Array.map( - r => - send(SetRhythm(r))} - />, - [Regular, IrRegular, UNKNOWN], - )->React.array} -
-
-
- -