commit acfea140a35dbdb577ee53a23944a30a98b804a1 Author: romiz5269 Date: Tue Nov 18 18:45:28 2025 +0330 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..91bc2b4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM node:20-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +RUN npm run build + +EXPOSE 3000 + +CMD ["npm", "start"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/db.json b/db.json new file mode 100644 index 0000000..54f0f43 --- /dev/null +++ b/db.json @@ -0,0 +1,2899 @@ +{ + "doctors": [ + { + "id": 1, + "fullname": { + "fa": "دکتر ابراهیم قاسمی", + "en": "Dr. Ebrahim Ghasemi", + "ar": "د. إبراهيم قاسمي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص ارتوپدی", + "en": "Orthopedic Specialist", + "ar": "أخصائي عظام" + } + } + ], + "category": { + "id": 1, + "name": { + "fa": "ارتوپدی", + "en": "Orthopedics", + "ar": "جراحة العظام" + } + }, + "doctor_identify_number": 39212 + }, + { + "id": 2, + "fullname": { + "fa": "دکتر ناصر بهگام", + "en": "Dr. Naser Behgam", + "ar": "د. ناصر بهغام" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص ارتوپدی", + "en": "Orthopedic Specialist", + "ar": "أخصائي عظام" + } + } + ], + "category": { + "id": 1, + "name": { + "fa": "ارتوپدی", + "en": "Orthopedics", + "ar": "جراحة العظام" + } + }, + "doctor_identify_number": 54351 + }, + { + "id": 3, + "fullname": { + "fa": "دکتر مازیار نفیسی", + "en": "Dr. Mazyar Nafisi", + "ar": "د. مازیار نفیسي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "فلوشیپ جراحی زانو", + "en": "Knee Surgery Fellowship", + "ar": "زمالة جراحة الركبة" + } + } + ], + "category": { + "id": 1, + "name": { + "fa": "ارتوپدی", + "en": "Orthopedics", + "ar": "جراحة العظام" + } + }, + "doctor_identify_number": 104370 + }, + { + "id": 5, + "fullname": { + "fa": "دکتر علیرضا کاظمی", + "en": "Dr. Alireza Kazemi", + "ar": "د. علیرضا كاظمي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص ارتوپدی", + "en": "Orthopedic Specialist", + "ar": "أخصائي عظام" + } + } + ], + "category": { + "id": 1, + "name": { + "fa": "ارتوپدی", + "en": "Orthopedics", + "ar": "جراحة العظام" + } + }, + "doctor_identify_number": 141368 + }, + { + "id": 6, + "fullname": { + "fa": "دکتر امیرجعفر حیدری", + "en": "Dr. Amir Jafar Heydari", + "ar": "د. أمير جعفر حيدري" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص ارتوپدی", + "en": "Orthopedic Specialist", + "ar": "أخصائي عظام" + } + } + ], + "category": { + "id": 1, + "name": { + "fa": "ارتوپدی", + "en": "Orthopedics", + "ar": "جراحة العظام" + } + }, + "doctor_identify_number": 153927 + }, + { + "id": 7, + "fullname": { + "fa": "دکتر ابراهیم قاسمی", + "en": "Dr. Ebrahim Ghasemi", + "ar": "د. إبراهيم قاسمي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص ارتوپدی", + "en": "Orthopedic Specialist", + "ar": "أخصائي عظام" + } + } + ], + "category": { + "id": 1, + "name": { + "fa": "ارتوپدی", + "en": "Orthopedics", + "ar": "جراحة العظام" + } + }, + "doctor_identify_number": 39212 + }, + { + "id": 8, + "fullname": { + "fa": "دکتر حمزه ابراهیمی پاکزاد", + "en": "Dr. Hamzeh Ebrahimi Pakzad", + "ar": "د. حمزة إبراهيمي باكزاد" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی عمومی", + "en": "General Surgery Specialist", + "ar": "أخصائي الجراحة العامة" + } + } + ], + "category": { + "id": 2, + "name": { + "fa": "جراحی عمومی", + "en": "General Surgery", + "ar": "الجراحة العامة" + } + }, + "doctor_identify_number": 43360 + }, + { + "id": 9, + "fullname": { + "fa": "دکتر امیررضا کاظمی", + "en": "Dr. Amirreza Kazemi", + "ar": "د. أميررضا كاظمي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی عمومی", + "en": "General Surgery Specialist", + "ar": "أخصائي الجراحة العامة" + } + } + ], + "category": { + "id": 2, + "name": { + "fa": "جراحی عمومی", + "en": "General Surgery", + "ar": "الجراحة العامة" + } + }, + "doctor_identify_number": 112041 + }, + { + "id": 10, + "fullname": { + "fa": "دکتر عبدالصفار یتیم پرور", + "en": "Dr. Abdolsafar Yatim Parvar", + "ar": "د. عبد الصفار يتيم پروار" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی عمومی", + "en": "General Surgery Specialist", + "ar": "أخصائي الجراحة العامة" + } + } + ], + "category": { + "id": 2, + "name": { + "fa": "جراحی عمومی", + "en": "General Surgery", + "ar": "الجراحة العامة" + } + }, + "doctor_identify_number": 75123 + }, + { + "id": 11, + "fullname": { + "fa": "دکتر افشین فرهنگ فلاح", + "en": "Dr. Afshin Farhang Falah", + "ar": "د. أفشين فرهنگ فلاح" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی عمومی", + "en": "General Surgery Specialist", + "ar": "أخصائي الجراحة العامة" + } + }, + { + "id": 2, + "name": { + "fa": "فوق تخصص جراحی زیبایی و پلاستیک و سوختگی", + "en": "Plastic, Cosmetic and Burn Surgery Subspecialist", + "ar": "اختصاصي جراحة التجميل والحروق" + } + } + ], + "category": { + "id": 2, + "name": { + "fa": "جراحی عمومی", + "en": "General Surgery", + "ar": "الجراحة العامة" + } + }, + "doctor_identify_number": 98716 + }, + { + "id": 12, + "fullname": { + "fa": "دکتر نجمه گلین مقدم", + "en": "Dr. Najmeh Golin Moghadam", + "ar": "د. نجمۀ گلين مقدم" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی عمومی", + "en": "General Surgery Specialist", + "ar": "أخصائي الجراحة العامة" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ پستان", + "en": "Breast Surgery Fellowship", + "ar": "زمالة جراحة الثدي" + } + } + ], + "category": { + "id": 2, + "name": { + "fa": "جراحی عمومی", + "en": "General Surgery", + "ar": "الجراحة العامة" + } + }, + "doctor_identify_number": 112627 + }, + { + "id": 13, + "fullname": { + "fa": "دکتر ارسلان شیرویه", + "en": "Dr. Arslan Shiroye", + "ar": "د. أرسلان شيرويه" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی عمومی", + "en": "General Surgery Specialist", + "ar": "أخصائي الجراحة العامة" + } + } + ], + "category": { + "id": 2, + "name": { + "fa": "جراحی عمومی", + "en": "General Surgery", + "ar": "الجراحة العامة" + } + }, + "doctor_identify_number": 126998 + }, + { + "id": 14, + "fullname": { + "fa": "دکتر حمیدرضا وفائی", + "en": "Dr. Hamid Reza Vafaei", + "ar": "د. حميد رضا وفائي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراح قلب و عروق", + "en": "Cardiovascular Surgeon", + "ar": "جراح القلب والأوعية الدموية" + } + } + ], + "category": { + "id": 3, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology & Vascular", + "ar": "القلب والأوعية الدموية" + } + }, + "doctor_identify_number": 76411 + }, + { + "id": 15, + "fullname": { + "fa": "دکتر قاسم فغان زاده گنجی", + "en": "Dr. Ghasem Faghan Zadeh Ganji", + "ar": "د. قاسم فغان زاده گنجی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی قلب و عروق", + "en": "Cardiovascular Surgeon", + "ar": "جراح القلب والأوعية الدموية" + } + } + ], + "category": { + "id": 3, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology & Vascular", + "ar": "القلب والأوعية الدموية" + } + }, + "doctor_identify_number": 97634 + }, + { + "id": 16, + "fullname": { + "fa": "دکتر سیروس اردلانی", + "en": "Dr. Sirus Ardalani", + "ar": "د. سيروس اردلاني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح قلب و عروق", + "en": "Cardiologist & Cardiovascular Surgeon", + "ar": "أخصائي وجراح القلب والأوعية الدموية" + } + } + ], + "category": { + "id": 3, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology & Vascular", + "ar": "القلب والأوعية الدموية" + } + }, + "doctor_identify_number": 30849 + }, + { + "id": 17, + "fullname": { + "fa": "دکتر فاطمه توحید", + "en": "Dr. Fatemeh Towhid", + "ar": "د. فاطمه توحيد" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 15835 + }, + { + "id": 18, + "fullname": { + "fa": "دکتر ماریا کربلایی زاده", + "en": "Dr. Maria Karbalaei Zadeh", + "ar": "د. ماريا كربلائي زاده" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 55421 + }, + { + "id": 19, + "fullname": { + "fa": "دکتر حبیبه رازی", + "en": "Dr. Habibeh Razi", + "ar": "د. حبيبه رازي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 57221 + }, + { + "id": 20, + "fullname": { + "fa": "دکتر فرشته یزدانی", + "en": "Dr. Fereshteh Yazdani", + "ar": "د. فرشته يزداني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص زنان و زایمان", + "en": "Gynecologist", + "ar": "أخصائي النساء والتوليد" + } + }, + { + "id": 2, + "name": { + "fa": "فوق تخصص جراحی های کانسر زنان", + "en": "Gynecologic Cancer Surgery Subspecialist", + "ar": "اختصاصي جراحة سرطانات النساء" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 97997 + }, + { + "id": 21, + "fullname": { + "fa": "دکتر لیلا محمد داودی", + "en": "Dr. Leila Mohammad Davoodi", + "ar": "د. ليلا محمد داودي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 61708 + }, + { + "id": 22, + "fullname": { + "fa": "دکتر مرضیه یزدانی", + "en": "Dr. Marzieh Yazdani", + "ar": "د. مرضيه يزداني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص زنان و زایمان", + "en": "Gynecologist", + "ar": "أخصائي النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 111191 + }, + { + "id": 23, + "fullname": { + "fa": "دکتر صدیقه احمدیان", + "en": "Dr. Sediqe Ahmadian", + "ar": "د. صديقه احمديان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 45859 + }, + { + "id": 24, + "fullname": { + "fa": "دکتر محبوبه رمضانی", + "en": "Dr. Mahbubeh Ramazani", + "ar": "د. محبوبه رمضاني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص زنان و زایمان", + "en": "Gynecologist", + "ar": "أخصائي النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 29126 + }, + { + "id": 25, + "fullname": { + "fa": "دکتر فروزان عسگریان", + "en": "Dr. Foroozan Asgarian", + "ar": "د. فروزان عسگريان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 39169 + }, + { + "id": 26, + "fullname": { + "fa": "دکتر آتوسا معنوی", + "en": "Dr. Atoosa Ma’navi", + "ar": "د. آتوسا معنوي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 38201 + }, + { + "id": 27, + "fullname": { + "fa": "دکتر رویا زنجانی", + "en": "Dr. Roya Zanjani", + "ar": "د. رويا زنجاني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 29864 + }, + { + "id": 28, + "fullname": { + "fa": "دکتر سارا دانشور", + "en": "Dr. Sara Danshvar", + "ar": "د. سارا دانشور" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 55563 + }, + { + "id": 29, + "fullname": { + "fa": "دکتر رمضان بروان", + "en": "Dr. Ramazan Brown", + "ar": "د. رمضان بروان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 20099 + }, + { + "id": 30, + "fullname": { + "fa": "دکتر مائده رحمان زاده", + "en": "Dr. Maedeh Rahmanzadeh", + "ar": "د. مائده رحمان زاده" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 179507 + }, + { + "id": 31, + "fullname": { + "fa": "دکتر منوچهر مجد", + "en": "Dr. Manouchehr Majd", + "ar": "د. منوچهر مجد" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 7067 + }, + { + "id": 32, + "fullname": { + "fa": "دکتر عطیه چاله کانی", + "en": "Dr. Atiyeh Chalehkani", + "ar": "د. عطیه چاله کانی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 120535 + }, + { + "id": 33, + "fullname": { + "fa": "دکتر تکتم صادقی", + "en": "Dr. Takhtam Sadeghi", + "ar": "د. تکتم صادقی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 103999 + }, + { + "id": 34, + "fullname": { + "fa": "دکتر زهرا ملکی دلارستاقی", + "en": "Dr. Zahra Maleki Delarestaghi", + "ar": "د. زهرا ملکی دلارستاقی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 155507 + }, + { + "id": 35, + "fullname": { + "fa": "دکتر زهره باطبی", + "en": "Dr. Zahra Batabi", + "ar": "د. زهره باطبی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 116847 + }, + { + "id": 36, + "fullname": { + "fa": "دکتر شهرزاد جوان", + "en": "Dr. Shahrzad Javan", + "ar": "د. شهرزاد جوان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 44176 + }, + { + "id": 37, + "fullname": { + "fa": "دکتر مونا تقوی پور", + "en": "Dr. Mona Taghvipoor", + "ar": "د. مونا تقوی پور" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 118803 + }, + { + "id": 38, + "fullname": { + "fa": "دکتر پرند قشلاقی", + "en": "Dr. Parand Gheshlaghi", + "ar": "د. پرند قشلاقی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "فوق تخصص لاپاروسکوپی زنان", + "en": "Female Laparoscopy Specialist", + "ar": "أخصائي المناظير النسائية" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 45859 + }, + { + "id": 39, + "fullname": { + "fa": "دکتر عاطفه باطبی", + "en": "Dr. Atefeh Batabi", + "ar": "د. عاطفه باطبی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ بیماری های طب مادر و جنین", + "en": "Maternal-Fetal Medicine Fellowship", + "ar": "زمالة طب الأم والجنين" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 120501 + }, + { + "id": 40, + "fullname": { + "fa": "دکتر سارا علیزاده گرنا", + "en": "Dr. Sara Alizadeh Garna", + "ar": "د. سارا علیزاده گرنا" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح زنان و زایمان", + "en": "Obstetrician & Gynecologist", + "ar": "أخصائي وجراح النساء والتوليد" + } + } + ], + "category": { + "id": 4, + "name": { + "fa": "زنان و زایمان", + "en": "Gynecology & Obstetrics", + "ar": "النساء والتوليد" + } + }, + "doctor_identify_number": 133096 + }, + { + "id": 41, + "fullname": { + "fa": "دکتر ابراهیم عاشقی", + "en": "Dr. Ebrahim Asheghi", + "ar": "د. ابراهیم عاشقی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "جراحی مغز و اعصاب", + "en": "Neurosurgery", + "ar": "جراحة الأعصاب" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "مغز و اعصاب", + "en": "Neurology & Neurosurgery", + "ar": "طب وجراحة الأعصاب" + } + }, + "doctor_identify_number": 128718 + }, + { + "id": 42, + "fullname": { + "fa": "دکتر مهدی ابوالفضلی", + "en": "Dr. Mehdi Abolfazli", + "ar": "د. مهدی ابوالفضلی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "جراحی مغز و اعصاب", + "en": "Neurosurgery", + "ar": "جراحة الأعصاب" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "مغز و اعصاب", + "en": "Neurology & Neurosurgery", + "ar": "طب وجراحة الأعصاب" + } + }, + "doctor_identify_number": 137502 + }, + { + "id": 43, + "fullname": { + "fa": "دکتر امیرحسین زهره وند", + "en": "Dr. Amirhossein Zohrevand", + "ar": "د. امیرحسین زهره وند" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی مغز و اعصاب", + "en": "Neurosurgery Specialist", + "ar": "أخصائي جراحة الأعصاب" + } + }, + { + "id": 2, + "name": { + "fa": "فوق تخصص ستون فقرات", + "en": "Spinal Surgery Fellowship", + "ar": "زمالة جراحة العمود الفقري" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "مغز و اعصاب", + "en": "Neurology & Neurosurgery", + "ar": "طب وجراحة الأعصاب" + } + }, + "doctor_identify_number": 77678 + }, + { + "id": 44, + "fullname": { + "fa": "دکتر محمدرضا دهشیری", + "en": "Dr. Mohammadreza Dehshiri", + "ar": "د. محمدرضا دهشیری" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص جراحی مغز و اعصاب", + "en": "Neurosurgery Specialist", + "ar": "أخصائي جراحة الأعصاب" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "مغز و اعصاب", + "en": "Neurology & Neurosurgery", + "ar": "طب وجراحة الأعصاب" + } + }, + "doctor_identify_number": 24870 + }, + { + "id": 45, + "fullname": { + "fa": "دکتر صفورا صالحی", + "en": "Dr. Safoora Salehi", + "ar": "د. صفورا صالحی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 77018 + }, + { + "id": 46, + "fullname": { + "fa": "دکتر حسام الدین گردان", + "en": "Dr. Hesam Gordan", + "ar": "د. حسام الدین گردان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 152735 + }, + { + "id": 47, + "fullname": { + "fa": "دکتر حسین دباغیان", + "en": "Dr. Hossein Dabbaghian", + "ar": "د. حسین دباغیان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 102835 + }, + { + "id": 48, + "fullname": { + "fa": "دکتر مجید سلیمان نژاد", + "en": "Dr. Majid Soleimannejad", + "ar": "د. مجید سلیمان نژاد" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 57454 + }, + { + "id": 49, + "fullname": { + "fa": "دکتر مهسا نورانی", + "en": "Dr. Mahsa Noorani", + "ar": "د. مهسا نورانی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 142000 + }, + { + "id": 50, + "fullname": { + "fa": "دکتر سید فرزاد جلالی", + "en": "Dr. Seyed Farzad Jalali", + "ar": "د. سید فرزاد جلالی" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 29665 + }, + { + "id": 51, + "fullname": { + "fa": "دکتر علی اکبر احمدی آسور", + "en": "Dr. Aliakbar Ahmadi Asur", + "ar": "د. علي أكبر أحمدي آسور" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 109245 + }, + { + "id": 52, + "fullname": { + "fa": "دکتر حمشید عابدی لفورکی", + "en": "Dr. Hamshid Abedi Loforki", + "ar": "د. حمشيد عبدي لفوركي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 141245 + }, + { + "id": 53, + "fullname": { + "fa": "دکتر لاله فرزادی نیاکی", + "en": "Dr. Laleh Farzadi Niaki", + "ar": "د. لاله فرزادي نياكي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 108998 + }, + { + "id": 54, + "fullname": { + "fa": "دکتر مازیار رضوانی", + "en": "Dr. Maziar Rezvani", + "ar": "د. مازيار رضواني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ اینترونشن قلب و عروق", + "en": "Interventional Cardiology Fellowship", + "ar": "زمالة القسطرة القلبية التداخلية" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 104370 + }, + { + "id": 55, + "fullname": { + "fa": "دکتر مهرداد ساروی", + "en": "Dr. Mehrdad Saravi", + "ar": "د. مهرداد ساروي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص قلب و عروق", + "en": "Cardiologist", + "ar": "أخصائي القلب والأوعية الدموية" + } + }, + { + "id": 2, + "name": { + "fa": "فلوشیپ الکتروفیزیولوژی بالینی قلب", + "en": "Clinical Cardiac Electrophysiology Fellowship", + "ar": "زمالة الفيزيولوجيا الكهربائية السريرية للقلب" + } + } + ], + "category": { + "id": 5, + "name": { + "fa": "قلب و عروق", + "en": "Cardiology", + "ar": "أمراض القلب" + } + }, + "doctor_identify_number": 38170 + }, + { + "id": 56, + "fullname": { + "fa": "دکتر آرش حیدرنژاد", + "en": "Dr. Arash Heydarnjad", + "ar": "د. آرش حیدرنژاد" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "فوق تخصص گوارش", + "en": "Gastroenterology Fellowship", + "ar": "زمالة أمراض الجهاز الهضمي" + } + } + ], + "category": { + "id": 6, + "name": { + "fa": "گوارش", + "en": "Gastroenterology", + "ar": "أمراض الجهاز الهضمي" + } + }, + "doctor_identify_number": 92001 + }, + { + "id": 57, + "fullname": { + "fa": "دکتر هاشم موسوی", + "en": "Dr. Hashem Mousavi", + "ar": "د. هاشم موسوي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "فوق تخصص گوارش", + "en": "Gastroenterology Fellowship", + "ar": "زمالة أمراض الجهاز الهضمي" + } + } + ], + "category": { + "id": 6, + "name": { + "fa": "گوارش", + "en": "Gastroenterology", + "ar": "أمراض الجهاز الهضمي" + } + }, + "doctor_identify_number": 106166 + }, + { + "id": 58, + "fullname": { + "fa": "دکتر علی اکبر حبیبی", + "en": "Dr. Aliakbar Habibi", + "ar": "د. علي أكبر حبيبي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص کلیه و مجاری ادراری", + "en": "Nephrologist / Urologist", + "ar": "أخصائي الكلى والمسالك البولية" + } + } + ], + "category": { + "id": 7, + "name": { + "fa": "کلیه و مجاری ادراری", + "en": "Nephrology & Urology", + "ar": "أمراض الكلى والمسالك البولية" + } + }, + "doctor_identify_number": 43742 + }, + { + "id": 59, + "fullname": { + "fa": "دکتر حامد یزدان نجات", + "en": "Dr. Hamed Yazdan Nejat", + "ar": "د. حامد یزدان نجات" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص و جراح اورولوژی", + "en": "Urology Specialist & Surgeon", + "ar": "أخصائي وجراح المسالك البولية" + } + }, + { + "id": 2, + "name": { + "fa": "فوق تخصص جراحی های داخلی مجاری ادراری تناسلی", + "en": "Fellowship in Internal Genitourinary Surgery", + "ar": "زمالة جراحة المسالك البولية التناسلية الداخلية" + } + }, + { + "id": 3, + "name": { + "fa": "عمل های سنگ کلیه ، مثانه ، مجاری ادراری", + "en": "Kidney, Bladder & Urinary Tract Surgeries", + "ar": "عمليات الكلى والمثانة والمسالك البولية" + } + }, + { + "id": 4, + "name": { + "fa": "هرنی ، واریکوسل ، اختلالات جنسی", + "en": "Hernia, Varicocele, Sexual Disorders", + "ar": "الفتق، دوالي الخصية، اضطرابات جنسية" + } + } + ], + "category": { + "id": 7, + "name": { + "fa": "کلیه و مجاری ادراری", + "en": "Nephrology & Urology", + "ar": "أمراض الكلى والمسالك البولية" + } + }, + "doctor_identify_number": 92515 + }, + { + "id": 60, + "fullname": { + "fa": "دکتر حامد عباسی", + "en": "Dr. Hamed Abbasi", + "ar": "د. حامد عباسي" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص کلیه و مجاری ادراری", + "en": "Nephrologist / Urologist", + "ar": "أخصائي الكلى والمسالك البولية" + } + } + ], + "category": { + "id": 7, + "name": { + "fa": "کلیه و مجاری ادراری", + "en": "Nephrology & Urology", + "ar": "أمراض الكلى والمسالك البولية" + } + }, + "doctor_identify_number": 95667 + }, + { + "id": 61, + "fullname": { + "fa": "دکتر مرتضی اسکیان", + "en": "Dr. Morteza Askian", + "ar": "د. مرتضى اسكيان" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص کلیه و مجاری ادراری", + "en": "Nephrologist / Urologist", + "ar": "أخصائي الكلى والمسالك البولية" + } + } + ], + "category": { + "id": 7, + "name": { + "fa": "کلیه و مجاری ادراری", + "en": "Nephrology & Urology", + "ar": "أمراض الكلى والمسالك البولية" + } + }, + "doctor_identify_number": 28869 + }, + { + "id": 62, + "fullname": { + "fa": "دکتر فرشته خیاط کاشانی", + "en": "Dr. Fereshteh Khayyat Kashani", + "ar": "د. فرشته خياط كاشاني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص گوش و حلق و بینی", + "en": "ENT Specialist", + "ar": "أخصائي الأنف والأذن والحنجرة" + } + } + ], + "category": { + "id": 8, + "name": { + "fa": "گوش و حلق و بینی", + "en": "ENT", + "ar": "الأنف والأذن والحنجرة" + } + }, + "doctor_identify_number": 40657 + }, + { + "id": 63, + "fullname": { + "fa": "دکتر محمد ولی زاده کانی", + "en": "Dr. Mohammad Valizadeh Kani", + "ar": "د. محمد ولي زاده كاني" + }, + "image": "#", + "specialties": [ + { + "id": 1, + "name": { + "fa": "متخصص گوش و حلق و بینی", + "en": "ENT Specialist", + "ar": "أخصائي الأنف والأذن والحنجرة" + } + } + ], + "category": { + "id": 8, + "name": { + "fa": "گوش و حلق و بینی", + "en": "ENT", + "ar": "الأنف والأذن والحنجرة" + } + }, + "doctor_identify_number": 153624 + } + ], + "expertise": [ + { + "id": 1, + "name": { + "fa": "گوارش", + "en": "", + "ar": "" + } + }, + { + "id": 2, + "name": { + "fa": "زنان و زایمان", + "en": "", + "ar": "" + } + }, + { + "id": 3, + "name": { + "fa": "قلب و عروق", + "en": "", + "ar": "" + } + }, + { + "id": 4, + "name": { + "fa": "جراحی عمومی", + "en": "", + "ar": "" + } + }, + { + "id": 5, + "name": { + "fa": "ارتوپدی", + "en": "", + "ar": "" + } + }, + { + "id": 6, + "name": { + "fa": "مغز و اعصاب", + "en": "", + "ar": "" + } + }, + { + "id": 7, + "name": { + "fa": "گوش و حلق و بینی", + "en": "", + "ar": "" + } + } + ], + "medical_packages": [ + { + "id": 1, + "slug": "digestive-package", + "svg": "DigestiveSvg", + "title": { + "fa": "پکیج گوارش", + "en": "Digestive Health Package", + "ar": "باقة الجهاز الهضمي" + }, + "content": {}, + "is_parent": true, + "sub_packages": [ + { + "id": 1, + "slug": "upper-endoscopy", + "svg": "", + "title": { + "fa": "آندوسکوپی فوقانی", + "en": "Upper Endoscopy", + "ar": "تنظير علوي" + }, + "thumbnail": "Picture1.jpg", + "description": { + "fa": "

آندوسکوپی فوقانی (Upper endoscopy)، یک روش تصویربرداری تشخیصی و درمانی است که برای بررسی و تصویربرداری از بخش فوقانی گوارش (مری، معده) استفاده می‌شود. این روش با استفاده از یک دستگاه به نام آندوسکوپ که یک لوله انعطاف‌پذیر با یک دوربین در انتهای آن است، انجام می‌شود.

با استفاده از آندوسکوپی فوقانی و آندوسکوپی معده، پزشکان قادرند تا مستقیماً به داخل مری، معده و دوازدهه نگاه کنند و تغییرات و عوارضی را که ممکن است در این بخش‌ها رخ داده باشد، مشاهده کنند. همچنین، این روش امکان برداشت نمونه‌برداری (بیوپسی) از بافت‌ها و اجرای تشخیص‌های دقیقتر مانند برداشتن نمونه‌های جراحی (عملکرد بی‌خون) را نیز فراهم می‌کند.

انجام عمل آندوسکوپی عموماً به مدت 5 تا 15 دقیقه زمان برده و با توجه به این‌که می‌بایست اثر داروی آرامبخش برطرف گردد، مدت ریکاوری بیمار 30 تا 60 دقیقه خواهد بود.

", + "en": "

Upper endoscopy is a diagnostic and therapeutic imaging procedure used to examine and capture images of the upper gastrointestinal tract (esophagus, stomach). This procedure is performed using an endoscope, a flexible tube with a camera at its tip.

Using upper endoscopy, physicians can directly view the esophagus, stomach, and duodenum to detect any changes or abnormalities. This method also allows tissue sampling (biopsy) and performing precise procedures such as bloodless surgical sample removal.

The procedure usually takes 5 to 15 minutes, and recovery time for the patient is 30 to 60 minutes to allow the sedative effects to wear off.

", + "ar": "

تنظير الجهاز الهضمي العلوي هو إجراء تصوير تشخيصي وعلاجي يُستخدم لفحص وتصوير الجزء العلوي من الجهاز الهضمي (المريء، المعدة). يتم إجراء هذا الإجراء باستخدام منظار، وهو أنبوب مرن يحتوي على كاميرا في الطرف.

باستخدام التنظير العلوي، يمكن للأطباء رؤية المريء والمعدة والاثني عشر مباشرةً لاكتشاف أي تغييرات أو اضطرابات. كما يتيح هذا الإجراء أخذ عينات من الأنسجة (خزعة) وإجراء إجراءات دقيقة مثل إزالة العينات الجراحية بدون دم.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 350 – 600 دلار آمریکا

", + "en": "

Package price: $350 – $600 USD

", + "ar": "

سعر الباقة: 350 – 600 دولار أمريكي

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 2, + "slug": "full-colonoscopy", + "svg": "", + "title": { + "fa": "کولونوسکوپی کامل", + "en": "Full Colonoscopy", + "ar": "تنظير القولون الكامل" + }, + "thumbnail": "Picture2.jpg", + "description": { + "fa": "

کولونوسکوپی (Colonoscopy) یک روش تشخیصی است که برای بررسی کولون (بخش اصلی روده بزرگ) و رکتوم (راست‌روده) استفاده می‌شود. کولونوسکوپی ممکن است کمی استرس‌زا باشد؛ اما آگاهی از مراحل انجام این تست و نقش آن در غربالگری بیماری‌های مهم از جمله سرطان روده می‌تواند به شما در تصمیم‌گیری درست کمک کند.

روده بزرگ از بخش‌های مختلفی تشکیل شده است که عبارت‌اند از:

روده بزرگ نقش مهمی در جذب آب و الکترولیت‌ها، تشکیل مدفوع و دفع مواد زائد دارد. کولونوسکوپی برای تشخیص تغییرات غیرطبیعی کولون و رکتوم انجام می‌شود. این تغییرات می‌توانند شامل التهاب، پولیپ یا توده‌های سرطانی باشند.

عمل کولونوسکوپی معمولاً ۲۰ تا ۴۵ دقیقه طول می‌کشد و به‌دلیل نیاز به رفع اثر داروی آرام‌بخش، مدت زمان ریکاوری بیمار بین ۳۰ تا ۶۰ دقیقه خواهد بود.

", + "en": "

Colonoscopy is a diagnostic procedure used to examine the colon (the main part of the large intestine) and the rectum. Although the procedure may seem stressful, understanding its steps and its importance in screening for serious conditions such as colorectal cancer can greatly help with decision-making.

The large intestine consists of several parts, including:

The large intestine plays a key role in absorbing water and electrolytes, forming stool, and eliminating waste. Colonoscopy is performed to detect abnormalities in the colon and rectum such as inflammation, polyps, or cancerous masses.

The procedure typically takes 20–45 minutes, and due to the need for sedative recovery, the total recovery time is usually around 30–60 minutes.

", + "ar": "

تنظير القولون هو إجراء تشخيصي يُستخدم لفحص القولون (الجزء الرئيسي من الأمعاء الغليظة) والمستقيم. قد يبدو هذا الفحص مقلقاً بعض الشيء، ولكن فهم خطواته ودوره في الكشف المبكر عن الأمراض المهمة مثل سرطان القولون يساعد في اتخاذ القرار الصحيح.

يتكون الأمعاء الغليظة من عدة أجزاء، منها:

يلعب القولون دوراً مهماً في امتصاص الماء والأملاح، تشكيل البراز، والتخلص من الفضلات. يُجرى تنظير القولون لتشخيص التغيرات غير الطبيعية في القولون والمستقيم مثل الالتهابات، الزوائد اللحمية أو الأورام السرطانية.

تستغرق عملية تنظير القولون عادةً بين 20 و45 دقيقة، ونظراً لاستخدام المهدئات، يحتاج المريض إلى فترة تعافٍ تتراوح بين 30 و60 دقيقة حتى يزول تأثير الدواء.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 450 – 800 دلار آمریکا

(برداشت پولیپ یا نمونه‌برداری ممکن است هزینه جدا داشته باشد)

", + "en": "

Package Price: 450 – 800 USD

(Polyp removal or biopsy may incur additional charges)

", + "ar": "

سعر الباقة: 450 – 800 دولار أمريكي

(قد يتم احتساب رسوم إضافية لإزالة الزوائد أو أخذ الخزعة)

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 3, + "slug": "full-colonoscopy", + "svg": "", + "title": { + "fa": "آندوسکوپی و کولونوسکوپی هم‌زمان", + "en": "simultaneous-endoscopy-and-colonoscopy", + "ar": "التنظير والتنظير القولوني في نفس الوقت" + }, + "content": { + "fa": "", + "en": "", + "ar": "" + } + } + ] + }, + { + "id": 2, + "slug": "hysterectomy", + "svg": "HysterectomySvg", + "is_parent": true, + + "title": { + "fa": "پکیج هیسترکتومی", + "en": "Hysterectomy Package", + "ar": "باقة استئصال الرحم" + }, + "content": {}, + "sub_packages": [ + { + "id": 1, + "slug": "uterine-cervical-cancer-surgery", + "svg": "", + "title": { + "fa": "جراحی سرطان رحم یا دهانه رحم", + "en": "Uterine or Cervical Cancer Surgery", + "ar": "جراحة سرطان الرحم أو عنق الرحم" + }, + "thumbnail": "Picture3.jpg", + "description": { + "fa": "

هیسترکتومی نوعی عمل جراحی است که برای درمان سرطان دهانه رحم در مراحل اولیه استفاده می‌شود. در هیسترکتومی، رحم و دهانه رحم از بدن خارج می‌شوند. هدف این جراحی خارج کردن بافت سرطانی است. پس از جراحی برداشتن رحم، دیگر دوره‌های قاعدگی را نخواهید داشت و امکان بارداری وجود ندارد. هیسترکتومی برای بیماری‌های غیرسرطانی معمولاً فقط پس از شکست سایر روش‌های درمانی انجام می‌شود.


روش‌های جراحی و مدت بستری:

نام روشمدت زمان جراحیمدت زمان بستری
هیسترکتومی باز۱.۵ تا ۳ ساعت۳ تا ۴ شب
هیسترکتومی لاپاراسکوپیک۱ تا ۲ ساعت۱ تا ۲ شب
هیسترکتومی واژینال۱ تا ۲ ساعت۱ تا ۲ شب

ویزیت‌های پزشک بعد از عمل:

تمرکز اصلی ویزیتنوع ویزیتزمان تقریبی
بررسی علائم حیاتی، پانسمان، درد، دفع ادرار و حرکات رودهویزیت روزانه توسط جراح یا دستیارروز ۱ تا ۲ بعد از عمل
ارزیابی کامل، بررسی عدم وجود خونریزی یا تب، آموزش مراقبت در منزلویزیت نهایی توسط جراح اصلی۲ تا ۴ روز (قبل از ترخیص)
", + "en": "

Hysterectomy is a surgical procedure used to treat early-stage cervical cancer. During this surgery, the uterus and cervix are removed. After this operation, menstrual periods will stop permanently and pregnancy will no longer be possible. For non-cancerous conditions, hysterectomy is usually considered only after other treatments fail.


Surgical Approaches & Hospital Stay:

MethodSurgery DurationHospital Stay
Open hysterectomy1.5 to 3 hours3 to 4 nights
Laparoscopic hysterectomy1 to 2 hours1 to 2 nights
Vaginal hysterectomy1 to 2 hours1 to 2 nights

Post-Op Doctor Visits:

Main FocusVisit TypeApprox Timing
Vital signs, incision check, pain control, bowel & urinary functionDaily visit by surgeon or assistantPost-op day 1–2
Full medical review, ensure no bleeding or fever, home care instructionsFinal visit by main surgeonDay 2–4 before discharge
", + "ar": "

استئصال الرحم هو إجراء جراحي يُستخدم لعلاج سرطان عنق الرحم في مراحله المبكرة. يتم خلال العملية إزالة الرحم وعنق الرحم بالكامل. بعد العملية تتوقف الدورة الشهرية بشكل دائم ولا يمكن حدوث الحمل. يُستخدم هذا الإجراء في الحالات غير السرطانية فقط بعد فشل العلاجات الأخرى.


طرق الجراحة ومدة الإقامة:

الطريقةمدة الجراحةمدة الإقامة
استئصال الرحم المفتوح1.5 إلى 3 ساعات3 إلى 4 ليالٍ
استئصال الرحم بالمنظار1 إلى 2 ساعة1 إلى 2 ليلة
استئصال الرحم المهبلي1 إلى 2 ساعة1 إلى 2 ليلة

زيارات الأطباء بعد العملية:

التركيز الأساسينوع الزيارةالتوقيت التقريبي
فحص العلامات الحيوية، الجرح، الألم، وظيفة الأمعاء والتبولزيارة يومية من الجراح أو المساعداليوم ١–٢ بعد العملية
تقييم شامل، التأكد من عدم وجود نزيف أو حرارة، تعليمات الرعاية المنزليةالزيارة النهائية من الجراح الرئيسياليوم ٢–٤ قبل الخروج
" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": " 3,800 – 6,000 دلار آمریکا
(بسته به مرحله بیماری و روش جراحی)

", + "en": " USD 3,800 – 6,000
(Depending on cancer stage and surgical approach)

", + "ar": " 3,800 – 6,000 دولار أمريكي
(حسب مرحلة المرض وطريقة الجراحة)

" + } + }, + { + "id": 2, + "slug": "ovarian-cancer-surgery", + "svg": "", + "title": { + "fa": "جراحی سرطان تخمدان", + "en": "Ovarian Cancer Surgery", + "ar": "جراحة سرطان المبايض" + }, + "thumbnail": "Picture4.jpg", + "description": { + "fa": "

این جراحی شامل برداشتن تخمدان‌ها و لوله‌های فالوپ است. اگر هر دو تخمدان و هر دو لوله فالوپ برداشته شوند، سالپنگو-اوفورکتومی دوطرفه نامیده می‌شود. اگر بیمار بخواهد در آینده باردار شود و سرطان در مراحل اولیه باشد، در صورتی که سرطان فقط در یک تخمدان باشد، ممکن است تنها یک تخمدان و یک لوله فالوپ برداشته شود.

جراحی از اصلی‌ترین درمان‌های سرطان تخمدان، سرطان لوله فالوپ و سرطان صفاقی اولیه است. جراحی همچنین به پزشکان برای تعیین نوع سرطان کمک می‌کند.

مدت زمان جراحی و بستری

نام روشمدت زمان جراحیمدت زمان بستری
هیسترکتومی باز۱.۵ تا ۳ ساعت۳ تا ۴ شب
هیسترکتومی لاپاراسکوپیک۱ تا ۲ ساعت۱ تا ۲ شب
هیسترکتومی واژینال۱ تا ۲ ساعت۱ تا ۲ شب

ویزیت پزشکان بعد از جراحی

تمرکز اصلی ویزیتنوع ویزیتزمان تقریبی پس از عمل
بررسی علائم حیاتی، وضعیت زخم، کنترل درد، بررسی حرکات روده و دفع ادرارویزیت روزانه توسط جراح یا دستیاراولین ویزیت (روز ۱ یا ۲)
بررسی کامل وضعیت بیمار، اطمینان از عدم تب یا خونریزی غیرطبیعی، توضیح مراقبت در منزلویزیت نهایی توسط جراح اصلیویزیت قبل از ترخیص (روز ۲ تا ۴)
", + + "en": "

This surgery involves the removal of the ovaries and fallopian tubes. If both ovaries and both fallopian tubes are removed, it is called bilateral salpingo-oophorectomy. If the patient wishes to preserve fertility and the cancer is in its early stages, and only one ovary is affected, only one ovary and one fallopian tube may be removed.

Surgery is one of the main treatments for ovarian cancer, fallopian tube cancer, and primary peritoneal cancer. It also helps doctors determine the exact type and spread of the cancer.

Surgery Duration & Hospital Stay

ProcedureSurgery DurationHospital Stay
Open Hysterectomy1.5 – 3 hours3 – 4 nights
Laparoscopic Hysterectomy1 – 2 hours1 – 2 nights
Vaginal Hysterectomy1 – 2 hours1 – 2 nights

Postoperative Doctor Visits

Main FocusVisit TypeApproximate Timing
Check vital signs, wound condition, pain control, bowel movement and urinationDaily visit by surgeon or assistantFirst visit (Day 1–2)
Full patient evaluation, confirm no fever or abnormal bleeding, provide home care instructionsFinal visit by primary surgeonBefore discharge (Day 2–4)
", + + "ar": "

تشمل هذه الجراحة إزالة المبيضين وقناتي فالوب. إذا تمت إزالة كلا المبيضين وقناتي فالوب، فإنها تُسمى استئصال البوق والمبيض الثنائي. في حال كانت المريضة ترغب في الحمل مستقبلاً وكان السرطان مبكرًا ومحصورًا في مبيض واحد، فقد يتم إزالة مبيض واحد وقناة فالوب واحدة فقط.

الجراحة هي أحد العلاجات الأساسية لسرطان المبيض وسرطان قناة فالوب وسرطان الصفاق الأولي. كما تساعد الجراحة الأطباء على تحديد نوع السرطان وانتشاره.

مدة الجراحة ومدة الإقامة في المستشفى

نوع العمليةمدة الجراحةمدة الإقامة
استئصال الرحم المفتوح١.٥ – ٣ ساعات٣ – ٤ ليالٍ
استئصال الرحم بالمنظار١ – ٢ ساعات١ – ٢ ليالٍ
استئصال الرحم المهبلي١ – ٢ ساعات١ – ٢ ليالٍ

زيارات الأطباء بعد الجراحة

تركيز الزيارةنوع الزيارةالوقت التقريبي بعد العملية
فحص العلامات الحيوية، الجرح، الألم، حركة الأمعاء والتبولزيارة يومية من الجراح أو المساعدالزيارة الأولى (اليوم ١–٢)
تقييم شامل للمريضة، التأكد من عدم وجود نزيف أو حرارة، تعليمات الرعاية المنزليةالزيارة النهائية من الجراح الرئيسيقبل الخروج (اليوم ٢–٤)
" + }, + "services": { + "fa": "", + + "en": "", + + "ar": "" + }, + "price": { + "fa": " ۴,۵۰۰ – ۷,۰۰۰ دلار آمریکا
(بسته به وسعت جراحی و شرایط بیمار)

", + "en": " USD 4,500 – 7,000
(Depending on surgical extent and patient condition)

", + "ar": " ٤,٥٠٠ – ٧,٠٠٠ دولار أمريكي
(حسب نطاق الجراحة وحالة المريض)

" + } + } + ] + }, + { + "id": 3, + "slug": "cardiac", + "svg": "CardiacSvg", + "is_parent": true, + + "title": { + "fa": "پکیج قلب", + "en": "Cardiac Health Package", + "ar": "باقة القلب" + }, + "content": {}, + "sub_packages": [ + { + "id": 1, + "slug": "cardiac-angiography", + "svg": "", + "title": { + "fa": "آنژیوگرافی قلب", + "en": "Cardiac Angiography", + "ar": "تصوير الأوعية الدموية للقلب" + }, + "thumbnail": "Picture5.webp", + "description": { + "fa": "

عمل آنژیو قلب، یک روش تصویربرداری پزشکی است که برای بررسی عروق خونی تغذیه‌کننده ماهیچه قلب، موسوم به عروق کرونری به کار می‌رود. در این روش با استفاده از اشعه ایکس، از این رگ‌های قلبی تصویربرداری انجام می‌شود تا میزان تنگی یا انسداد احتمالی در این عروق حیاتی مشخص گردد.

عمل آنژیوی قلب جزئی از فرایند کاتتریزاسیون قلبی محسوب می‌شود که در آن از یک یا چند لوله باریک و انعطاف‌پذیر به نام کاتتر استفاده می‌شود. این کاتترها از طریق یک سوراخ کوچک در دست یا ناحیه رانی به داخل عروق خونی اصلی بدن هدایت شده و تا محل عروق کرونری قلب پیش می‌روند.

آنژیوگرافی صرفاً تشخیصی معمولاً بین ۳۰ تا ۶۰ دقیقه زمان می‌برد و اغلب بدون بستری یا با بستری کوتاه‌مدت (نصف روز) انجام می‌شود.

", + "en": "

Coronary angiography is a medical imaging procedure used to examine the coronary arteries that supply blood to the heart muscle. Using X-ray imaging, this procedure helps detect any narrowing or blockage within these vital vessels.

Cardiac angiography is part of a broader procedure called cardiac catheterization, in which one or more thin, flexible tubes called catheters are inserted through a small puncture in the wrist or groin and guided through the blood vessels to reach the coronary arteries.

A diagnostic angiography typically takes about 30–60 minutes and is usually performed as an outpatient procedure or with short-term hospitalization (half-day).

", + "ar": "

تصوير الأوعية القلبية (قسطرة الشرايين التاجية) هو إجراء طبي تصويري يُستخدم لفحص الشرايين التاجية التي تغذي عضلة القلب. يتم استخدام الأشعة السينية لتصوير هذه الأوعية بهدف الكشف عن أي تضيق أو انسداد محتمل.

يُعد تصوير الأوعية جزءًا من عملية قسطرة القلب، حيث يتم إدخال أنبوب أو عدة أنابيب رفيعة ومرنة تسمى القسطرة عبر ثقب صغير في الرسغ أو منطقة الفخذ، ثم يتم توجيهها عبر الأوعية الدموية إلى الشرايين التاجية.

يستغرق تصوير الأوعية التشخيصي عادةً من 30 إلى 60 دقيقة، وغالبًا ما يُجرى دون حاجة إلى مبيت في المستشفى أو مع مبيت قصير (نصف يوم).

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 900 – 1,300 دلار آمریکا

", + "en": "

Package Price: 900 – 1,300 USD

", + "ar": "

سعر الباقة: 900 – 1,300 دولار أمريكي

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 2, + "slug": "angioplasty-stent", + "svg": "", + "title": { + "fa": "آنژیوپلاستی + استنت‌گذاری (فنر قلب)", + "en": "Angioplasty + Stent Placement", + "ar": "توسيع الشرايين + تركيب دعامة القلب" + }, + "thumbnail": "Picture6.webp", + + "description": { + "fa": "

اگر دچار گرفتگی عروق کرونر شده باشید، بعد از معاینه توسط پزشک متخصص قلب، برای تشخیص علت و همچنین درمان آن، به جراح قلب ارجاع داده می‌شوید. اغلب جراحان قلب برای تشخیص و از بین بردن گرفتگی‌های عروق کرونر، از روش آنژیوپلاستی استفاده می‌کنند.

آنژیوپلاستی یا Angioplasty یک عمل کم تهاجمی برای تشخیص و همچنین درمان گرفتگی‌های عروق کرونر می‌باشد که با پیشرفت علم و فناوری‌های پزشکی، از روش تشخیصی آنژیوگرافی نشات گرفته شده است. به عبارتی آنژیوپلاستی یک زیرشاخه از آنژیوگرافی می‌باشد که اجازه می‌دهد تا علاوه بر تشخیص بیماری‌های قلبی و عروقی، برخی از گرفتگی‌های عروق قلبی نیز درمان شوند.

فرآیند بستری معمولاً شامل مراحل زیر است:

۱. مراحل بستری و آمادگی (قبل از عمل)
۲. مدت زمان انجام عمل (اجرای آنژیوپلاستی)
۳. بخش‌های بستری و مدت زمان اقامت (بعد از عمل)
", + "en": "

If you have coronary artery blockage, after being examined by a cardiologist, you will be referred to a cardiac surgeon for diagnosis and treatment. Most cardiac surgeons use angioplasty to diagnose and treat blocked or narrowed coronary arteries.

Angioplasty is a minimally invasive procedure that allows both diagnosis and treatment of coronary artery blockages. With advances in medical science and technology, angioplasty has evolved from diagnostic angiography. Essentially, angioplasty is a sub-procedure of angiography, enabling physicians to not only detect cardiovascular diseases but also to treat some blockages in the coronary arteries.

The hospitalization process usually includes the following steps:

1. Pre-procedure admission and preparation
2. Procedure duration (angioplasty)
3. Post-procedure care and hospital stay
", + "ar": "

إذا كنت تعاني من انسداد في الشرايين التاجية، بعد الفحص من قبل طبيب القلب، سيتم تحويلك إلى جراح قلب للتشخيص والعلاج. يستخدم معظم جراحي القلب إجراء رأب الأوعية الدموية (Angioplasty) لتشخيص ومعالجة انسداد أو تضيق الشرايين التاجية.

رأب الأوعية الدموية هو إجراء طفيف التوغل يسمح بتشخيص وعلاج انسداد الشرايين التاجية. مع التقدم في العلوم والتقنيات الطبية، تطور رأب الأوعية من تصوير الشرايين التشخيصي. بعبارة أخرى، يعتبر رأب الأوعية فرعاً من تصوير الشرايين، مما يتيح للأطباء اكتشاف أمراض القلب والأوعية الدموية ومعالجة بعض انسدادات الشرايين التاجية.

عادةً ما تتضمن عملية التنويم بالمستشفى المراحل التالية:

1. التنويم والاستعداد قبل العملية
2. مدة إجراء العملية (رأب الأوعية)
3. العناية بعد العملية ومدة الإقامة في المستشفى
" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 3,200 – 4,200 دلار آمریکا
(استنت دوم یا دارویی خاص هزینه جداگانه دارد)

", + "en": "

Package Price: $3,200 – $4,200 USD
(Second stent or special drug-eluting stent may incur additional cost)

", + "ar": "

سعر الباقة: 3,200 – 4,200 دولار أمريكي
(الدعامة الثانية أو دعامة دوائية خاصة قد تكلف تكلفة إضافية)

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 3, + "slug": "cardiac-electrophysiology-test", + "svg": "", + "title": { + "fa": "تست الکتروفیزیولوژی قلب", + "en": "Cardiac Electrophysiology Test", + "ar": "اختبار كهربائية القلب" + }, + "content": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 4, + "slug": "cardiac-ablation", + "svg": "", + "title": { + "fa": "ابلیشن قلبی", + "en": "Cardiac Ablation", + "ar": "استئصال كهربائي للقلب" + }, + "thumbnail": "Picture7.jpg", + "description": { + "fa": "

عمل ابلیشن قلب (که به آن سوزاندن رگ قلب هم می‌گویند)، یک روش درمانی پیشرفته است، که برای درمان اختلالات ریتم قلب (آریتمی‌ها) مورد استفاده قرار می‌گیرد. در این نوع آریتمی‌های قلبی، قسمت‌هایی از بافت قلب به صورت خودبه‌خود، شروع به ایجاد ریتم‌های انقباضی می‌کنند.

برای درمان این نوع آریتمی، در عمل ابلیشن قلب، پزشک متخصص با استفاده از انرژی گرمایی یا سرمایی، زخم‌های بسیار کوچکی در بافت قلب ایجاد می‌کند و نواحی خاصی از قلب را که مسئول ایجاد آریتمی هستند؛ هدف قرار می‌دهد.

هدف اصلی، از بین بردن یا مسدود کردن سیگنال‌های الکتریکی غیرطبیعی در قلب است، که منجر به ضربان نامنظم می‌شوند. ایجاد این زخم‌های کوچک در نواحی مشخص، به مسدود کردن مسیرهای الکتریکی نابه‌هنجار کمک می‌کند و از تولید ریتم‌های نامنظم یا غیرطبیعی توسط قلب، جلوگیری می‌نماید.

این روش کم‌تهاجمی می‌تواند؛ برای طیف وسیعی از آریتمی‌ها، مانند فیبریلاسیون دهلیزی، فلاتر دهلیزی و تاکی‌کاردی‌های مختلف، مورد استفاده قرار گیرد و اغلب می‌تواند؛ جایگزین مناسبی برای مصرف طولانی‌مدت داروهای ضد آریتمی باشد.

مدت زمان بستری پس از ابلیشن قلبی

مدت زمان بستری پس از عمل ابلیشن قلبی معمولاً کوتاه است، اما ممکن است بسته به شرایط بیمار و نوع ابلیشن کمی متفاوت باشد:

  1. بستری اولیه: اکثر بیماران پس از ابلیشن قلبی، یک شب در بیمارستان بستری می‌مانند.
  2. هدف از بستری یک‌شبه: این زمان برای مانیتورینگ دقیق قلب (ECG)، بررسی هرگونه عارضه احتمالی (مانند خونریزی در محل کاتتر یا تپش قلب نامنظم جدید) و اطمینان از پایداری وضعیت بیمار پس از عمل است.
  3. ترخیص: اگر وضعیت بیمار پایدار باشد و هیچ عارضه مهمی مشاهده نشود، معمولاً روز بعد از عمل (بعد از ۲۴ ساعت) ترخیص می‌شود.

بخش‌های درگیر در بستری

  1. بخش ریکاوری یا CCU (بخش مراقبت‌های ویژه قلبی): بلافاصله پس از اتمام عمل، بیمار برای چند ساعت (یا گاهی تا چند روز اگر عوارض خفیفی داشته باشد) به این بخش منتقل می‌شود تا تحت نظر دقیق تیم پزشکی و پرستاری باشد.
  2. بخش جراحی قلب یا بخش داخلی قلب (Cardiac Ward): پس از تثبیت شرایط در ریکاوری، بیمار به بخش عمومی‌تر قلب منتقل می‌شود تا شب را در آنجا سپری کند و برای ترخیص آماده شود.

ویزیت‌های روزانه بیمار پس از عمل ابلیشن قلبی

  1. ویزیت اصلی توسط پزشک متخصص قلب (اینترونشن یا آریتمی‌شناس): پزشکی که عمل ابلیشن را انجام داده است، معمولاً روزانه یک بار (یا طبق برنامه خود) برای بررسی وضعیت کلی، محل ورود کاتتر (کشاله ران یا گردن)، نتایج اولیه نوار قلب (ECG) و تصمیم‌گیری در مورد ترخیص، بیمار را ویزیت می‌کند.
  2. ویزیت‌های تخصصی جانبی (در صورت لزوم): اگر بیمار سابقه یا مشکل دیگری مانند دیابت، فشار خون بالا یا مشکلات کلیوی داشته باشد، ممکن است پزشکان متخصص دیگر (مانند متخصص غدد یا نفرولوژیست) نیز در طول دوره بستری کوتاه شما را ویزیت کنند تا مطمئن شوند آن شرایط تحت کنترل است.
", + "en": "

Cardiac ablation (also known as heart tissue burning) is an advanced therapeutic procedure used to treat heart rhythm disorders (arrhythmias). In these types of arrhythmias, certain areas of the heart tissue spontaneously generate abnormal contraction rhythms.

During cardiac ablation, a specialist creates very small lesions in the heart tissue using heat or cold energy, targeting specific areas responsible for causing the arrhythmia.

The main goal is to eliminate or block abnormal electrical signals in the heart that cause irregular heartbeat. These small lesions help block abnormal electrical pathways and prevent the heart from producing irregular or abnormal rhythms.

This minimally invasive procedure can be used for a wide range of arrhythmias, such as atrial fibrillation, atrial flutter, and various tachycardias, and often serves as a suitable alternative to long-term anti-arrhythmic medications.

Hospitalization duration after cardiac ablation

The hospital stay after cardiac ablation is usually short, but it may vary depending on the patient's condition and type of ablation:

  1. Initial hospitalization: Most patients stay one night in the hospital after cardiac ablation.
  2. Purpose of one-night stay: This period is used for careful heart monitoring (ECG), checking for possible complications (such as bleeding at the catheter site or new irregular heartbeat), and ensuring patient stability after the procedure.
  3. Discharge: If the patient is stable and no significant complications are observed, discharge usually occurs the next day (after 24 hours).

Hospital wards involved

  1. Recovery or CCU (Cardiac Care Unit): Immediately after the procedure, the patient is transferred to this ward for several hours (or sometimes a few days if minor complications occur) under close medical and nursing supervision.
  2. Cardiac surgery or Cardiac Ward: After stabilization in recovery, the patient is moved to the general cardiac ward to spend the night and prepare for discharge.

Daily patient visits after cardiac ablation

  1. Main visit by the cardiologist (Interventionist or Arrhythmia specialist): The doctor who performed the ablation usually visits once a day (or according to their schedule) to check overall condition, catheter entry site (groin or neck), initial ECG results, and make discharge decisions.
  2. Specialist follow-up visits (if necessary): If the patient has other conditions like diabetes, high blood pressure, or kidney issues, other specialists (such as endocrinologists or nephrologists) may also visit during the short hospital stay to ensure these conditions are managed.
", + "ar": "

عملية استئصال القلب (المعروفة أيضًا بحرق أنسجة القلب) هي إجراء علاجي متقدم يُستخدم لعلاج اضطرابات نظم القلب (الاضطرابات القلبية). في هذه الأنواع من اضطرابات النظم، تقوم مناطق معينة من أنسجة القلب بتوليد نبضات غير طبيعية بشكل تلقائي.

أثناء عملية استئصال القلب، يقوم الأخصائي بإنشاء جروح صغيرة جدًا في نسيج القلب باستخدام الطاقة الحرارية أو الباردة، مستهدفًا المناطق المحددة المسؤولة عن حدوث اضطراب النظم.

الهدف الرئيسي هو إزالة أو حظر الإشارات الكهربائية غير الطبيعية في القلب التي تسبب ضربات قلب غير منتظمة. تساعد هذه الجروح الصغيرة على حظر المسارات الكهربائية غير الطبيعية ومنع القلب من إنتاج نظم غير منتظمة أو غير طبيعية.

يمكن استخدام هذا الإجراء منخفض التوغل لمجموعة واسعة من اضطرابات النظم مثل الرجفان الأذيني، الطنين الأذيني، والتسرعات القلبية المختلفة، وغالبًا ما يكون بديلاً مناسبًا للأدوية المضادة لاضطراب النظم على المدى الطويل.

مدة الإقامة بعد استئصال القلب

عادةً ما تكون مدة الإقامة في المستشفى بعد استئصال القلب قصيرة، لكنها قد تختلف حسب حالة المريض ونوع الاستئصال:

  1. الإقامة الأولية: معظم المرضى يقضون ليلة واحدة في المستشفى بعد استئصال القلب.
  2. هدف الإقامة لليلة واحدة: تُستخدم هذه الفترة لمراقبة القلب بدقة (ECG)، والتحقق من أي مضاعفات محتملة (مثل النزيف في موقع القسطرة أو ضربات قلب غير منتظمة جديدة)، وضمان استقرار المريض بعد العملية.
  3. الخروج من المستشفى: إذا كان المريض مستقرًا ولم تُلاحظ أي مضاعفات كبيرة، عادةً ما يتم الخروج في اليوم التالي (بعد 24 ساعة).

الأقسام المعنية بالإقامة

  1. وحدة الإفاقة أو CCU (وحدة العناية المركزة القلبية): مباشرة بعد العملية، يتم نقل المريض إلى هذه الوحدة لعدة ساعات (أو أحيانًا لبضعة أيام إذا كانت هناك مضاعفات بسيطة) تحت إشراف طبي وتمريضي دقيق.
  2. قسم جراحة القلب أو قسم القلب (Cardiac Ward): بعد الاستقرار في الإفاقة، يتم نقل المريض إلى قسم القلب العام لقضاء الليل والتحضير للخروج.

الزيارات اليومية للمريض بعد استئصال القلب

  1. الزيارة الرئيسية من قبل طبيب القلب (أخصائي التدخل أو اضطراب النظم): الطبيب الذي أجرى الاستئصال عادةً يزور المريض مرة يوميًا (أو حسب جدولهم) لفحص الحالة العامة، موقع إدخال القسطرة (الفخذ أو الرقبة)، نتائج ECG الأولية، واتخاذ قرارات الخروج.
  2. زيارات المتخصصين الإضافية (إذا لزم الأمر): إذا كان لدى المريض أمراض أخرى مثل السكري أو ارتفاع ضغط الدم أو مشاكل الكلى، قد يقوم متخصصون آخرون (مثل أخصائي الغدد الصماء أو طبيب الكلى) بزيارة المريض خلال فترة الإقامة القصيرة لضمان إدارة هذه الحالات.
" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 3,000 – 6,000 دلار آمریکا
(بسته به نوع آریتمی، تکنولوژی مپینگ، و مدت زمان عمل)

", + "en": "

Package Price: 3,000 – 6,000 USD
(Depending on arrhythmia type, mapping technology, and procedure duration)

", + "ar": "

سعر الباقة: 3,000 – 6,000 دولار أمريكي
(حسب نوع اضطراب النظم، تقنية التخطيط، ومدة العملية)

" + } + }, + { + "id": 5, + "slug": "implant-crt", + "svg": "", + "title": { + "fa": "نصب دستگاه‌های قلبی (CRT)", + "en": "Implantation of Cardiac Devices (CRT)", + "ar": "تركيب أجهزة القلب (CRT)" + }, + "thumbnail": "Picture8.jpg", + "description": { + "fa": "

پیس میکر CRT، یکی از بهترین انواع باطری های قلب بوده که با قرار گرفتن در حفره های مختلف قلب، شدت و تعداد ضربان های قلبی را کنترل می کند. نارسایی قلبی سیستولیک (Systolic heart failure)، یکی از بیماری‌های شایع در سراسر جهان است و همچنین، یکی از انواع مهم و شایع نارسایی قلبی محسوب می‌شود.

به وسیله داروهای مختلفی که در زمینه‌ی بیماری‌های قلبی استفاده می‌شود، میزان امید به زندگی و کیفیت زندگی این بیماران افزایش پیدا کرده است؛ همچنین یکی از وسایل بسیار مهم در درمان این بیماران، استفاده از پیس میکر CRT به عنوان باطری قلب است که تا حد بسیار زیادی می‌تواند بر کیفیت زندگی این بیماران تاثیر مهم، مفید و مستقیمی بگذارد.

در بیمارانی که دچار نارسایی قلبی سیستولی شده اند (مثلا در زمینه MI، فشار خون بالا و ... ) قلب به صورت یکپارچه منقبض نمی‌گردد و قسمت‌هایی از میوکارد بطنی با تاخیر شروع به انقباض می‌کند. به این حالت، عدم همزمانی یا Dyssynchrony گفته می‌شود که در نوار قلب، خود را به صورت یک موج QRS پهن نشان می‌دهد (QRS بیش از 120 ms نشان دهنده dyssynchrony است).

زمانی که میوکارد به صورت یکپارچه منقبض نشود، زمان پر شدن (filling) آن کاهش می‌یابد. همچنین میزان خونی که به بستر عروقی پمپاژ می‌شود و در نتیجه، میزان کسر تخلیه (Ejection Fraction or EF) نیز کاهش می‌یابد. پیس میکر CRT با کمک فعالیت الکتریکی خود، این عدم همزمانی را کاهش می‌دهد و منجر به افزایش تخلیه خون از بطن قلب می‌شود و می‌تواند تا حد زیادی، عملکرد قلب را به حالت طبیعی خود باز گرداند.

در مورد کارگذاری پیس‌میکر، روند زمانی و بستری مانند هر پروسیجر دیگری بستگی به نوع پیس‌میکر (تک‌حفره‌ای، دو‌حفره‌ای یا سه حفره‌ای) و شرایط بیمار دارد.

در اینجا یک مرور کلی بر اساس رویه‌های استاندارد ارائه می‌شود:

  1. مدت زمان عمل جراحی: عمل کارگذاری پیس‌میکر معمولاً یک پروسیجر نسبتاً سریع است. خود پروسیجر معمولاً بین ۱ تا ۳ ساعت طول می‌کشد. این زمان بسته به دشواری یافتن و قرار دادن الکترودها (سیم‌های پیس‌میکر) در حفره‌های قلب متغیر است.
  2. بخش‌های بستری و مدت زمان اقامت: بستری برای کارگذاری پیس‌میکر معمولاً کمی طولانی‌تر از ابلیشن قلبی است.
    • بخش ریکاوری/CCU: بلافاصله پس از عمل، بیمار برای چند ساعت تحت نظارت دقیق در این بخش قرار می‌گیرد تا خونریزی در محل برش کوچک (معمولاً زیر ترقوه یا بالای قفسه سینه) بررسی شود و عملکرد صحیح دستگاه جدید تأیید گردد.
    • بخش بستری قلب: پس از تثبیت وضعیت، بیمار به بخش عمومی‌تر قلب منتقل می‌شود.
    • تعداد شب‌های بستری: معمولاً بیماران پس از کارگذاری پیس‌میکر بین ۱ تا ۲ شب در بیمارستان بستری می‌مانند.
    • یک شب: در موارد ساده و بدون عارضه، بیمار ممکن است روز بعد ترخیص شود.
    • دو شب: این زمان اضافی اجازه می‌دهد تا پزشک مطمئن شود که دستگاه برای مدت طولانی‌تری به خوبی کار می‌کند و تغییرات نوار قلب بیمار پس از چند ساعت استراحت، پایدار است.
  3. ویزیت‌های پزشکان: ویزیت‌های پزشكان به صورت روزانه می‌باشد. پزشک متخصص قلب (الکتروفیزیولوژیست یا متخصص قلب) حداقل روزانه یک بار برای بررسی محل زخم و عملکرد پیس‌میکر شما را ویزیت خواهد کرد.
", + "en": "

The CRT pacemaker is one of the most advanced types of heart devices, controlling the intensity and number of heartbeats by being placed in different chambers of the heart. Systolic heart failure is a common disease worldwide and a major type of heart failure.

With the use of various cardiac medications, patients’ life expectancy and quality of life have improved; additionally, one of the most important tools in treating these patients is the CRT pacemaker, which can significantly and directly improve their quality of life.

In patients with systolic heart failure (e.g., after MI, high blood pressure, etc.), the heart does not contract uniformly, and parts of the ventricular myocardium start contracting with a delay. This condition is called Dyssynchrony, which appears as a wide QRS complex on ECG (QRS > 120 ms indicates dyssynchrony).

When the myocardium does not contract uniformly, the filling time decreases. Consequently, the blood ejected to the vascular bed and the ejection fraction (EF) also decrease. The CRT pacemaker, through its electrical activity, reduces this dyssynchrony, increases ventricular blood ejection, and can largely restore the heart's function to normal.

The procedure duration and hospitalization for pacemaker implantation depend on the type of pacemaker (single, dual, or triple chamber) and the patient’s condition.

Here is an overview based on standard procedures:

  1. Surgery Duration: Pacemaker implantation is usually a relatively quick procedure, typically lasting 1–3 hours. The duration varies depending on the difficulty of placing electrodes (pacemaker leads) in the heart chambers.
  2. Hospitalization and Stay Duration: Hospitalization for pacemaker implantation is usually slightly longer than for cardiac ablation.
    • Recovery/CCU: Immediately after the procedure, the patient is monitored closely for several hours to check for bleeding at the small incision site (usually under the clavicle or upper chest) and to ensure the device functions properly.
    • Cardiac Ward: After stabilization, the patient is transferred to a general cardiac ward.
    • Number of nights: Patients are usually hospitalized 1–2 nights after pacemaker implantation.
    • One night: For simple cases without complications, the patient may be discharged the next day.
    • Two nights: This additional time ensures the device works well for a longer period and that ECG changes remain stable after several hours of rest.
  3. Doctor Visits: Daily visits are provided. The cardiologist (electrophysiologist or heart specialist) checks the wound site and pacemaker function at least once per day.
", + "ar": "

جهاز تنظيم ضربات القلب CRT هو أحد أكثر أنواع أجهزة القلب تقدماً، حيث يتحكم في شدة وعدد ضربات القلب عن طريق وضعه في حجرات مختلفة من القلب. فشل القلب الانقباضي (Systolic heart failure) هو مرض شائع على مستوى العالم وأحد الأنواع الرئيسية لفشل القلب.

باستخدام الأدوية المختلفة لأمراض القلب، تم تحسين متوسط العمر وجودة الحياة للمرضى؛ بالإضافة إلى ذلك، فإن أحد أهم الأدوات لعلاج هؤلاء المرضى هو جهاز CRT، الذي يمكن أن يحسن بشكل كبير ومباشر جودة حياتهم.

في المرضى الذين يعانون من فشل القلب الانقباضي (على سبيل المثال، بعد MI، ارتفاع ضغط الدم، إلخ)، لا ينقبض القلب بشكل متساوٍ، وتبدأ أجزاء من عضلة البطين بالانقباض بتأخير. تُعرف هذه الحالة بعدم التزامن (Dyssynchrony)، والتي تظهر على ECG كموجة QRS واسعة (QRS > 120 مللي ثانية تشير إلى عدم التزامن).

عندما لا تنقبض عضلة القلب بشكل متساوٍ، يقل وقت الملء. وبالتالي، يقل الدم المضخوخ إلى الأوعية الدموية، وكذلك النسبة المئوية للطرد (Ejection Fraction أو EF). يقوم جهاز CRT بتقليل هذا عدم التزامن، وزيادة إخراج الدم من البطين، ويمكنه إلى حد كبير إعادة وظيفة القلب إلى الوضع الطبيعي.

تعتمد مدة العملية والإقامة على نوع جهاز تنظيم ضربات القلب (أحادي، ثنائي أو ثلاثي الغرف) وحالة المريض.

فيما يلي نظرة عامة بناءً على الإجراءات القياسية:

  1. مدة الجراحة: عادةً ما يكون زرع جهاز تنظيم ضربات القلب إجراءً سريعاً نسبيًا، ويستغرق عادةً من 1 إلى 3 ساعات. تختلف المدة حسب صعوبة وضع الأقطاب (أسلاك جهاز تنظيم ضربات القلب) في حجرات القلب.
  2. الإقامة ومدة البقاء: عادةً ما تكون الإقامة لزرع جهاز تنظيم ضربات القلب أطول قليلاً من إجراء Ablation للقلب.
    • قسم التعافي/CCU: مباشرة بعد الإجراء، يتم مراقبة المريض بدقة لعدة ساعات للتحقق من النزيف في موقع الشق الصغير (عادة تحت الترقوة أو أعلى الصدر) وللتأكد من عمل الجهاز بشكل صحيح.
    • قسم القلب: بعد الاستقرار، يتم نقل المريض إلى قسم القلب العام.
    • عدد الليالي: عادةً ما يُبقى المرضى 1–2 ليلة في المستشفى بعد زرع الجهاز.
    • ليلة واحدة: في الحالات البسيطة وبدون مضاعفات، يمكن إخراج المريض في اليوم التالي.
    • ليلتان: تمنح هذه المدة الإضافية الطبيب التأكد من أن الجهاز يعمل بشكل جيد لفترة أطول وأن تغييرات ECG تظل مستقرة بعد عدة ساعات من الراحة.
  3. زيارات الأطباء: يتم إجراء زيارات يومية. يقوم طبيب القلب (أخصائي كهرباء القلب أو طبيب القلب) بفحص موقع الجرح ووظيفة الجهاز مرة واحدة على الأقل يوميًا.
" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 9,000 – 12,000 دلار آمریکا

", + "en": "

Package price: USD 9,000 – 12,000

", + "ar": "

سعر الباقة: 9,000 – 12,000 دولار أمريكي

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 6, + "slug": "implant-icd", + "svg": "", + "title": { + "fa": "نصب دستگاه‌های قلبی (ICD)", + "en": "Implantation of Cardiac Devices (ICD)", + "ar": "تركيب أجهزة القلب (ICD)" + }, + "thumbnail": "Picture9.jpg", + "description": { + "fa": "

ICD یا دفیبریلاتور کاشتنی قلب، دستگاهی کوچک بوده و با باتری کار می‌کند؛ با کاشت ICD در قفسه سینه، ضربان‌های غیرطبیعی قلب (آریتمی) تشخیص داده شده و در صورت نیاز این دستگاه آن‌ها را متوقف می‌کند. توقف ضربان‌های نامنظم قلب با دفیبریلاتور کاشتنی قلب و برقراری ریتم طبیعی قلب از طریق ایجاد شوک‌های الکتریکی اتفاق می‌افتد.

دفیبریلاتور قابل کاشت قلب، برای کسانی که ضربان‌های قلب بالای خطرناکی دارند و با وضعیتی مشابه تاکی‌کاردی یا فیبریلاسیون بطنی درگیر هستند، استفاده می‌شود. از بین دو دسته ICDهای معمولی و زیرجلدی، درصد بیشتری از افراد مبتلا به تاکی‌کاردی با دفیبریلاتورهای قابل کاشت معمولی روند درمان آریتمی خود را طی می‌کنند.

لازم به ذکر است که ICD با دستگاه ضربان‌ساز متفاوت است؛ دستگاه ضربان‌ساز، یک دستگاه قابل کاشت است که می‌تواند از ضربان‌های قلبی که به حد خطرناکی آهسته هستند، جلوگیری کند.

مدت زمان انجام عمل ICD

مراحل و بخش‌های بستری بیمار

قبل از عمل

حین و بلافاصله پس از عمل

بعد از عمل و پیش از ترخیص

مدت زمان بستری در بیمارستان

پزشکان ویزیت‌کننده بیمار

پزشک اصلی عمل، عملکرد دستگاه را کنترل می‌کند و در روزهای بستری حداقل یک بار بیمار را ویزیت می‌کند.

", + "en": "

The ICD (Implantable Cardioverter Defibrillator) is a small battery-operated device; when implanted in the chest, it detects abnormal heart rhythms (arrhythmias) and, if necessary, stops them. Irregular heartbeats are halted by the ICD, restoring normal heart rhythm through electrical shocks.

The implantable cardioverter defibrillator is used for patients with dangerously high heart rates or conditions like tachycardia or ventricular fibrillation. Among the two types of ICDs, conventional and subcutaneous, most patients with tachycardia undergo treatment with conventional implantable defibrillators.

It should be noted that the ICD is different from a pacemaker; a pacemaker is an implantable device that prevents dangerously slow heartbeats.

Procedure Duration

Hospitalization Steps and Units

Pre-Operation

During and Immediately After Procedure

Post-Operation and Pre-Discharge

Hospital Stay Duration

Attending Physicians

The primary physician monitors device function and visits the patient at least once daily during hospitalization.

", + "ar": "

جهاز ICD أو مزيل الرجفان القابل للزرع هو جهاز صغير يعمل بالبطارية؛ عند زرعه في الصدر، يقوم بالكشف عن ضربات القلب غير الطبيعية (اضطرابات النظم) وإذا لزم الأمر، يوقفها. توقف ضربات القلب غير المنتظمة باستخدام ICD واستعادة إيقاع القلب الطبيعي من خلال الصدمات الكهربائية.

يستخدم جهاز مزيل الرجفان القابل للزرع للمرضى الذين لديهم معدلات ضربات قلب عالية وخطرة أو حالات مثل تسرع القلب أو الرجفان البطيني. من بين نوعي ICD، العادي وتحت الجلد، يخضع معظم مرضى تسرع القلب للعلاج باستخدام أجهزة ICD القابلة للزرع التقليدية.

يجدر بالذكر أن ICD يختلف عن منظم ضربات القلب؛ منظم ضربات القلب هو جهاز قابل للزرع يمنع ضربات القلب البطيئة بشكل خطير.

مدة العملية

خطوات ووحدات الإقامة بالمستشفى

قبل العملية

أثناء العملية وفور الانتهاء

بعد العملية وقبل الخروج

مدة الإقامة في المستشفى

الأطباء المشرفون

يقوم الطبيب الرئيسي بمراقبة وظيفة الجهاز ويزور المريض مرة واحدة على الأقل يوميًا خلال فترة الإقامة.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 7,000 – 10,000 دلار آمریکا

", + "en": "

Package price: 7,000 – 10,000 USD

", + "ar": "

سعر الباقة: 7,000 – 10,000 دولار أمريكي

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 7, + "slug": "implant-pacemaker", + "svg": "", + "title": { + "fa": "نصب دستگاه‌های قلبی (Pacemaker)", + "en": "Implantation of Cardiac Devices (Pacemaker)", + "ar": "تركيب أجهزة القلب (منظم ضربات القلب)" + }, + "thumbnail": "Picture10.jpg", + "description": { + "fa": "

یک باتری یا ژنراتور به عنوان منبع تامین نیرو و یک مدار الکتریکی که با قلب بیمار اتصال دارد. ژنراتور ضربان ساز دارای بدنه فلزی است تا مایعات بدن نتواند به آن وارد شود. وزن حدود ۲۵-۵۰ گرم و اندازه آن از یک قوطی کبریت کوچک‌تر است. بیشتر ضربان سازها دارای باتری لیتیومی هستند.

سیستم پیس میکر دارای یک ژنراتور و یک، دو یا سه سیم متصل به آن است. ضربان ساز تک حفره‌ای یک سیم، دوحفره‌ای دو سیم و سه حفره‌ای (CRT) سه سیم دارد. لیدهای پیس میکر از طریق ورید ساب‌کلاوین چپ وارد قلب شده و ژنراتور زیر پوست قرار می‌گیرد. نوع CRT برای درمان برخی نارسایی‌های قلبی استفاده می‌شود.

کاربردها: بیماری گره دهلیزی کند، بلوک‌های دهلیزی-بطنی، ایجاد انقباض موثر در بیماران نارسایی قلبی. انرژی از باتری گرفته شده و از طریق لیدها به قلب هدایت می‌شود تا انقباض ایجاد شود.

مدت زمان عمل

مراحل و بخش‌های بستری

الف) قبل از عمل: بستری صبح عمل یا شب قبل، شامل نوار قلب، آزمایش خون، عکس قفسه سینه، کنترل قند و فشار، ارزیابی داروها. محل بستری اولیه: Cardiology Ward یا Pre-Op.

ب) حین و بعد از عمل: پس از کارگذاری، انتقال به ریکاوری یا CCU برای چند ساعت. پایش وضعیت عمومی، ریتم قلب، فشار خون و محل کاشت دستگاه.

ج) پس از پایدار شدن: انتقال به Cardiac Ward پس از ۶–۱۲ ساعت، آموزش مراقبت از زخم و محدودیت حرکتی دست.

مدت زمان بستری

وضعیت بالینیمدت بستری معمول
بدون عارضه۱ شب
نیاز به بررسی بیشتر یا تنظیم دستگاه۲ شب
عارضه مانند خونریزی یا عفونت۳ شب یا بیشتر

در اغلب موارد بیمار روز بعد ترخیص می‌شود.

پزشکان ویزیت‌کننده

جراح اصلی و مسئول تنظیم اولیه پیس‌میکر، روزانه یک‌بار برای ارزیابی ترخیص و ریتم بیمار را ویزیت می‌کند.

", + "en": "

The pacemaker (CRT) is a battery-operated device that helps regulate the heart's rhythm. The generator is metal-cased to prevent fluid intrusion, weighs approximately 25-50g, and is smaller than a matchbox. Most pacemakers use lithium batteries.

The system includes one, two, or three leads depending on the type: single-chamber (one lead), dual-chamber (two leads), and CRT (three leads). Leads are inserted via the left subclavian vein, and the generator is placed under the skin. CRT devices are used to treat certain types of heart failure.

Indications include: sick sinus syndrome, atrioventricular blocks, and improving contraction in heart failure patients. The battery supplies energy transmitted through the leads to stimulate heart contraction.

Procedure duration

Hospitalization steps

a) Pre-procedure: admission on the morning of or night before surgery. Includes ECG, blood tests, chest X-ray, blood sugar and pressure monitoring, medication assessment. Initial ward: Cardiology Ward or Pre-Op.

b) During and immediately after procedure: transfer to recovery or CCU for a few hours. Monitoring vital signs, heart rhythm, blood pressure, and device insertion site.

c) After stabilization: transfer to Cardiac Ward after 6-12 hours, with wound care instructions and movement restrictions.

Length of stay

Clinical conditionTypical length of stay
No complications1 night
Needs further monitoring or device adjustment2 nights
Complications such as bleeding or infection3 nights or more

In most cases, discharge occurs the next day.

Attending physicians

The primary surgeon responsible for initial pacemaker programming visits daily to assess discharge readiness and heart rhythm.

", + "ar": "

جهاز تنظيم ضربات القلب (CRT) هو جهاز يعمل بالبطارية ويساعد في تنظيم إيقاع القلب. يحتوي المولد على غلاف معدني لمنع تسرب السوائل، ويزن حوالي 25-50 غرام، وأصغر من علبة كبريت. معظم أجهزة تنظيم ضربات القلب تستخدم بطاريات ليثيوم.

يشمل النظام سلكًا واحدًا أو اثنين أو ثلاثة حسب النوع: أحادي الحجرة (سلك واحد)، ثنائي الحجرة (سلكان)، وCRT (ثلاثة أسلاك). يتم إدخال الأسلاك عبر الوريد تحت الترقوة الأيسر، ويوضع المولد تحت الجلد. تُستخدم أجهزة CRT لعلاج بعض أنواع فشل القلب.

المؤشرات: متلازمة العقدة الجيبية المريضة، الحظر الأذيني البطيني، وتحسين انقباض القلب لدى مرضى فشل القلب. توفر البطارية الطاقة التي تنتقل عبر الأسلاك لتحفيز انقباض القلب.

مدة العملية

مراحل الإقامة

أ) قبل العملية: الدخول صباح يوم العملية أو الليلة السابقة. يشمل تخطيط القلب، فحوصات الدم، صورة صدر، مراقبة السكر والضغط، تقييم الأدوية. القسم الأولي: Cardiology Ward أو Pre-Op.

ب) أثناء وبعد العملية مباشرة: النقل إلى قسم الإنعاش أو CCU لعدة ساعات. مراقبة العلامات الحيوية، إيقاع القلب، ضغط الدم، ومكان الجهاز.

ج) بعد الاستقرار: النقل إلى Cardiac Ward بعد 6-12 ساعة، مع تعليمات للعناية بالجروح وتقييد حركة الذراع.

مدة الإقامة

الحالة السريريةمدة الإقامة المعتادة
بدون مضاعفاتليلة واحدة
متابعة إضافية أو ضبط الجهازليلتين
مضاعفات مثل النزيف أو العدوى3 ليالٍ أو أكثر

في معظم الحالات، يتم الخروج في اليوم التالي.

الأطباء المشرفون

الجراح المسؤول عن برمجة الجهاز الأولية يزور المريض يوميًا لتقييم الاستعداد للخروج ومراقبة إيقاع القلب.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

قیمت پکیج: 4,500 – 5,500 دلار آمریکا

", + "en": "

Package Price: USD 4,500 – 5,500

", + "ar": "

سعر الباقة: 4,500 – 5,500 دولار أمريكي

" + }, + "notes": { + "fa": "", + "en": "", + "ar": "" + } + }, + { + "id": 8, + "slug": "cabg", + "svg": "", + "title": { + "fa": "CABG", + "en": "CABG (Coronary Artery Bypass Grafting)", + "ar": "جراحة تحويل مسار الشريان التاجي" + }, + "thumbnail": "Picture22.jpg", + "description": { + "fa": "

عمل قلب باز (Open Heart Surgery) روشی است که در آن قفسه سینه باز می‌شود تا جراح بتواند مستقیماً به قلب دسترسی داشته باشد. رایج‌ترین نوع آن بای‌پس عروق کرونری (CABG) است، که برای بهبود جریان خون به عضله قلب انجام می‌شود. در این عمل، از دستگاه قلب و ریه مصنوعی (Heart-Lung Machine) استفاده می‌شود تا هنگام عمل، قلب از جریان طبیعی خون خارج شده و جراح بتواند روی آن کار کند.

مزایای عمل قلب باز:

مراحل و مدت زمان عمل:

مدت کل عمل از بیهوشی تا پایان جراحی حدود ۵ تا ۶ ساعت است.

مدت بستری و بخش‌های مورد نیاز:

در مجموع، بستری در بیمارستان ۷ تا ۱۰ روز طول می‌کشد.

پزشکان و تیم درمان:

", + "en": "

Open Heart Surgery is a procedure in which the chest is opened to give the surgeon direct access to the heart. The most common type is Coronary Artery Bypass Grafting (CABG), performed to improve blood flow to the heart muscle. A Heart-Lung Machine is used to temporarily take over blood circulation so the surgeon can operate safely.

Benefits of Open Heart Surgery:

Stages and duration of surgery:

Total surgery time from anesthesia to end of operation is approximately 5–6 hours.

Hospital stay and required units:

Overall hospital stay lasts 7–10 days.

Medical team:

", + "ar": "

جراحة القلب المفتوح (Open Heart Surgery) هي إجراء يتم فيه فتح الصدر ليتمكن الجراح من الوصول المباشر إلى القلب. النوع الأكثر شيوعًا هو تحويل مسار الشريان التاجي (CABG) لتحسين تدفق الدم إلى عضلة القلب. يتم استخدام جهاز القلب والرئة الاصطناعي لتولي دوران الدم مؤقتًا حتى يتمكن الجراح من العمل بأمان.

فوائد جراحة القلب المفتوح:

مراحل ومدة العملية:

إجمالي مدة العملية من التخدير حتى انتهاء الجراحة حوالي 5–6 ساعات.

مدة الإقامة والوحدات المطلوبة:

بشكل إجمالي، تستمر مدة الإقامة في المستشفى 7–10 أيام.

فريق الرعاية الطبية:

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "۵۵۰۰ – ۹۰۰۰ دلار آمریکا", + "en": "USD 5,500 – 9,000", + "ar": "٥,٥٠٠ – ٩,٠٠٠ دولار أمريكي" + } + } + ] + }, + { + "id": 4, + "slug": "beauty", + "svg": "BeautySvg", + "is_parent": true, + + "title": { + "fa": "پکیج زیبایی", + "en": "Beauty & Aesthetic Package", + "ar": "باقة الجمال والتجميل" + }, + "content": {}, + "sub_packages": [ + { + "id": 1, + "slug": "liposuction-lipomatic", + "svg": "", + "title": { + "fa": "لیپوساکشن / لیپوماتیک (شکم، پهلو، ران)", + "en": "Liposuction / Lipomatic (Abdomen, Flanks, Thighs)", + "ar": "شفط الدهون / الليبوماتيك (البطن، الجوانب، الفخذين)" + }, + "thumbnail": "Picture11.jpg", + "description": { + "fa": "

لیپوساکشن نوعی روش جراحی محسوب می‌شود که از ابزار ساکشن یا مکش، برای برداشتن چربی‌های نواحی خاصی از بدن مانند شکم، باسن، ران، بازوها یا گردن استفاده می‌گردد. علاوه بر این، روش لیپوساکشن قادر است تا در حین انجام بر روی نواحی خاص از بدن به آنها شکل نیز بدهد. بنابراین از دیگر نام‌های لیپوساکشن می‌توان به لیپوپلاستی و کانتورینگ بدن اشاره کرد.

لیپوساکشن برای حذف چربی‌های نقاط مختلفی از بدن که به رژیم غذایی و ورزش پاسخ نداده‌اند، مانند موارد زیر مورد استفاده قرار می‌گیرد:

مدت زمان انجام عمل لیپوساکشن: به‌طور متوسط، عمل بین ۱ تا ۴ ساعت طول می‌کشد.

عوامل تعیین‌کننده:

مدت زمان بستری در بیمارستان:

وضعیت بیمارنوع بیهوشیمدت بستری
ناحیه محدود (مثل زیر شکم یا ران‌ها)بی‌حسی موضعیمعمولاً درمان یک‌روزه، ترخیص چند ساعت بعد از عمل
ناحیه‌های متعدد یا حجم چربی زیادبیهوشی عمومی۱ شب بستری برای مانیتورینگ مایعات و کنترل درد
لیپوساکشن ترکیبی با جراحی دیگر (مثل ابدومینوپلاستی)بیهوشی عمومیگاهی ۲ شب بستری نیاز است

در کل، بیشتر بیماران یا در همان روز عمل مرخص می‌شوند (Day Surgery) یا فقط یک شب بستری دارند.

پزشکان ویزیت‌کننده بیمار: پزشکان ویزیت‌کننده بیمار، پزشک اصلی بیمار (جراح پلاستیک) می‌باشند.

بخش بستری بیمار: ابتدا ریکاوری (PACU)، سپس بخش جراحی زیبایی یا عمومی.

", + + "en": "

Liposuction is a surgical procedure that uses suction tools to remove fat from specific areas of the body such as the abdomen, buttocks, thighs, arms, or neck. In addition, liposuction can also contour these areas during the procedure. Other names for liposuction include lipoplasty and body contouring.

Liposuction is used to remove fat from areas that have not responded to diet and exercise, including:

Duration of Liposuction Procedure: On average, the procedure takes 1 to 4 hours.

Determining Factors:

Hospital Stay Duration:

Patient ConditionAnesthesia TypeHospital Stay
Limited area (e.g., lower abdomen or thighs)Local anesthesiaUsually same-day treatment, discharged a few hours after surgery
Multiple areas or large volume of fatGeneral anesthesia1 night for fluid monitoring and pain management
Liposuction combined with other surgery (e.g., abdominoplasty)General anesthesiaSometimes requires 2 nights stay

In general, most patients are discharged on the same day (Day Surgery) or after one night stay.

Attending Physicians: The attending physicians are the main surgeon (plastic surgeon).

Hospital Ward: Initially PACU (recovery), then plastic surgery or general ward.

", + + "ar": "

عملية شفط الدهون (Liposuction) هي إجراء جراحي يستخدم أدوات الشفط لإزالة الدهون من مناطق محددة من الجسم مثل البطن، الأرداف، الفخذين، الذراعين، أو الرقبة. بالإضافة إلى ذلك، يمكن لشفط الدهون تشكيل هذه المناطق أثناء الإجراء. ومن الأسماء الأخرى لشفط الدهون: ليبوبلاستي وتشكيل الجسم.

يُستخدم شفط الدهون لإزالة الدهون من المناطق التي لم تستجب للنظام الغذائي والتمارين الرياضية، بما في ذلك:

مدة إجراء شفط الدهون: في المتوسط، تستغرق العملية من 1 إلى 4 ساعات.

العوامل المؤثرة:

مدة الإقامة في المستشفى:

حالة المريضنوع التخديرمدة الإقامة
منطقة محدودة (مثل أسفل البطن أو الفخذين)تخدير موضعيعادةً علاج يوم واحد، الخروج بعد عدة ساعات من العملية
مناطق متعددة أو كمية كبيرة من الدهونتخدير عامليلة واحدة لمراقبة السوائل وإدارة الألم
شفط الدهون مع عملية أخرى (مثل شد البطن)تخدير عامأحياناً يحتاج إلى ليلتين إقامة

بشكل عام، يتم إخراج معظم المرضى في نفس يوم العملية (Day Surgery) أو بعد ليلة واحدة.

الأطباء الزائرون: الأطباء الزائرون هم الجراح الرئيسي (جراح تجميل).

قسم الإقامة بالمستشفى: في البداية وحدة الإفاقة (PACU)، ثم قسم الجراحة التجميلية أو العام.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": " 1,800 – 2,800 دلار آمریکا
(بسته به تعداد نواحی)

", + "en": " USD 1,800 – 2,800
(Depending on the number of areas)

", + "ar": " 1,800 – 2,800 دولار أمريكي
(حسب عدد المناطق)

" + } + }, + { + "id": 2, + "slug": "abdominoplasty", + "svg": "", + "title": { + "fa": "ابدومینوپلاستی (جراحی زیبایی شکم)", + "en": "Abdominoplasty (Tummy Tuck Surgery)", + "ar": "شد البطن" + }, + "thumbnail": "Picture12.jpg", + "description": { + "fa": "

ابدومینوپلاستی نوعی جراحی زیبایی به حساب می‌آید که برای کوچک شدن و سفت شدن شکم پس از بارداری یا کاهش وزن کاربرد دارد. در این روش جراح عضلات شل و چربی و همچنین پوست اضافه را برمی‌دارد. همچنین اگر بافت شکم شما شل باشد، آن را به کمک بخیه‌های داخلی می‌دوزند تا حالت سفت‌تری پیدا کند.

مدت زمان انجام عمل ابدومینوپلاستی: به‌صورت کلی بین ۲ تا ۵ ساعت طول می‌کشد. این زمان به عوامل زیر بستگی دارد:

عاملتأثیر بر زمان عمل
وسعت پوست و چربی برداشته‌شدههرچه بیشتر باشد، عمل طولانی‌تر
انجام همزمان لیپوساکشنحدود ۳۰ تا ۹۰ دقیقه به زمان عمل اضافه می‌کند
ترمیم عضلات شکم (diastasis repair)در صورت انجام، حدود ۳۰ دقیقه اضافه می‌شود
تجربه و سرعت تیم جراحیدر مراکز با تجربه، میانگین زمان ۳ ساعت است

به‌صورت میانگین، مدت جراحی حدود ۳ ساعت در نظر گرفته می‌شود.

مدت زمان بستری در بیمارستان:

نوع ابدومینوپلاستیمدت بستری معمول
ابدومینوپلاستی کلاسیک یا کامل۱ تا ۲ شب بستری
مینی‌ابدومینوپلاستی (کوچک‌تر، در زیر ناف)۶ تا ۱۲ ساعت (امکان ترخیص در همان روز)
ابدومینوپلاستی همراه با لیپوساکشن یا جراحی ترکیبی (مانند ماموپلاستی)۲ تا ۳ شب بستری برای کنترل تخلیه و سرم‌ها

به طور معمول اکثر بیماران پس از ۱ تا ۲ شب بستری، با وضعیت پایدار، ترخیص می‌شوند. ترخیص زودتر از این معمولاً توصیه نمی‌شود، چون نیاز به بررسی تخلیه‌ی درن‌ها (Drain) و کنترل مایعات وجود دارد.

پزشکان ویزیت‌کننده بیمار: پزشکان ویزیت‌کننده بیمار، پزشک اصلی بیمار (جراح پلاستیک) می‌باشند.

بخش بستری بیمار: ابتدا ریکاوری (PACU)، سپس بخش جراحی زیبایی یا عمومی.

", + + "en": "

Abdominoplasty, also known as a tummy tuck, is a cosmetic surgery procedure used to reduce and tighten the abdomen after pregnancy or weight loss. In this procedure, the surgeon removes loose muscles, fat, and excess skin. If the abdominal tissue is loose, it is sutured internally to achieve a firmer appearance.

Duration of Abdominoplasty: Generally, the procedure takes 2 to 5 hours. This duration depends on the following factors:

FactorEffect on Surgery Time
Extent of skin and fat removedThe more extensive, the longer the procedure
Concurrent liposuctionAdds approximately 30 to 90 minutes
Abdominal muscle repair (diastasis repair)Adds around 30 minutes if performed
Experience and speed of the surgical teamIn experienced centers, the average time is about 3 hours

On average, the surgery is considered to take around 3 hours.

Hospital Stay Duration:

Type of AbdominoplastyTypical Hospital Stay
Classic or full abdominoplasty1–2 nights
Mini-abdominoplasty (smaller, below the navel)6–12 hours (possible same-day discharge)
Abdominoplasty combined with liposuction or other surgery (e.g., mammaplasty)2–3 nights for drainage and fluid monitoring

In general, most patients are discharged after 1–2 nights with stable condition. Early discharge is not usually recommended due to the need to monitor drains and fluids.

Attending Physicians: The attending physicians are the main surgeon (plastic surgeon).

Hospital Ward: Initially PACU (recovery), then plastic surgery or general ward.

", + + "ar": "

عملية شد البطن أو Abdominoplasty هي جراحة تجميلية تُستخدم لتقليل وشد البطن بعد الحمل أو فقدان الوزن. في هذه العملية، يقوم الجراح بإزالة العضلات المترهلة والدهون والجلد الزائد. إذا كانت أنسجة البطن مترهلة، يتم خياطتها داخليًا للحصول على مظهر أكثر صلابة.

مدة إجراء عملية شد البطن: بشكل عام، تستغرق العملية من 2 إلى 5 ساعات. تعتمد المدة على العوامل التالية:

العاملتأثير على مدة العملية
مدى إزالة الجلد والدهونكلما كان أوسع، كانت العملية أطول
شفط الدهون المتزامنيضيف حوالي 30 إلى 90 دقيقة
إصلاح عضلات البطن (diastasis repair)إذا تم، يضيف حوالي 30 دقيقة
خبرة وسرعة الفريق الجراحيفي المراكز ذات الخبرة، متوسط الوقت حوالي 3 ساعات

بالمتوسط، تستغرق العملية حوالي 3 ساعات.

مدة الإقامة في المستشفى:

نوع عملية شد البطنمدة الإقامة المعتادة
شد البطن الكلاسيكي أو الكامل1–2 ليلة
شد البطن المصغر (أصغر، أسفل السرة)6–12 ساعة (إمكانية الخروج في نفس اليوم)
شد البطن مع شفط الدهون أو جراحة مشتركة (مثل شد الثدي)2–3 ليالٍ لمراقبة الصرف والسوائل

بشكل عام، يتم إخراج معظم المرضى بعد 1–2 ليلة إذا كانت حالتهم مستقرة. لا يُنصح عادة بالخروج المبكر بسبب الحاجة لمراقبة الصرف والسوائل.

الأطباء الزائرون: الأطباء الزائرون هم الجراح الرئيسي (جراح تجميل).

قسم الإقامة بالمستشفى: في البداية وحدة الإفاقة (PACU)، ثم قسم الجراحة التجميلية أو العام.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": " 2,500 – 3,500 دلار آمریکا

", + "en": " USD 2,500 – 3,500

", + "ar": " 2,500 – 3,500 دولار أمريكي

" + } + }, + { + "id": 3, + "slug": "blepharoplasty", + "svg": "", + "title": { + "fa": "بلفاروپلاستی (جراحی پلک بالا و پایین)", + "en": "Blepharoplasty (Upper and Lower Eyelid Surgery)", + "ar": "جراحة الجفن العلوي والسفلي" + }, + "thumbnail": "Picture13.jpg", + "description": { + "fa": "

بلفاروپلاستی، یا همان جراحی زیبایی پلک، با بالا کشیدن پلک‌ها به کاهش چروک‌ها و ایجاد ظاهری جوان‌تر کمک می‌کند. این عمل نه تنها زیبایی و جوانی را به چهره بازمی‌گرداند، بلکه با حفظ شکل طبیعی چشم‌ها، باعث می‌شود که سفیدی چشم‌ها (قرنیه) بیشتر دیده شود و چهره‌ای شاداب‌تر به شما ببخشد.

مدت زمان انجام جراحی بلفاروپلاستی:

مدت زمان تقریبینوع جراحی بلفاروپلاستی
حدود ۴۵ دقیقه تا ۱ ساعتبلفاروپلاستی پلک بالا
حدود ۱ تا ۱٫۵ ساعتبلفاروپلاستی پلک پایین
حدود ۱٫۵ تا ۲٫۵ ساعتبلفاروپلاستی هر چهار پلک (بالا و پایین هر دو چشم)

در اکثر موارد تحت بی‌حسی موضعی همراه با آرام‌بخشی (سدیشن) انجام می‌شود. در جراحی‌های ترکیبی (مثل بلفاروپلاستی + لیفت ابرو یا چربی‌گیری)، ممکن است از بیهوشی عمومی استفاده شود.

مدت زمان بستری در بیمارستان:

مدت بستریوضعیت بیمارنوع بیهوشی
معمولاً سرپایی؛ ترخیص ۲ تا ۴ ساعت پس از عملبیمار پایدار و بدون ریسک خاصبی‌حسی موضعی با سدیشن
ممکن است ۱ شب بستری برای تحت نظر بودن در بخش صورت گیردنیاز به پایش بیشتربیهوشی عمومی یا عمل ترکیبی (مثلاً لیفت صورت)

در بیشتر موارد، بلفاروپلاستی یک عمل سرپایی است و بیمار همان روز مرخص می‌شود. تنها در موارد خاص (سن بالا، بیماری زمینه‌ای قلبی یا دیابت، یا جراحی ترکیبی بزرگ‌تر) بستری شبانه توصیه می‌شود.

پزشکان ویزیت‌کننده بیمار: پزشک اصلی بیمار (جراح پلاستیک).
بخش بستری بیمار: ابتدا ریکاوری (PACU)، سپس بخش جراحی زیبایی یا عمومی.

", + + "en": "

Blepharoplasty, or eyelid cosmetic surgery, helps reduce wrinkles and create a more youthful appearance by lifting the eyelids. This procedure not only restores beauty and youthfulness to the face, but also enhances the visibility of the whites of the eyes (cornea) while maintaining the natural shape of the eyes, giving the face a refreshed look.

Duration of Blepharoplasty Surgery:

Approx. DurationType of Blepharoplasty
Approx. 45 minutes to 1 hourUpper eyelid blepharoplasty
Approx. 1 to 1.5 hoursLower eyelid blepharoplasty
Approx. 1.5 to 2.5 hoursFull four-eyelid blepharoplasty

Most procedures are performed under local anesthesia with sedation. For combined surgeries (e.g., blepharoplasty with brow lift or fat removal), general anesthesia may be used.

Hospital Stay:

Duration of StayPatient StatusType of Anesthesia
Usually outpatient; discharge 2–4 hours after surgeryPatient stable and low-riskLocal anesthesia with sedation
Sometimes 1-night stay for closer monitoringHigher monitoring neededGeneral anesthesia or combined surgery (e.g., facelift)

In most cases, blepharoplasty is an outpatient procedure with same-day discharge. Overnight stay is recommended only for specific cases (advanced age, cardiac disease, diabetes, or major combined surgery).

Attending Physicians: The primary plastic surgeon.
Hospital Wards: Initially PACU, then plastic surgery or general surgical ward.

", + + "ar": "

تجميل الجفون أو بلفاروپلاستي يساعد في رفع الجفون وتقليل التجاعيد وإعطاء مظهر أكثر شباباً. هذا الإجراء لا يعيد فقط الجمال والشباب للوجه، ولكنه يعزز رؤية بياض العينين (القرنية) مع الحفاظ على الشكل الطبيعي للعيون، مما يمنح الوجه مظهراً منعشاً.

مدة إجراء البلفاروپلاستي:

المدة التقريبيةنوع البلفاروپلاستي
حوالي ٤٥ دقيقة إلى ساعة واحدةبلفاروپلاستي للجفن العلوي
حوالي ١ إلى ١.٥ ساعةبلفاروپلاستي للجفن السفلي
حوالي ١.٥ إلى ٢.٥ ساعةبلفاروپلاستي لجميع الجفون الأربعة

في معظم الحالات يتم الإجراء تحت التخدير الموضعي مع التهدئة. في الجراحات المركبة (مثل البلفاروپلاستي مع رفع الحاجب أو إزالة الدهون) قد يُستخدم التخدير العام.

مدة الإقامة في المستشفى:

مدة الإقامةحالة المريضنوع التخدير
عادةً إجراء خارجي؛ الخروج بعد ٢–٤ ساعاتالمريض مستقر ومنخفض المخاطرتخدير موضعي مع تهدئة
قد تحتاج بعض الحالات إلى إقامة ليلة واحدة للمراقبةالحاجة لمزيد من المراقبةتخدير عام أو عملية مركبة (مثل رفع الوجه)

في معظم الحالات، البلفاروپلاستي إجراء خارجي ويتم الخروج في نفس اليوم. الإقامة الليلية تكون فقط للحالات الخاصة (كبار السن، أمراض قلبية، سكري، أو جراحة مركبة كبيرة).

الأطباء القائمون على الزيارة: الجراح التجميلي الرئيسي.
أقسام المستشفى: أولاً وحدة الإنعاش (PACU)، ثم قسم الجراحة التجميلية أو العام.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "1,000 – 1,600 دلار آمریکا", + "en": "USD 1,000 – 1,600", + "ar": "1,000 – 1,600 دولار أمريكي" + } + }, + { + "id": 4, + "slug": "face-neck-lift", + "svg": "", + "title": { + "fa": "لیفت صورت و گردن", + "en": "Face and Neck Lift", + "ar": "رفع الوجه والرقبة" + }, + "thumbnail": "Picture14.jpg", + "description": { + "fa": "

عمل لیفت صورت و گردن (Facelift and Neck Lift) یک جراحی ترمیمی و زیبایی گسترده است که برای کاهش علائم پیری مانند افتادگی پوست، چین و چروک‌های عمیق و از دست دادن حجم در نواحی میانی و پایینی صورت و گردن انجام می‌شود. این عمل به دلیل پیچیدگی، نیاز به بیهوشی عمومی و حجم کار جراحی، مستلزم مراقبت‌های ویژه‌ای در بیمارستان است.

مدت زمان انجام عمل لیفت صورت و گردن

مدت زمان عمل به عوامل متعددی بستگی دارد، اما به‌طور کلی طولانی‌تر از اعمال پلک یا لیپوساکشن است:

نکته مهم: این عمل تقریباً همیشه تحت بیهوشی عمومی انجام می‌شود.

مدت زمان بستری در بیمارستان

به دلیل ماهیت وسیع جراحی، خطر افت فشار خون (در ساعات اولیه)، نیاز به مدیریت دقیق درن‌ها و مصرف مسکن‌های وریدی، بستری شبانه ضروری است:

توضیحات تکمیلی:

  1. شب اول: بیمار بلافاصله پس از عمل به اتاق ریکاوری منتقل شده و سپس به بخش بستری می‌رود تا تیم پزشکی درن‌ها، وضعیت زخم‌ها، تورم و فشار خون را تحت نظر داشته باشد.
  2. شب دوم (در صورت لزوم): در صورتی که تخلیه درن‌ها یا کنترل تورم به خوبی در شب اول انجام نشود، یا بیمار نیاز به مراقبت‌های بیشتری داشته باشد، بستری برای شب دوم نیز توصیه می‌شود.
  3. ترخیص: معمولاً با پایداری کامل علائم حیاتی، کنترل درد و آموزش‌های لازم برای مراقبت از درن‌ها، بیمار مرخص می‌شود.

پزشکان ویزیت‌کننده بیمار

تیم پزشکی درگیر در این جراحی تخصصی‌تر است:

بخش‌های بستری درگیر

", + "en": "

Facelift and Neck Lift is an extensive reconstructive and cosmetic surgery performed to reduce signs of aging such as skin sagging, deep wrinkles, and volume loss in the mid and lower face and neck. Due to its complexity, general anesthesia, and surgical workload, specialized hospital care is required.

Duration of Facelift and Neck Lift Surgery

The operation time depends on various factors but is generally longer than eyelid or liposuction procedures:

Important note: This procedure is almost always performed under general anesthesia.

Hospital Stay Duration

Due to the extensive nature of the surgery, risk of low blood pressure in early hours, precise drain management, and IV pain medications, overnight hospitalization is necessary:

Additional details:

  1. First night: The patient is immediately transferred to the recovery room post-surgery and then to the hospital ward for monitoring drains, wounds, swelling, and blood pressure.
  2. Second night (if necessary): If drain management or swelling control is not sufficient on the first night, or additional care is needed, a second night stay is recommended.
  3. Discharge: Usually occurs once vital signs are stable, pain is controlled, and patient is educated on drain care.

Attending Physicians

The surgical team involved in this specialized procedure includes:

Hospital Departments Involved

", + "ar": "

رفع ترهّل الوجه والرقبة (Facelift and Neck Lift) هو جراحة تجميلية وإصلاحية واسعة النطاق تُجرى لتقليل علامات الشيخوخة مثل ترهّل الجلد، التجاعيد العميقة، وفقدان الحجم في منتصف وأسفل الوجه والرقبة. نظرًا لتعقيدها، تحتاج هذه العملية إلى تخدير عام ورعاية متخصصة في المستشفى.

مدة إجراء عملية رفع الوجه والرقبة

تعتمد مدة العملية على عوامل مختلفة، لكنها عادةً أطول من عمليات الجفون أو شفط الدهون:

ملاحظة مهمة: هذه العملية تُجرى تقريبًا دائمًا تحت التخدير العام.

مدة الإقامة في المستشفى

نظرًا لطبيعة الجراحة الواسعة، وخطر انخفاض ضغط الدم في الساعات الأولى، والحاجة لإدارة دقيقة للصرفيات واستخدام مسكنات وريدية، فإن الإقامة الليلية ضرورية:

تفاصيل إضافية:

  1. الليلة الأولى: يُنقل المريض فورًا بعد العملية إلى غرفة الإفاقة ثم إلى قسم المستشفى لمراقبة المصارف، الجروح، التورم وضغط الدم.
  2. الليلة الثانية (إذا لزم الأمر): إذا لم يكن التحكم في المصارف أو التورم كافيًا في الليلة الأولى، أو إذا كان المريض بحاجة إلى رعاية إضافية، يُوصى بالإقامة لليلة ثانية.
  3. الخروج: عادةً بعد استقرار العلامات الحيوية، والتحكم في الألم، وتقديم التعليمات اللازمة للعناية بالمصارف.

الأطباء المشرفون على المريض

تشمل الفريق الطبي لهذه العملية المتخصصة:

الأقسام المشاركة في المستشفى

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "3,500 – 5,000 دلار آمریکا", + "en": "USD 3,500 – 5,000", + "ar": "3,500 – 5,000 دولار أمريكي" + } + }, + { + "id": 5, + "slug": "breast-augmentation-implant", + "svg": "", + "title": { + "fa": "پروتز سینه / لیفت سینه (با پروتز)", + "en": "Breast Augmentation / Lift (With Implant)", + "ar": "تكبير / رفع الثدي (بالزرع)" + }, + "thumbnail": "Picture15.jpg", + "description": { + "fa": "

دو عمل رایج در بین زنان: لیفت سینه و پروتز سینه برای فرم‌دهی و زیبایی سینه‌ها انجام می‌شوند. عواملی مانند کاهش شدید وزن، شیردهی یا بیماری‌ها می‌توانند بر حجم و شکل سینه‌ها اثر بگذارند. کوچک بودن یا افتادگی سینه‌ها ممکن است صرفاً ناشی از فرم فیزیکی بدن باشد.

هدف جراحی: پروتز سینه برای افزایش حجم و سایز سینه‌ها و لیفت سینه برای اصلاح افتادگی انجام می‌شود. پروتز با بیهوشی کامل و لیفت سینه می‌تواند با بی‌حسی موضعی نیز انجام شود.

مدت زمان انجام عمل پروتز و لیفت سینه:
ملاحظاتمدت زمان تقریبینوع جراحی
در صورت استفاده از بیهوشی عمومی یا سدیشن عمیق۱ تا ۲ ساعتپروتز سینه (تنها)
به دلیل نیاز به جابجایی و تغییر موقعیت بافت سینه۲ تا ۳ ساعتلیفت سینه (تنها)
گسترده‌ترین حالت، معمولاً نیاز به بیهوشی عمومی۲٫۵ تا ۴ ساعتترکیب لیفت و پروتز (Augmentation-Mastopexy)

🔹 این جراحی‌ها تقریباً همیشه تحت بیهوشی عمومی انجام می‌شوند.

مدت زمان بستری در بیمارستان:
نوع عملتوضیح
پروتز سینه (تنها)تقریباً همیشه سرپایی؛ ترخیص ۴ تا ۸ ساعت بعد از عمل
لیفت سینه یا ترکیب لیفت و پروتزاغلب سرپایی؛ در صورت نیاز یک شب بستری برای کنترل خونریزی، تورم و درد

✅ در اکثر موارد، بیمار نیازی به بستری طولانی ندارد و می‌تواند همان روز یا روز بعد مرخص شود.

پزشکان ویزیت‌کننده بیمار:

پزشکان اصلی: جراح پلاستیک (Plastic Surgeon)

بخش‌های بستری: ابتدا ریکاوری (PACU)، سپس بخش جراحی زیبایی یا عمومی

", + "en": "

Common procedures for women: Breast lift and breast implants are performed to shape and enhance the breasts. Factors such as significant weight loss, breastfeeding, or medical conditions can affect breast volume and shape. Small or sagging breasts may simply be due to body structure.

Purpose of surgery: Breast implants increase size and volume, while a breast lift corrects sagging. Implants are done under general anesthesia, while a breast lift can also be performed under local anesthesia.

Surgery duration:
ConsiderationApprox. DurationType of Surgery
With general anesthesia or deep sedation1–2 hoursBreast implants (only)
Due to tissue repositioning2–3 hoursBreast lift (only)
Most extensive, usually under general anesthesia2.5–4 hoursCombination lift & implants (Augmentation-Mastopexy)

🔹 These procedures are almost always performed under general anesthesia.

Hospital stay:
ProcedureDetails
Breast implants onlyMostly outpatient; discharge 4–8 hours post-op
Breast lift or lift with implantsMostly outpatient; 1 night stay if needed for monitoring bleeding, swelling, and pain

✅ In most cases, no extended hospitalization is required; discharge same day or next day.

Attending doctors:

Main doctor: Plastic Surgeon

Hospital wards: Recovery (PACU) first, then plastic surgery or general ward

", + "ar": "

الإجراءات الشائعة للنساء: رفع الثدي وزرع الثدي يتمان لتشكيل وتحسين مظهر الثديين. يمكن أن تؤثر عوامل مثل فقدان الوزن الكبير، الرضاعة الطبيعية أو الحالات الطبية على حجم وشكل الثدي. صغر أو ترهل الثدي قد يكون ببساطة بسبب البنية الجسدية.

هدف الجراحة: زرع الثدي يزيد الحجم، بينما رفع الثدي يصحح الترهل. الزرع يتم تحت التخدير العام، بينما يمكن إجراء رفع الثدي تحت التخدير الموضعي.

مدة الجراحة:
الاعتبارالمدة التقريبيةنوع الجراحة
مع التخدير العام أو التخدير العميق1–2 ساعةزرع الثدي فقط
بسبب إعادة وضع الأنسجة2–3 ساعاترفع الثدي فقط
الحالة الأكثر توسعاً، عادة تحت التخدير العام2.5–4 ساعاتالرفع مع الزرع (Augmentation-Mastopexy)

🔹 هذه الإجراءات تُجرى عادةً تحت التخدير العام.

مدة الإقامة في المستشفى:
الإجراءالتفاصيل
زرع الثدي فقطغالباً خارجي؛ الخروج بعد 4–8 ساعات من العملية
رفع الثدي أو الرفع مع الزرعغالباً خارجي؛ ليلة واحدة إذا لزم لمراقبة النزيف، التورم والألم

✅ في معظم الحالات، لا يلزم الإقامة الطويلة، ويمكن الخروج في نفس اليوم أو اليوم التالي.

الأطباء المشرفون:

الطبيب الرئيسي: جراح تجميل (Plastic Surgeon)

الأقسام بالمستشفى: غرفة التعافي (PACU) أولاً، ثم قسم الجراحة التجميلية أو العام

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

2,800 – 3,800 دلار برای پروتز
2,500 – 3,200 دلار برای لیفت بدون پروتز

", + "en": "

USD 2,800 – 3,800 for breast implants
USD 2,500 – 3,200 for lift without implants

", + "ar": "

2,800 – 3,800 دولار أمريكي للزرع
2,500 – 3,200 دولار أمريكي للرفع بدون زرع

" + } + }, + { + "id": 6, + "slug": "breast-lift-no-implant", + "svg": "", + "title": { + "fa": "پروتز سینه / لیفت سینه (بدون پروتز)", + "en": "Breast Lift (Without Implant)", + "ar": "رفع الثدي بدون زرع" + }, + "content": {"fa": "", "en": "", "ar": ""} + }, + { + "id": 7, + "slug": "hair-transplant", + "svg": "", + "title": { + "fa": "کاشت مو", + "en": "Hair Transplant", + "ar": "زرع الشعر" + }, + "thumbnail": "Picture16.jpg", + "description": { + "fa": "

کاشت مو: یک نوع جراحی تخصصی است که توسط جراح متخصص انجام می‌شود. فولیکول‌های مو از نواحی غیرطاس یا موهای بدن برداشته شده و در نواحی طاس سر کاشته می‌شوند. این عمل باعث ترمیم و رشد دوباره فولیکول‌های آسیب‌دیده می‌شود.

مدت زمان انجام کاشت مو:
روشمدت زمانتوضیحات
FUEیک تا دو روزروز اول: استخراج گرافت‌ها؛ روز دوم: کاشت در ناحیه طاس. برای کاشت سبک‌تر ممکن است یک روزه انجام شود.
FUT۸ تا ۱۰ ساعتبرداشت نوار بافتی، معمولاً یک روز کامل

🔹 کاشت مو تقریباً همیشه تحت بی‌حسی موضعی انجام می‌شود؛ بیهوشی عمومی استفاده نمی‌شود.

مدت زمان بستری در بیمارستان:
نوع بستریتوضیحات
سرپاییصفر روز؛ مشاهده کوتاه در کلینیک پس از کاشت و سپس ترخیص به منزل. بستری در بیمارستان معمولاً ضروری نیست.
پزشکان و ویزیت‌کنندگان:بخش‌های درگیر در کلینیک:", + "en": "

Hair Transplant: A specialized surgical procedure performed by a professional surgeon. Hair follicles are taken from non-bald areas or body hair and implanted into bald areas of the scalp, promoting repair and regrowth of damaged follicles.

Procedure Duration:
MethodDurationDetails
FUE1–2 daysDay 1: Graft extraction; Day 2: Implantation in bald areas. Light transplants may be completed in one day.
FUT8–10 hoursStrip harvesting, typically one full day

🔹 Hair transplant is almost always performed under local anesthesia; general anesthesia is not used.

Hospital Stay:
TypeDetails
OutpatientZero days; brief observation in clinic post-procedure, then discharge home. Hospitalization is usually not required.
Attending Medical Team:Clinic Facilities:", + "ar": "

زراعة الشعر: إجراء جراحي متخصص يتم بواسطة طبيب مختص. يتم أخذ بصيلات الشعر من مناطق غير صلعاء أو من شعر الجسم وزرعها في مناطق فروة الرأس الصلعاء، مما يساعد على إصلاح ونمو البصيلات التالفة.

مدة الإجراء:
الطريقةالمدةالتفاصيل
FUEيوم إلى يوميناليوم الأول: استخراج البصيلات؛ اليوم الثاني: زرعها في المناطق الصلعاء. يمكن إجراء الزراعة الخفيفة في يوم واحد.
FUT8–10 ساعاتاستخراج شريط من الأنسجة، عادة يوم كامل

🔹 زراعة الشعر تُجرى عادة تحت تخدير موضعي؛ التخدير العام لا يُستخدم.

مدة الإقامة في المستشفى:
النوعالتفاصيل
خارجيةصفر يوم؛ مراقبة قصيرة في العيادة بعد الإجراء ثم الخروج للمنزل. الإقامة بالمستشفى عادة غير مطلوبة.
الفريق الطبي:أقسام العيادة:" + }, + "services": { + "fa": "• ارزیابی تراکم مو و بانک مو\n• طراحی خط رویش\n• برداشت و کاشت با دستگاه FUE یا SAFER\n• مراقبت بعد از عمل، دارو، مشاوره 6 ماهه\n• اقامت 1 شب + خدمات VIP", + "en": "• Hair density and donor area assessment\n• Hairline design\n• Extraction and implantation using FUE or SAFER devices\n• Post-operative care, medication, 6-month follow-up\n• 1-night stay + VIP services", + "ar": "• تقييم كثافة الشعر ومنطقة المانح\n• تصميم خط الشعر\n• الاستخراج والزراعة باستخدام أجهزة FUE أو SAFER\n• الرعاية بعد العملية، الأدوية، متابعة لمدة 6 أشهر\n• إقامة ليلة واحدة + خدمات VIP" + }, + "price": { + "fa": "

1,000 – 1,500 دلار
(تا 4,000 گرافت)

", + "en": "

USD 1,000 – 1,500
(up to 4,000 grafts)

", + "ar": "

1,000 – 1,500 دولار أمريكي
(حتى 4,000 بصيلة)

" + } + }, + { + "id": 8, + "slug": "sleeve-surgery", + "svg": "", + "title": { + "fa": "اسلیو", + "en": "Sleeve Surgery", + "ar": "جراحة تكميم المعدة" + }, + "thumbnail": "Picture23.jpg", + "description": { + "fa": "

عمل اسلیو معده یا گاسترکتومی اسلیو یکی از مؤثرترین روش‌های جراحی چاقی است که در آن حدود ۷۵ تا ۸۰ درصد معده برداشته می‌شود و فقط بخشی باریک و لوله‌ای‌ شکل از معده باقی می‌ماند. این عمل به وسیله جراحی لاپاراسکوپی (کم‌تهاجمی) انجام می‌شود، یعنی از طریق سوراخ‌های کوچک در شکم و بدون شکاف بزرگ جراحی.

هدف و مزایای عمل برای بیمار:

مدت زمان عمل و مراحل:

کل مدت عمل جراحی: حدود ۲ تا ۲.۵ ساعت.

مدت بستری و روند بهبودی:

کل مدت بستری در بیمارستان حدود ۳ تا ۴ روز و کل اقامت درمانی پیشنهادی در ایران حدود ۱۰ روز است.

پزشکان و تیم درمان درگیر:

", + + "en": "

Sleeve Gastrectomy (Gastric Sleeve) is one of the most effective bariatric surgeries, in which approximately 75–80% of the stomach is removed, leaving only a narrow, tube-shaped portion. This procedure is performed laparoscopically (minimally invasive), meaning small incisions are made in the abdomen without large surgical cuts.

Objectives and benefits for the patient:

Procedure duration and stages:

Total surgery time: ~2–2.5 hours.

Hospital stay and recovery process:

Total hospital stay: ~3–4 days; total recommended treatment stay in Iran: ~10 days.

Medical team involved:

", + + "ar": "

عملية تكميم المعدة (Sleeve Gastrectomy) هي واحدة من أكثر جراحات السمنة فاعلية، حيث يتم إزالة حوالي ٧٥–٨٠٪ من المعدة ويترك جزء ضيق على شكل أنبوب. تُجرى هذه العملية باستخدام المنظار (جراحة طفيفة التوغل)، أي من خلال فتحات صغيرة في البطن دون شق جراحي كبير.

الأهداف والفوائد للمريض:

مدة العملية ومراحلها:

إجمالي مدة العملية: حوالي ٢–٢.٥ ساعة.

مدة الإقامة في المستشفى ومرحلة التعافي:

إجمالي الإقامة بالمستشفى: حوالي ٣–٤ أيام؛ الإجمالي المقترح للعلاج في إيران: حوالي ١٠ أيام.

الفريق الطبي المشترك:

" + }, + "services": { + "fa": "", + + "en": "", + + "ar": "" + }, + "price": { + "fa": "۴۵۰۰–۷۰۰۰ دلار آمریکا", + "en": "USD 4,500–7,000", + "ar": "٤٥٠٠–٧٠٠٠ دولار أمريكي" + } + }, + { + "id": 9, + "slug": "fat-injection", + "svg": "", + "title": { + "fa": "تزریق چربی به صورت یا بدن", + "en": "Fat Injection to Face or Body", + "ar": "حقن الدهون في الوجه أو الجسم" + }, + "thumbnail": "Picture17.jpg", + "description": { + "fa": "

تزریق چربی به بدن یکی از روش‌های زیبایی است که از چربی‌های اضافی بدن خود فرد استفاده می‌کند. این چربی‌ها پس از برداشت و آماده‌سازی، به بدن مانند صورت، سینه یا باسن تزریق می‌شوند و باعث افزایش اعتماد به نفس می‌شوند.

مدت زمان انجام تزریق چربی:

مجموعاً این پروسیجر بین ۳ تا ۶ ساعت طول می‌کشد. نوع بیهوشی: برای حجم کوچک، بیهوشی موضعی + سدیشن؛ برای حجم بزرگ، بیهوشی عمومی.

مدت زمان بستری در بیمارستان:

✅ نتیجه کلی: بستری برای تزریق وسیع ۱ شب، در غیر این صورت سرپایی.

پزشكان ویزیت‌کننده بیمار:

", + "en": "

Fat grafting is a cosmetic procedure using a patient's own excess fat. The harvested fat is processed and re-injected into areas such as the face, breasts, or buttocks, enhancing volume and boosting confidence.

Procedure Duration:

Total procedure time: 3–6 hours. Anesthesia: Local + sedation for small volumes; general anesthesia for large volumes.

Hospital Stay:

✅ Overall: Expect 1 night stay for extensive fat grafting; otherwise outpatient.

Attending Physicians:

", + "ar": "

حقن الدهون في الجسم هو إجراء تجميلي يستخدم الدهون الزائدة من الجسم نفسه للمريض. يتم جمع الدهون، معالجتها، ثم إعادة حقنها في مناطق مثل الوجه، الثديين أو الأرداف لتعزيز الحجم وزيادة الثقة بالنفس.

مدة العملية:

المدة الإجمالية: 3–6 ساعات. التخدير: موضعي + مهدئ للحجوم الصغيرة؛ عام للحجوم الكبيرة.

مدة الإقامة في المستشفى:

✅ النتيجة العامة: الإقامة لليلة واحدة للحجوم الكبيرة؛ وإلا فهي عملية خارجية.

الأطباء المشرفون:

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "800 – 1,200 دلار", + "en": "USD 800 – 1,200", + "ar": "800 – 1,200 دولار" + } + } + ] + }, + { + "id": 5, + "slug": "orthopedic", + "svg": "OrthopedicSvg", + "is_parent": true, + + "title": { + "fa": "پکیج ارتوپدی", + "en": "Orthopedic Package", + "ar": "باقة العظام" + }, + "content": {}, + "sub_packages": [ + { + "id": 1, + "slug": "hip-replacement", + "svg": "", + "title": { + "fa": "تعویض مفصل ران", + "en": "Hip Joint Replacement", + "ar": "استبدال مفصل الورك" + }, + "thumbnail": "Picture24.jpg", + "description": { + "fa": "

تعویض کامل مفصل ران یک فرآیند جراحی ارتوپدی است که در آن سر استخوان ران و حفره استابولوم در لگن با قطعات پروتزی جایگزین می‌شوند. این عمل معمولاً به دو صورت پستریور (از پشت) یا قدامی (از جلو) انجام می‌گیرد.

هدف و مزایای عمل برای بیمار:

مدت زمان عمل و مراحل:

کل مدت زمان عمل جراحی معمولاً ۳ تا ۴ ساعت است.

مدت بستری و روند بهبودی:

مدت اقامت در بیمارستان معمولاً ۴ تا ۶ روز است.

پزشکان و تیم درمان درگیر:

", + + "en": "

Total Hip Replacement is an orthopedic surgical procedure in which the femoral head and the acetabulum in the pelvis are replaced with prosthetic components when severely affected by arthritis, injury, or necrosis. The surgery is typically performed via posterior (from the back) or anterior (from the front) approach.

Objectives and benefits for the patient:

Duration and stages of surgery:

Total operative time: usually 3–4 hours.

Hospital stay and recovery:

Typical hospital stay: 4–6 days.

Medical team involved:

", + + "ar": "

استبدال مفصل الورك الكامل هو إجراء جراحي عظامي يتم فيه استبدال رأس عظم الفخذ وتجويف الحوض (الاستابولوم) بمكونات صناعية في حال وجود التهاب مفصلي شديد أو إصابة أو نخر. عادةً ما يتم الإجراء بطريقة خلفية (Posterior) أو أمامية (Anterior).

الأهداف والفوائد للمريض:

مدة العملية والمراحل:

المدة الإجمالية للعملية: عادةً 3–4 ساعات.

الإقامة بالمستشفى والتعافي:

مدة الإقامة المعتادة: 4–6 أيام.

الفريق الطبي المعني:

" + }, + "services": { + "fa": "", + + "en": "", + + "ar": "" + }, + "price": { + "fa": "۶۶۰۰–۱۱۷۰۰ دلار آمریکا", + "en": "USD 6,600–11,700", + "ar": "٦٬٦٠٠–١١٬٧٠٠ دولار أمريكي" + } + }, + { + "id": 2, + "slug": "knee-replacement", + "svg": "", + "title": { + "fa": "تعویض مفصل زانو", + "en": "Knee Joint Replacement", + "ar": "استبدال مفصل الركبة" + }, + "thumbnail": "Picture25.jpg", + "description": { + "fa": "

عمل تعویض کامل مفصل زانو (Knee Arthroplasty) یک جراحی ارتوپدی است که در آن سطوح آسیب‌دیده استخوان ران (فمور) و استخوان ساق پا (تیبیا) که معمولاً به دلیل آرتروز شدید، روماتیسم، یا آسیب‌های قبلی دچار فرسودگی شده‌اند، با ایمپلنت‌های فلزی و پلاستیکی جایگزین می‌شوند تا حرکت بدون درد و دامنه حرکتی مناسب بازیابی شود.

مزایای عمل TKR برای بیمار:

مدت زمان عمل و روند جراحی:

مدت بستری و بخش‌های مورد نیاز:

مدت اقامت بیمار: ۳ تا ۵ روز بستری در بیمارستان و حدود ۱۰ تا ۱۴ روز کل اقامت درمانی پیشنهادی در ایران.

نکته کلیدی: موفقیت TKR مستقیماً به کیفیت فیزیوتراپی فشرده زودهنگام بستگی دارد.

پزشکان و تیم ویزیت‌کننده:

", + "en": "

Total Knee Replacement (Knee Arthroplasty) is an orthopedic surgery in which the damaged surfaces of the femur and tibia bones, usually due to severe arthritis, rheumatism, or previous injuries, are replaced with metal and plastic implants to restore painless movement and proper range of motion.

Benefits of TKR for the patient:

Surgery duration and process:

Hospital stay and required units:

Patient stay: 3 to 5 days in hospital and approximately 10 to 14 days total recommended treatment stay in Iran.

Key note: TKR success depends directly on the quality of intensive early physiotherapy.

Attending physicians and team:

", + "ar": "

استبدال كامل لمفصل الركبة (Knee Arthroplasty) هو جراحة عظمية يتم فيها استبدال الأسطح التالفة لعظم الفخذ وعظم الساق (Tibia) الناتجة عادة عن التهاب مفصل شديد، الروماتيزم، أو الإصابات السابقة، بزراعة معدنية وبلاستيكية لاستعادة الحركة بدون ألم والمدى الحركي المناسب.

فوائد TKR للمريض:

مدة الجراحة وعملية العملية:

مدة الإقامة والوحدات المطلوبة:

مدة إقامة المريض: 3 إلى 5 أيام في المستشفى وحوالي 10 إلى 14 يوم إجمالي للإقامة العلاجية المقترحة في إيران.

ملاحظة مهمة: نجاح TKR يعتمد مباشرة على جودة العلاج الطبيعي المكثف في مرحلة مبكرة.

الأطباء والفريق المعالج:

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "5100-9000 دلار آمریکا", + "en": "USD 5100-9000", + "ar": "٥١٠٠-٩٠٠٠ دولار أمريكي" + } + } + ] + }, + { + "id": 6, + "slug": "brain-surgery", + "svg": "BrainSurgerySvg", + "is_parent": true, + + "title": { + "fa": "پکیج جراحی مغز", + "en": "Brain Surgery Package", + "ar": "باقة جراحة الدماغ" + }, + "content": {}, + "sub_packages": [ + { + "id": 1, + "slug": "spinal-fusion", + "svg": "", + "title": { + "fa": "جراحی ستون فقرات (فیوژن)", + "en": "Spinal Surgery (Fusion)", + "ar": "جراحة العمود الفقري (الالتحام)" + }, + "content": {"fa": "", "en": "", "ar": ""} + }, + { + "id": 2, + "slug": "spinal-laminectomy", + "svg": "", + "title": { + "fa": "جراحی ستون فقرات (لامینکتومی)", + "en": "Spinal Surgery (Laminectomy)", + "ar": "جراحة العمود الفقري (استئصال الصفيحة)" + }, + "content": {"fa": "", "en": "", "ar": ""} + }, + { + "id": 3, + "slug": "spinal-discectomy", + "svg": "", + "title": { + "fa": "جراحی ستون فقرات (دیستکتومی)", + "en": "Spinal Surgery (Discectomy)", + "ar": "جراحة العمود الفقري (استئصال القرص)" + }, + "thumbnail": "Picture26.jpg", + "description": { + "fa": "

دیسککتومی یک عمل جراحی است که در آن بخشی از دیسک بین‌مهره‌ای که به سمت کانال نخاعی یا ریشه عصب فشار آورده است (فتق کرده) برداشته می‌شود تا فشار از روی عصب برداشته شده و علائم بیمار مانند درد سیاتیک، بی‌حسی یا ضعف در اندام‌ها کاهش یابد. این عمل معمولاً به صورت میکروسکوپی یا اندوسکوپیک انجام می‌شود که کمترین تهاجم را دارند.

مزایای اصلی:

جزئیات زمان‌بندی و بستری:

تیم پزشکی و ویزیت‌ها:

", + + "en": "

Discectomy is a surgical procedure in which the part of an intervertebral disc that is pressing on the spinal canal or nerve root (herniated) is removed to relieve pressure and alleviate symptoms such as sciatica, numbness, or weakness. It is usually performed microscopically or endoscopically to minimize invasiveness.

Main benefits:

Timing and hospitalization details:

Medical team and visits:

", + + "ar": "

استئصال القرص (Discectomy) هو إجراء جراحي يُزال فيه الجزء من القرص بين الفقرات الذي يضغط على القناة الشوكية أو جذر العصب (المنفتق) لتخفيف الضغط وتقليل أعراض مثل ألم العصب الوركي، وخدر، أو ضعف الأطراف. عادةً ما يُجرى بطريقة مجهرية أو بالمنظار لتقليل التدخل الجراحي.

الفوائد الرئيسية:

تفاصيل الوقت والإقامة في المستشفى:

الفريق الطبي والزيارات:

" + }, + "services": { + "fa": "", + + "en": "", + + "ar": "" + }, + "price": { + "fa": "4500-9000 دلار آمریکا", + "en": "USD 4500-9000", + "ar": "٤٥٠٠-٩٠٠٠ دولار أمريكي" + } + }, + { + "id": 4, + "slug": "craniotomy", + "svg": "", + "title": { + "fa": "کرانيوتومی", + "en": "Craniotomy", + "ar": "فتح الجمجمة" + }, + "content": {"fa": "", "en": "", "ar": ""} + }, + { + "id": 5, + "slug": "skull-base-surgery", + "svg": "", + "title": { + "fa": "جراحی قاعده جمجمه", + "en": "Skull Base Surgery", + "ar": "جراحة قاعدة الجمجمة" + }, + "content": {"fa": "", "en": "", "ar": ""} + }, + { + "id": 6, + "slug": "brain-tumor-surgery", + "svg": "", + "title": { + "fa": "جراحی تومورهای مغزی", + "en": "Brain Tumor Surgery", + "ar": "جراحة أورام المخ" + }, + "thumbnail": "Picture27.webp", + "description": { + "fa": "

جراحی تومور مغزی فرآیندی جراحی است که هدف آن برداشتن کامل (Curative) یا برداشتن حداکثری (Debulking) توده تومور از مغز است. این عمل بسته به محل، اندازه و نوع تومور، می‌تواند شامل کرانیوتومی (برداشتن بخشی از جمجمه برای دسترسی به تومور) باشد. در موارد پیشرفته، ممکن است از تکنیک‌های کم‌تهاجمی مانند جراحی آندوسکوپیک یا ناوبری (Navigation) استفاده شود.

مزایای اصلی برای بیمار:

جنبه‌های زمان‌بندی و بستری:

تیم پزشکی:

", + + "en": "

Brain Tumor Surgery is a surgical procedure aimed at complete (Curative) or maximal (Debulking) removal of a brain tumor. Depending on the location, size, and type of tumor, the surgery may involve a craniotomy (removal of part of the skull to access the tumor). In advanced cases, minimally invasive techniques such as endoscopic surgery or navigation may be used.

Main benefits for the patient:

Scheduling and hospitalization:

Medical team:

", + + "ar": "

جراحة أورام المخ هي إجراء جراحي يهدف إلى إزالة كاملة (Curative) أو جزئية قصوى (Debulking) للورم الدماغي. اعتمادًا على موقع وحجم ونوع الورم، قد تشمل الجراحة فتح الجمجمة (Craniotomy) للوصول إلى الورم. في الحالات المتقدمة، يمكن استخدام تقنيات قليلة التوغل مثل الجراحة بالمنظار أو الملاحة (Navigation).

الفوائد الرئيسية للمريض:

الجدول الزمني والإقامة بالمستشفى:

الفريق الطبي:

" + }, + "services": { + "fa": "", + + "en": "", + + "ar": "" + }, + "price": { + "fa": "10،000-35،000 دلار آمریکا", + "en": "USD 10,000-35,000", + "ar": "١٠٬٠٠٠-٣٥٬٠٠٠ دولار أمريكي" + } + } + ] + }, + { + "id": 7, + "slug": "ent", + "svg": "EntSvg", + "is_parent": true, + + "title": { + "fa": "پکیج گوش و حلق و بینی", + "en": "ENT Package", + "ar": "باقة الأذن والأنف والحنجرة" + }, + "content": {}, + "sub_packages": [ + { + "id": 1, + "slug": "septoplasty", + "svg": "", + "title": { + "fa": "سپتوپلاستی (اصلاح انحراف تیغه بینی)", + "en": "Septoplasty (Correction of Nasal Septum Deviation)", + "ar": "تصحيح انحراف الحاجز الأنفي" + }, + "thumbnail": "Picture18.jpg", + "description": { + "fa": "

سپتوپلاستی یک عمل جراحی برای اصلاح انحراف تیغه بینی است. تیغه بینی (سپتوم) دیواره‌ای است که حفره بینی را به دو قسمت راست و چپ تقسیم می‌کند. در بسیاری از افراد، این تیغه در اثر عوامل مادرزادی یا ضربه، کج شده و باعث انسداد یا دشواری در تنفس می‌شود.

هدف اصلی سپتوپلاستی:

نکات مهم:

مدت زمان انجام سپتوپلاستی:

مدت زمان بستری در بیمارستان:

پزشکان ویزیت‌کننده و بخش‌های بستری:

", + "en": "

Septoplasty is a surgical procedure to correct a deviated nasal septum. The septum is a wall that divides the nasal cavity into left and right sides. In many individuals, the septum may be crooked due to congenital factors or trauma, causing nasal obstruction or difficulty breathing.

Main objective of septoplasty:

Important notes:

Duration of septoplasty:

Hospital stay duration:

Attending physicians and hospital departments:

", + "ar": "

عملية تجميل الحاجز الأنفي (Septoplasty) هي إجراء جراحي لتصحيح انحراف الحاجز الأنفي. الحاجز هو جدار يقسم التجويف الأنفي إلى جانبي الأيمن والأيسر. في العديد من الأشخاص، قد يكون الحاجز منحرفًا بسبب عوامل خلقية أو إصابة، مما يسبب انسداد الأنف أو صعوبة في التنفس.

الهدف الرئيسي من عملية تجميل الحاجز:

ملاحظات مهمة:

مدة إجراء عملية الحاجز الأنفي:

مدة الإقامة في المستشفى:

الأطباء والزوار المعنيون وأقسام المستشفى:

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "1,200 – 1,800 دلار", + "en": "USD 1,200 – 1,800", + "ar": "1,200 – 1,800 دولار أمريكي" + } + }, + { + "id": 2, + "slug": "adenoidectomy-tonsillectomy", + "svg": "", + "title": { + "fa": "آدنوئیدکتومی و/یا لوزه‌برداری", + "en": "Adenoidectomy and/or Tonsillectomy", + "ar": "استئصال اللوزتين و/أو اللحمية" + }, + "thumbnail": "Picture19.png", + "description": { + "fa": "

آدنوئیدها (لوزه‌های سوم) توده‌های بافت لنفاوی هستند که در قسمت فوقانی حلق، پشت حفره بینی (نازوفارنکس) قرار دارند. وظیفه آن‌ها کمک به سیستم ایمنی بدن در مبارزه با عفونت‌ها است.

آدنوئیدکتومی به عمل جراحی برداشتن کامل این بافت گفته می‌شود.

دلایل اصلی انجام این عمل:

مدت زمان انجام آدنوئیدکتومی: این عمل اغلب بین ۳۰ دقیقه تا ۱ ساعت طول می‌کشد و از طریق دهان انجام می‌شود. بیهوشی عمومی معمول است.

مدت زمان بستری در بیمارستان: عمل تقریباً همیشه به‌صورت سرپایی انجام می‌شود و بیمار چند ساعت پس از عمل ترخیص می‌شود.

پزشکان و بخش‌های درگیر:

", + "en": "

Adenoids are lymphatic tissue masses located in the upper part of the throat, behind the nasal cavity (nasopharynx). They help the immune system fight infections.

Adenoidectomy is the surgical removal of this tissue.

Main reasons for the procedure:

Procedure duration: Usually 30 minutes to 1 hour, performed through the mouth. General anesthesia is commonly used.

Hospital stay: Usually outpatient; the patient is discharged a few hours after surgery.

Attending physicians and involved departments:

", + "ar": "

اللوزة الأنفية (أو اللوزة الثالثة) هي كتلة من الأنسجة اللمفاوية تقع في الجزء العلوي من الحلق خلف تجويف الأنف (النازوفارنكس). تساعد هذه اللوزة الجهاز المناعي على مقاومة العدوى.

استئصال اللوزة الأنفية هو عملية جراحية لإزالة هذه الأنسجة بالكامل.

الأسباب الرئيسية لإجراء العملية:

مدة العملية: عادةً من 30 دقيقة إلى ساعة، تُجرى عبر الفم. غالبًا ما يتم استخدام التخدير العام.

مدة الإقامة في المستشفى: العملية عادةً سريرية (يوم واحد)، ويُسمح للمريض بالخروج بعد عدة ساعات من العملية.

الأطباء والأقسام المشاركة:

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "

1,000 – 1,500 دلار
(بسته به سن بیمار و روش جراحی)

", + "en": "

USD 1,000 – 1,500
(Depending on patient's age and surgical method)

", + "ar": "

1,000 – 1,500 دولار أمريكي
(حسب عمر المريض وطريقة الجراحة)

" + } + }, + { + "id": 3, + "slug": "nasal-polypectomy", + "svg": "", + "title": { + "fa": "پلیپ بینی یا سینوس (پولیپکتومی)", + "en": "Nasal or Sinus Polyps (Polypectomy)", + "ar": "زوائد أنفية أو جيبية (استئصال الزوائد)" + }, + "thumbnail": "Picture20.jpg", + "description": { + "fa": "

پولیپکتومی به عمل برداشتن پولیپ‌های بینی یا سینوسی گفته می‌شود. پولیپ‌ها توده‌های کوچک، غیرسرطانی و شبیه قطره اشک هستند که در پوشش داخلی مجاری بینی یا سینوس‌ها رشد می‌کنند.

هدف اصلی:

مدت زمان انجام پولیپکتومی:

نکته: این عمل می‌تواند تحت بیهوشی عمومی یا گاهی با بی‌حسی موضعی همراه با سدیشن عمیق انجام شود.

مدت زمان بستری در بیمارستان:

پزشکان و بخش‌های درگیر:

", + + "en": "

Polypectomy refers to the surgical removal of nasal or sinus polyps. Polyps are small, non-cancerous, tear-shaped growths that develop in the lining of the nasal passages or sinuses.

Main goal:

Procedure duration:

Note: The procedure can be performed under general anesthesia or sometimes with local anesthesia combined with deep sedation.

Hospital stay:

Attending physicians and departments involved:

", + + "ar": "

استئصال السلائل الأنفية هو عملية جراحية لإزالة السلائل من الأنف أو الجيوب الأنفية. السلائل هي نمو صغير وغير سرطاني على شكل دمعة يتطور في بطانة مجرى الأنف أو الجيوب الأنفية.

الهدف الرئيسي:

مدة العملية:

ملاحظة: يمكن إجراء العملية تحت التخدير العام أو أحيانًا تحت التخدير الموضعي مع تهدئة عميقة.

مدة الإقامة في المستشفى:

الأطباء والأقسام المشاركة:

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "1,000 – 1,400 دلار", + "en": "1,000 – 1,400 USD", + "ar": "1,000 – 1,400 دولار" + } + }, + { + "id": 4, + "slug": "rhinoplasty", + "svg": "", + "title": { + "fa": "رینوپلاستی (جراحی بینی)", + "en": "Rhinoplasty (Nose Surgery)", + "ar": "تجميل الأنف" + }, + "thumbnail": "Picture21.png", + "description": { + "fa": "

راینوپلاستی جراحی‌ای است که برای تغییر شکل و اندازه بینی به منظور بهبود ظاهر یا اصلاح مشکلات عملکردی تنفسی (یا هر دو) انجام می‌شود.

اهداف اصلی:

مدت زمان انجام راینوپلاستی: معمولاً بین ۲ تا ۴ ساعت به طول می‌انجامد و بسته به پیچیدگی عمل ممکن است کوتاه‌تر یا طولانی‌تر باشد. جراح می‌تواند از برش‌های داخلی (بسته) یا برش‌های کوچک روی کلوملا (باز) استفاده کند.

مدت زمان بستری در بیمارستان: اغلب سرپایی است و بیمار پس از چند ساعت مرخص می‌شود. در موارد تغییرات ساختاری بزرگ یا شرایط پزشکی خاص، ۱ شب بستری توصیه می‌شود.

پزشکان و بخش‌های درگیر:

پس از ترخیص، بیمار باید از قالب بینی به مدت حدود یک هفته استفاده کند، از فعالیت سنگین پرهیز نماید و داروهای تجویز شده را مصرف کند. تورم اولیه و کبودی در هفته اول شایع است.

", + "en": "

Rhinoplasty is a surgery performed to change the shape and size of the nose to improve appearance or correct functional breathing problems (or both).

Main goals:

Procedure duration: Usually 2 to 4 hours, depending on complexity. Surgeons may use internal incisions (closed) or small external incisions on the columella (open).

Hospital stay: Mostly outpatient; patient discharged after a few hours. For major structural changes or special medical conditions, 1-night stay may be recommended.

Attending physicians and involved departments:

Post-discharge, the patient should wear a nasal splint for about one week, avoid strenuous activity, and follow prescribed medications. Initial swelling and bruising are common in the first week.

", + "ar": "

تجميل الأنف (رينو بلاستي) هو إجراء جراحي لتغيير شكل وحجم الأنف لتحسين المظهر أو تصحيح مشاكل التنفس الوظيفية (أو كلاهما).

الأهداف الرئيسية:

مدة الإجراء: عادةً من 2 إلى 4 ساعات حسب تعقيد العملية. يمكن للجراح استخدام شقوق داخلية (مغلقة) أو شقوق صغيرة خارجية على الكولوميلا (مفتوحة).

مدة الإقامة في المستشفى: غالبًا ما تكون العملية خارجية، ويخرج المريض بعد عدة ساعات. في حال وجود تغييرات هيكلية كبيرة أو حالات طبية خاصة، قد يُوصى بالبقاء ليلة واحدة.

الأطباء والأقسام المشاركة:

بعد الخروج، يجب على المريض ارتداء قالب الأنف لمدة حوالي أسبوع، وتجنب الأنشطة الشاقة، واتباع الأدوية الموصوفة. التورم والكدمات الأولية شائعة في الأسبوع الأول.

" + }, + "services": { + "fa": "", + "en": "", + "ar": "" + }, + "price": { + "fa": "1,500 – 2,500 دلار", + "en": "1,500 – 2,500 USD", + "ar": "1,500 – 2,500 دولار" + } + } + ] + } + ] +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..88e7f98 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.9' + +services: + nextjs: + build: . + ports: + - "3000:3000" + depends_on: + - jsonserver + environment: + NEXT_PUBLIC_API_URL: "http://jsonserver:4000" + + jsonserver: + image: clue/json-server + ports: + - "4000:4000" + volumes: + - ./db.json:/data/db.json + command: json-server --watch /db.json --port 4000 \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..18251cd --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,31 @@ +import {dirname} from "path"; +import {fileURLToPath} from "url"; +import {FlatCompat} from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), + { + rules: { + "react/no-unescaped-entities": "off", + "@next/next/no-page-custom-font": "off", + }, + }, + { + ignores: [ + "node_modules/**", + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ], + }, +]; + +export default eslintConfig; diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..20873fc --- /dev/null +++ b/next.config.ts @@ -0,0 +1,7 @@ +import type {NextConfig} from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..2ab453c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6905 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "next": "15.5.4", + "react": "19.1.0", + "react-dom": "19.1.0", + "react-select": "^5.10.2", + "swiper": "^12.0.2" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "concurrently": "^9.2.1", + "eslint": "^9", + "eslint-config-next": "15.5.4", + "json-server": "^1.0.0-beta.3", + "tailwindcss": "^4", + "typescript": "^5" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", + "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "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" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.5.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.4.tgz", + "integrity": "sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.4.tgz", + "integrity": "sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==", + "dev": true, + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.4.tgz", + "integrity": "sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.4.tgz", + "integrity": "sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.4.tgz", + "integrity": "sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.4.tgz", + "integrity": "sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.4.tgz", + "integrity": "sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.4.tgz", + "integrity": "sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.4.tgz", + "integrity": "sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.4.tgz", + "integrity": "sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "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" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "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" + } + }, + "node_modules/@nodelib/fs.walk": { + "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" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.13.0.tgz", + "integrity": "sha512-2ih5qGw5SZJ+2fLZxP6Lr6Na2NTIgPRL/7Kmyuw0uIyBQnuhQ8fi8fzUTd38eIQmqp+GYLC00cI6WgtqHxBwmw==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.14.tgz", + "integrity": "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==", + "dev": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.0", + "lightningcss": "1.30.1", + "magic-string": "^0.30.19", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.14" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.14.tgz", + "integrity": "sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.5.1" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.14", + "@tailwindcss/oxide-darwin-arm64": "4.1.14", + "@tailwindcss/oxide-darwin-x64": "4.1.14", + "@tailwindcss/oxide-freebsd-x64": "4.1.14", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.14", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.14", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.14", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.14", + "@tailwindcss/oxide-linux-x64-musl": "4.1.14", + "@tailwindcss/oxide-wasm32-wasi": "4.1.14", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.14", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.14" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.14.tgz", + "integrity": "sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.14.tgz", + "integrity": "sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.14.tgz", + "integrity": "sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.14.tgz", + "integrity": "sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.14.tgz", + "integrity": "sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.14.tgz", + "integrity": "sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.14.tgz", + "integrity": "sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.14.tgz", + "integrity": "sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.14.tgz", + "integrity": "sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.14.tgz", + "integrity": "sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.5", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.14.tgz", + "integrity": "sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.14.tgz", + "integrity": "sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.14.tgz", + "integrity": "sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.14", + "@tailwindcss/oxide": "4.1.14", + "postcss": "^8.4.41", + "tailwindcss": "4.1.14" + } + }, + "node_modules/@tinyhttp/accepts": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/accepts/-/accepts-2.2.3.tgz", + "integrity": "sha512-9pQN6pJAJOU3McmdJWTcyq7LLFW8Lj5q+DadyKcvp+sxMkEpktKX5sbfJgJuOvjk6+1xWl7pe0YL1US1vaO/1w==", + "dev": true, + "dependencies": { + "mime": "4.0.4", + "negotiator": "^0.6.3" + }, + "engines": { + "node": ">=12.20.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/app": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/app/-/app-2.5.2.tgz", + "integrity": "sha512-DcB3Y8GQppLQlO2VxRYF7LzTEAoZb+VRQXuIsErcu2fNaM1xdx6NQZDso5rlZUiaeg6KYYRfU34N4XkZbv6jSA==", + "dev": true, + "dependencies": { + "@tinyhttp/cookie": "2.1.1", + "@tinyhttp/proxy-addr": "2.2.1", + "@tinyhttp/req": "2.2.5", + "@tinyhttp/res": "2.2.5", + "@tinyhttp/router": "2.2.3", + "header-range-parser": "1.1.3", + "regexparam": "^2.0.2" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/content-disposition": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/content-disposition/-/content-disposition-2.2.2.tgz", + "integrity": "sha512-crXw1txzrS36huQOyQGYFvhTeLeG0Si1xu+/l6kXUVYpE0TjFjEZRqTbuadQLfKGZ0jaI+jJoRyqaWwxOSHW2g==", + "dev": true, + "engines": { + "node": ">=12.20.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/content-type": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@tinyhttp/content-type/-/content-type-0.1.4.tgz", + "integrity": "sha512-dl6f3SHIJPYbhsW1oXdrqOmLSQF/Ctlv3JnNfXAE22kIP7FosqJHxkz/qj2gv465prG8ODKH5KEyhBkvwrueKQ==", + "dev": true, + "engines": { + "node": ">=12.4" + } + }, + "node_modules/@tinyhttp/cookie": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/cookie/-/cookie-2.1.1.tgz", + "integrity": "sha512-h/kL9jY0e0Dvad+/QU3efKZww0aTvZJslaHj3JTPmIPC9Oan9+kYqmh3M6L5JUQRuTJYFK2nzgL2iJtH2S+6dA==", + "dev": true, + "engines": { + "node": ">=12.20.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tinyhttp/cookie-signature": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/cookie-signature/-/cookie-signature-2.1.1.tgz", + "integrity": "sha512-VDsSMY5OJfQJIAtUgeQYhqMPSZptehFSfvEEtxr+4nldPA8IImlp3QVcOVuK985g4AFR4Hl1sCbWCXoqBnVWnw==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/cors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/cors/-/cors-2.0.1.tgz", + "integrity": "sha512-qrmo6WJuaiCzKWagv2yA/kw6hIISfF/hOqPWwmI6w0o8apeTMmRN3DoCFvQ/wNVuWVdU5J4KU7OX8aaSOEq51A==", + "dev": true, + "dependencies": { + "@tinyhttp/vary": "^0.1.3" + }, + "engines": { + "node": ">=12.20 || 14.x || >=16" + } + }, + "node_modules/@tinyhttp/encode-url": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/encode-url/-/encode-url-2.1.1.tgz", + "integrity": "sha512-AhY+JqdZ56qV77tzrBm0qThXORbsVjs/IOPgGCS7x/wWnsa/Bx30zDUU/jPAUcSzNOzt860x9fhdGpzdqbUeUw==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/etag": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/etag/-/etag-2.1.2.tgz", + "integrity": "sha512-j80fPKimGqdmMh6962y+BtQsnYPVCzZfJw0HXjyH70VaJBHLKGF+iYhcKqzI3yef6QBNa8DKIPsbEYpuwApXTw==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/forwarded": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@tinyhttp/forwarded/-/forwarded-2.1.2.tgz", + "integrity": "sha512-9H/eulJ68ElY/+zYpTpNhZ7vxGV+cnwaR6+oQSm7bVgZMyuQfgROW/qvZuhmgDTIxnGMXst+Ba4ij6w6Krcs3w==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/logger": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@tinyhttp/logger/-/logger-2.1.0.tgz", + "integrity": "sha512-Ma1fJ9CwUbn9r61/4HW6+nflsVoslpOnCrfQ6UeZq7GGIgwLzofms3HoSVG7M+AyRMJpxlfcDdbH5oFVroDMKA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.20", + "dayjs": "^1.11.13", + "http-status-emojis": "^2.2.0" + }, + "engines": { + "node": ">=14.18 || >=16.20" + } + }, + "node_modules/@tinyhttp/proxy-addr": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/proxy-addr/-/proxy-addr-2.2.1.tgz", + "integrity": "sha512-BicqMqVI91hHq2BQmnqJUh0FQUnx7DncwSGgu2ghlh+JZG2rHK2ZN/rXkfhrx1rrUw6hnd0L36O8GPMh01+dDQ==", + "dev": true, + "dependencies": { + "@tinyhttp/forwarded": "2.1.2", + "ipaddr.js": "^2.2.0" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/req": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@tinyhttp/req/-/req-2.2.5.tgz", + "integrity": "sha512-trfsXwtmsNjMcGKcLJ+45h912kLRqBQCQD06ams3Tq0kf4gHLxjHjoYOC1Z9yGjOn81XllRx8wqvnvr+Kbe3gw==", + "dev": true, + "dependencies": { + "@tinyhttp/accepts": "2.2.3", + "@tinyhttp/type-is": "2.2.4", + "@tinyhttp/url": "2.1.1", + "header-range-parser": "^1.1.3" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/res": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@tinyhttp/res/-/res-2.2.5.tgz", + "integrity": "sha512-yBsqjWygpuKAVz4moWlP4hqzwiDDqfrn2mA0wviJAcgvGiyOErtlQwXY7aj3aPiCpURvxvEFO//Gdy6yV+xEpA==", + "dev": true, + "dependencies": { + "@tinyhttp/content-disposition": "2.2.2", + "@tinyhttp/cookie": "2.1.1", + "@tinyhttp/cookie-signature": "2.1.1", + "@tinyhttp/encode-url": "2.1.1", + "@tinyhttp/req": "2.2.5", + "@tinyhttp/send": "2.2.3", + "@tinyhttp/vary": "^0.1.3", + "es-escape-html": "^0.1.1", + "mime": "4.0.4" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/router": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/router/-/router-2.2.3.tgz", + "integrity": "sha512-O0MQqWV3Vpg/uXsMYg19XsIgOhwjyhTYWh51Qng7bxqXixxx2PEvZWnFjP7c84K7kU/nUX41KpkEBTLnznk9/Q==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/send": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/send/-/send-2.2.3.tgz", + "integrity": "sha512-o4cVHHGQ8WjVBS8UT0EE/2WnjoybrfXikHwsRoNlG1pfrC/Sd01u1N4Te8cOd/9aNGLr4mGxWb5qTm2RRtEi7g==", + "dev": true, + "dependencies": { + "@tinyhttp/content-type": "^0.1.4", + "@tinyhttp/etag": "2.1.2", + "mime": "4.0.4" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/type-is": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tinyhttp/type-is/-/type-is-2.2.4.tgz", + "integrity": "sha512-7F328NheridwjIfefBB2j1PEcKKABpADgv7aCJaE8x8EON77ZFrAkI3Rir7pGjopV7V9MBmW88xUQigBEX2rmQ==", + "dev": true, + "dependencies": { + "@tinyhttp/content-type": "^0.1.4", + "mime": "4.0.4" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/url": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@tinyhttp/url/-/url-2.1.1.tgz", + "integrity": "sha512-POJeq2GQ5jI7Zrdmj22JqOijB5/GeX+LEX7DUdml1hUnGbJOTWDx7zf2b5cCERj7RoXL67zTgyzVblBJC+NJWg==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@tinyhttp/vary": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/vary/-/vary-0.1.3.tgz", + "integrity": "sha512-SoL83sQXAGiHN1jm2VwLUWQSQeDAAl1ywOm6T0b0Cg1CZhVsjoiZadmjhxF6FHCCY7OHHVaLnTgSMxTPIDLxMg==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "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==", + "dev": true + }, + "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/node": { + "version": "20.19.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.19.tgz", + "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/react": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.1.tgz", + "integrity": "sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==", + "dev": true, + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", + "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/type-utils": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.46.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz", + "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", + "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.0", + "@typescript-eslint/types": "^8.46.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", + "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", + "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", + "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", + "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", + "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.46.0", + "@typescript-eslint/tsconfig-utils": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/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/utils": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", + "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", + "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.46.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "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" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "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.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "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.7", + "define-properties": "^1.2.1", + "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": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001749", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001749.tgz", + "integrity": "sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "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/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "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/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dev": true, + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-escape-html": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/es-escape-html/-/es-escape-html-0.1.1.tgz", + "integrity": "sha512-yUx1o+8RsG7UlszmYPtks+dm6Lho2m8lgHMOsLJQsFI0R8XwUJwiMhM1M4E/S8QLeGyf6MkDV/pWgjQ0tdTSyQ==", + "dev": true, + "engines": { + "node": ">=12.x" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.4.tgz", + "integrity": "sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "15.5.4", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "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 || ^9.0.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-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "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" + } + }, + "node_modules/eta": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-3.5.0.tgz", + "integrity": "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.12.0.tgz", + "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "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" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-range-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/header-range-parser/-/header-range-parser-1.1.3.tgz", + "integrity": "sha512-B9zCFt3jH8g09LR1vHL4pcAn8yMEtlSlOUdQemzHMRKMImNIhhszdeosYFfNW0WXKQtXIlWB+O4owHJKvEJYaA==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/http-status-emojis": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http-status-emojis/-/http-status-emojis-2.2.0.tgz", + "integrity": "sha512-ompKtgwpx8ff0hsbpIB7oE4ax1LXoHmftsHHStMELX56ivG3GhofTX8ZHWlUaFKfGjcGjw6G3rPk7dJRXMmbbg==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "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" + } + }, + "node_modules/inflection": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-3.0.2.tgz", + "integrity": "sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==", + "dev": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "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==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "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==", + "dev": true + }, + "node_modules/json-server": { + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/json-server/-/json-server-1.0.0-beta.3.tgz", + "integrity": "sha512-DwE69Ep5ccwIJZBUIWEENC30Yj8bwr4Ax9W9VoIWAYnB8Sj4ReptscO8/DRHv/nXwVlmb3Bk73Ls86+VZdYkkA==", + "dev": true, + "dependencies": { + "@tinyhttp/app": "^2.4.0", + "@tinyhttp/cors": "^2.0.1", + "@tinyhttp/logger": "^2.0.0", + "chalk": "^5.3.0", + "chokidar": "^4.0.1", + "dot-prop": "^9.0.0", + "eta": "^3.5.0", + "inflection": "^3.0.0", + "json5": "^2.2.3", + "lowdb": "^7.0.1", + "milliparsec": "^4.0.0", + "sirv": "^2.0.4", + "sort-on": "^6.1.0" + }, + "bin": { + "json-server": "lib/bin.js" + }, + "engines": { + "node": ">=18.3" + } + }, + "node_modules/json-server/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/json-server/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true + }, + "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/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "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/levn": { + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowdb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-7.0.1.tgz", + "integrity": "sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==", + "dev": true, + "dependencies": { + "steno": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/milliparsec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/milliparsec/-/milliparsec-4.0.0.tgz", + "integrity": "sha512-/wk9d4Z6/9ZvoEH/6BI4TrTCgmkpZPuSRN/6fI9aUHOfXdNTuj/VhLS7d+NqG26bi6L9YmGXutVYvWC8zQ0qtA==", + "dev": true, + "engines": { + "node": ">=20" + } + }, + "node_modules/mime": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next": { + "version": "15.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.4.tgz", + "integrity": "sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==", + "dependencies": { + "@next/env": "15.5.4", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.5.4", + "@next/swc-darwin-x64": "15.5.4", + "@next/swc-linux-arm64-gnu": "15.5.4", + "@next/swc-linux-arm64-musl": "15.5.4", + "@next/swc-linux-x64-gnu": "15.5.4", + "@next/swc-linux-x64-musl": "15.5.4", + "@next/swc-win32-arm64-msvc": "15.5.4", + "@next/swc-win32-x64-msvc": "15.5.4", + "sharp": "^0.34.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "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.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.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "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" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "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", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-select": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz", + "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexparam": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.2.tgz", + "integrity": "sha512-A1PeDEYMrkLrfyOwv2jwihXbo9qxdGD3atBYQA9JJgreAx8/7rC6IUkWOw2NQlOxLp2wL0ifQbh1HuidDfYA6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "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", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "devOptional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sort-on": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-6.1.1.tgz", + "integrity": "sha512-PB8pVvXAoRBijBCvuKJnmo06D8mSnQlLij0abfB2VdOpfFm29sPGYD4ft2prUPo1AZXTnkn3pP48AppRWyMkrw==", + "dev": true, + "dependencies": { + "dot-prop": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true + }, + "node_modules/steno": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/steno/-/steno-4.0.2.tgz", + "integrity": "sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/supports-color": { + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swiper": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-12.0.2.tgz", + "integrity": "sha512-y8F6fDGXmTVVgwqJj6I00l4FdGuhpFJn0U/9Ucn1MwWOw3NdLV8aH88pZOjyhBgU/6PyBlUx+JuAQ5KMWz906Q==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "engines": { + "node": ">= 4.7.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.14.tgz", + "integrity": "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "dev": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "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/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c89063c --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "concurrently \"next dev\" \"json-server --watch db.json --port 4000\"", + "build": "next build", + "start": "next start", + "lint": "eslint", + "json-server": "json-server --watch db.json --port 4000", + "app": "npm run json-server & npm run dev" + }, + "dependencies": { + "next": "15.5.4", + "react": "19.1.0", + "react-dom": "19.1.0", + "react-select": "^5.10.2", + "swiper": "^12.0.2" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "concurrently": "^9.2.1", + "eslint": "^9", + "eslint-config-next": "15.5.4", + "json-server": "^1.0.0-beta.3", + "tailwindcss": "^4", + "typescript": "^5" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..c7bcb4b --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ["@tailwindcss/postcss"], +}; + +export default config; diff --git a/public/1daad534bbd4cd30c325dde4746d01bcc3752e98.jpg b/public/1daad534bbd4cd30c325dde4746d01bcc3752e98.jpg new file mode 100644 index 0000000..5be8160 Binary files /dev/null and b/public/1daad534bbd4cd30c325dde4746d01bcc3752e98.jpg differ diff --git a/public/NICU.mp4 b/public/NICU.mp4 new file mode 100644 index 0000000..6dc0007 Binary files /dev/null and b/public/NICU.mp4 differ diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000..8d30bbc Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000..8c0cb55 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..b655733 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/bank-melat.png b/public/bank-melat.png new file mode 100644 index 0000000..6c23f24 Binary files /dev/null and b/public/bank-melat.png differ diff --git a/public/bimeh-ma.png b/public/bimeh-ma.png new file mode 100644 index 0000000..51038dc Binary files /dev/null and b/public/bimeh-ma.png differ diff --git a/public/bimeh-moallem.png b/public/bimeh-moallem.png new file mode 100644 index 0000000..2c1709b Binary files /dev/null and b/public/bimeh-moallem.png differ diff --git a/public/bimeh-novin.png b/public/bimeh-novin.png new file mode 100644 index 0000000..e9b427b Binary files /dev/null and b/public/bimeh-novin.png differ diff --git a/public/bimeh-pasargad.png b/public/bimeh-pasargad.png new file mode 100644 index 0000000..5a7d4ff Binary files /dev/null and b/public/bimeh-pasargad.png differ diff --git a/public/bimeh-saman.png b/public/bimeh-saman.png new file mode 100644 index 0000000..9e33f15 Binary files /dev/null and b/public/bimeh-saman.png differ diff --git a/public/bimeh-tejarat-no.png b/public/bimeh-tejarat-no.png new file mode 100644 index 0000000..189138d Binary files /dev/null and b/public/bimeh-tejarat-no.png differ diff --git a/public/doctor.png b/public/doctor.png new file mode 100644 index 0000000..c29ab75 Binary files /dev/null and b/public/doctor.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..c185906 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..b6ff4e4 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..51d140a Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/file.svg b/public/file.svg new file mode 100644 index 0000000..004145c --- /dev/null +++ b/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/fonts/sogand/SOGAND.ttf b/public/fonts/sogand/SOGAND.ttf new file mode 100644 index 0000000..fdee227 Binary files /dev/null and b/public/fonts/sogand/SOGAND.ttf differ diff --git a/public/fonts/vazir/Vazirmatn-Black.woff2 b/public/fonts/vazir/Vazirmatn-Black.woff2 new file mode 100644 index 0000000..f08cace Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-Black.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-Bold.woff2 b/public/fonts/vazir/Vazirmatn-Bold.woff2 new file mode 100644 index 0000000..65b427f Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-Bold.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-ExtraBold.woff2 b/public/fonts/vazir/Vazirmatn-ExtraBold.woff2 new file mode 100644 index 0000000..c074e70 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-ExtraBold.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-ExtraLight.woff2 b/public/fonts/vazir/Vazirmatn-ExtraLight.woff2 new file mode 100644 index 0000000..997dea0 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-ExtraLight.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-Light.woff2 b/public/fonts/vazir/Vazirmatn-Light.woff2 new file mode 100644 index 0000000..d154722 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-Light.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-Medium.woff2 b/public/fonts/vazir/Vazirmatn-Medium.woff2 new file mode 100644 index 0000000..495af75 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-Medium.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-Regular.woff2 b/public/fonts/vazir/Vazirmatn-Regular.woff2 new file mode 100644 index 0000000..c9824c8 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-Regular.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-SemiBold.woff2 b/public/fonts/vazir/Vazirmatn-SemiBold.woff2 new file mode 100644 index 0000000..5301641 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-SemiBold.woff2 differ diff --git a/public/fonts/vazir/Vazirmatn-Thin.woff2 b/public/fonts/vazir/Vazirmatn-Thin.woff2 new file mode 100644 index 0000000..b7df278 Binary files /dev/null and b/public/fonts/vazir/Vazirmatn-Thin.woff2 differ diff --git a/public/globe.svg b/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/header-slider-1.webp b/public/header-slider-1.webp new file mode 100644 index 0000000..dbebc3e Binary files /dev/null and b/public/header-slider-1.webp differ diff --git a/public/heidarnejad.jpg b/public/heidarnejad.jpg new file mode 100644 index 0000000..0e249df Binary files /dev/null and b/public/heidarnejad.jpg differ diff --git a/public/heidarnejad.webp b/public/heidarnejad.webp new file mode 100644 index 0000000..1ebf7c1 Binary files /dev/null and b/public/heidarnejad.webp differ diff --git a/public/main-logo-blue.png b/public/main-logo-blue.png new file mode 100644 index 0000000..0075781 Binary files /dev/null and b/public/main-logo-blue.png differ diff --git a/public/main-logo.png b/public/main-logo.png new file mode 100644 index 0000000..87318d8 Binary files /dev/null and b/public/main-logo.png differ diff --git a/public/motamedi.jpg b/public/motamedi.jpg new file mode 100644 index 0000000..05588e5 Binary files /dev/null and b/public/motamedi.jpg differ diff --git a/public/motamedi.webp b/public/motamedi.webp new file mode 100644 index 0000000..4c93497 Binary files /dev/null and b/public/motamedi.webp differ diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/packages/Picture1.jpg b/public/packages/Picture1.jpg new file mode 100644 index 0000000..8a0f51d Binary files /dev/null and b/public/packages/Picture1.jpg differ diff --git a/public/packages/Picture10.jpg b/public/packages/Picture10.jpg new file mode 100644 index 0000000..5304c5b Binary files /dev/null and b/public/packages/Picture10.jpg differ diff --git a/public/packages/Picture11.jpg b/public/packages/Picture11.jpg new file mode 100644 index 0000000..6eeaee7 Binary files /dev/null and b/public/packages/Picture11.jpg differ diff --git a/public/packages/Picture12.jpg b/public/packages/Picture12.jpg new file mode 100644 index 0000000..c7a2030 Binary files /dev/null and b/public/packages/Picture12.jpg differ diff --git a/public/packages/Picture13.jpg b/public/packages/Picture13.jpg new file mode 100644 index 0000000..f863077 Binary files /dev/null and b/public/packages/Picture13.jpg differ diff --git a/public/packages/Picture14.jpg b/public/packages/Picture14.jpg new file mode 100644 index 0000000..0c8b268 Binary files /dev/null and b/public/packages/Picture14.jpg differ diff --git a/public/packages/Picture15.jpg b/public/packages/Picture15.jpg new file mode 100644 index 0000000..c61ff37 Binary files /dev/null and b/public/packages/Picture15.jpg differ diff --git a/public/packages/Picture16.jpg b/public/packages/Picture16.jpg new file mode 100644 index 0000000..bb95715 Binary files /dev/null and b/public/packages/Picture16.jpg differ diff --git a/public/packages/Picture17.jpg b/public/packages/Picture17.jpg new file mode 100644 index 0000000..59f60f0 Binary files /dev/null and b/public/packages/Picture17.jpg differ diff --git a/public/packages/Picture18.jpg b/public/packages/Picture18.jpg new file mode 100644 index 0000000..356b176 Binary files /dev/null and b/public/packages/Picture18.jpg differ diff --git a/public/packages/Picture19.png b/public/packages/Picture19.png new file mode 100644 index 0000000..6aac476 Binary files /dev/null and b/public/packages/Picture19.png differ diff --git a/public/packages/Picture2.jpg b/public/packages/Picture2.jpg new file mode 100644 index 0000000..f062ba7 Binary files /dev/null and b/public/packages/Picture2.jpg differ diff --git a/public/packages/Picture20.jpg b/public/packages/Picture20.jpg new file mode 100644 index 0000000..9fc7cfe Binary files /dev/null and b/public/packages/Picture20.jpg differ diff --git a/public/packages/Picture21.png b/public/packages/Picture21.png new file mode 100644 index 0000000..c630a55 Binary files /dev/null and b/public/packages/Picture21.png differ diff --git a/public/packages/Picture22.jpg b/public/packages/Picture22.jpg new file mode 100644 index 0000000..93cfc36 Binary files /dev/null and b/public/packages/Picture22.jpg differ diff --git a/public/packages/Picture23.jpg b/public/packages/Picture23.jpg new file mode 100644 index 0000000..a44e80f Binary files /dev/null and b/public/packages/Picture23.jpg differ diff --git a/public/packages/Picture24.jpg b/public/packages/Picture24.jpg new file mode 100644 index 0000000..cc06860 Binary files /dev/null and b/public/packages/Picture24.jpg differ diff --git a/public/packages/Picture25.jpg b/public/packages/Picture25.jpg new file mode 100644 index 0000000..3d3f0e4 Binary files /dev/null and b/public/packages/Picture25.jpg differ diff --git a/public/packages/Picture26.jpg b/public/packages/Picture26.jpg new file mode 100644 index 0000000..62fbf6e Binary files /dev/null and b/public/packages/Picture26.jpg differ diff --git a/public/packages/Picture27.webp b/public/packages/Picture27.webp new file mode 100644 index 0000000..cf2bfd7 Binary files /dev/null and b/public/packages/Picture27.webp differ diff --git a/public/packages/Picture3.jpg b/public/packages/Picture3.jpg new file mode 100644 index 0000000..e399bef Binary files /dev/null and b/public/packages/Picture3.jpg differ diff --git a/public/packages/Picture4.jpg b/public/packages/Picture4.jpg new file mode 100644 index 0000000..22ba230 Binary files /dev/null and b/public/packages/Picture4.jpg differ diff --git a/public/packages/Picture5.jpg b/public/packages/Picture5.jpg new file mode 100644 index 0000000..f4327f1 Binary files /dev/null and b/public/packages/Picture5.jpg differ diff --git a/public/packages/Picture6.jpg b/public/packages/Picture6.jpg new file mode 100644 index 0000000..7a7185d Binary files /dev/null and b/public/packages/Picture6.jpg differ diff --git a/public/packages/Picture6.webp b/public/packages/Picture6.webp new file mode 100644 index 0000000..21eb926 Binary files /dev/null and b/public/packages/Picture6.webp differ diff --git a/public/packages/Picture7.jpg b/public/packages/Picture7.jpg new file mode 100644 index 0000000..11c62c5 Binary files /dev/null and b/public/packages/Picture7.jpg differ diff --git a/public/packages/Picture8.png b/public/packages/Picture8.png new file mode 100644 index 0000000..b4f4917 Binary files /dev/null and b/public/packages/Picture8.png differ diff --git a/public/packages/Picture9.jpg b/public/packages/Picture9.jpg new file mode 100644 index 0000000..7209f69 Binary files /dev/null and b/public/packages/Picture9.jpg differ diff --git a/public/select-doctor-reservation.png b/public/select-doctor-reservation.png new file mode 100644 index 0000000..45e368b Binary files /dev/null and b/public/select-doctor-reservation.png differ diff --git a/public/shomal-logo-main.webp b/public/shomal-logo-main.webp new file mode 100644 index 0000000..d5c8597 Binary files /dev/null and b/public/shomal-logo-main.webp differ diff --git a/public/shomalhospital-ipd-logo-edited.png b/public/shomalhospital-ipd-logo-edited.png new file mode 100644 index 0000000..40eae2f Binary files /dev/null and b/public/shomalhospital-ipd-logo-edited.png differ diff --git a/public/shomalhospital-ipd-logo.jpg b/public/shomalhospital-ipd-logo.jpg new file mode 100644 index 0000000..d687f5e Binary files /dev/null and b/public/shomalhospital-ipd-logo.jpg differ diff --git a/public/shomalhospital-ipd-logo.png b/public/shomalhospital-ipd-logo.png new file mode 100644 index 0000000..a8757ed Binary files /dev/null and b/public/shomalhospital-ipd-logo.png differ diff --git a/public/transfer-packages/Picture1.jpg b/public/transfer-packages/Picture1.jpg new file mode 100644 index 0000000..30120a5 Binary files /dev/null and b/public/transfer-packages/Picture1.jpg differ diff --git a/public/transfer-packages/Picture2.jpg b/public/transfer-packages/Picture2.jpg new file mode 100644 index 0000000..b3dc640 Binary files /dev/null and b/public/transfer-packages/Picture2.jpg differ diff --git a/public/transfer-packages/Picture3.jpg b/public/transfer-packages/Picture3.jpg new file mode 100644 index 0000000..ac8f6dc Binary files /dev/null and b/public/transfer-packages/Picture3.jpg differ diff --git a/public/transfer-packages/Picture4.jpg b/public/transfer-packages/Picture4.jpg new file mode 100644 index 0000000..af755c0 Binary files /dev/null and b/public/transfer-packages/Picture4.jpg differ diff --git a/public/transfer-packages/Picture5.jpg b/public/transfer-packages/Picture5.jpg new file mode 100644 index 0000000..ab5acb1 Binary files /dev/null and b/public/transfer-packages/Picture5.jpg differ diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/window.svg b/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/[lang]/contact-us/page.tsx b/src/app/[lang]/contact-us/page.tsx new file mode 100644 index 0000000..d3e0f0b --- /dev/null +++ b/src/app/[lang]/contact-us/page.tsx @@ -0,0 +1,225 @@ +import {languages_types} from "@/types"; +import TelephoneSvg from "@/ui/components/icons/TelephoneSvg"; +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import Image from "next/image"; +import React from "react"; +import {getDictionary} from "../dictionaries"; +import PatientAcceptForm from "@/ui/forms/PatientAcceptForm"; +import { default_info, pages_titles } from "@/constants"; +import { Metadata } from "next"; +export const metadata: Metadata = { + title: pages_titles.contact_us['fa'] + ' | ' +'بیمارستان شمال', + description: "Shomal Hospital IPD contact us page", +}; +export default async function ContactUs({ + params, +}: { + params: Promise<{lang: languages_types}>; +}) { + const {lang} = await params; + const {contact_us_page, about_page, footer, accept_request_form} = + await getDictionary(lang); + return ( + <> + +
+
+
+
+
+
+ doctor +
+
+
+
+

+ {about_page?.heidarnejad?.name} +

+ + {about_page?.heidarnejad?.expertise} + + + {about_page?.heidarnejad?.position} + +
+
+
+
+
+
+ + + + + {footer?.contact_us?.ipd_technician_number} + +
+
+ + + + + + + {default_info.email} + +
+
+
+
+
+
+
+
+

+ {contact_us_page?.info_box_title} +

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

+ {accept_request_form?.head_text} +

+

+ {about_page?.form?.sub_text} +

+ +
+
+ + ); +} diff --git a/src/app/[lang]/dictionaries.ts b/src/app/[lang]/dictionaries.ts new file mode 100644 index 0000000..42b8edf --- /dev/null +++ b/src/app/[lang]/dictionaries.ts @@ -0,0 +1,11 @@ +import { languages_types } from "@/types"; +import "server-only"; + +const dictionaries = { + en: () => import("./dictionaries/en.json").then((module) => module.default), + fa: () => import("./dictionaries/fa.json").then((module) => module.default), + ar: () => import("./dictionaries/ar.json").then((module) => module.default), +}; + +export const getDictionary = async (locale: languages_types) => + dictionaries[locale](); diff --git a/src/app/[lang]/dictionaries/ar.json b/src/app/[lang]/dictionaries/ar.json new file mode 100644 index 0000000..2615e7a --- /dev/null +++ b/src/app/[lang]/dictionaries/ar.json @@ -0,0 +1,232 @@ +{ + "products": { + "cart": "أضف إلى السلة" + }, + "about_page": { + "page_title": "من نحن", + "introduction": "مقدمة عن قسم المرضى الدوليين", + "introduction_description_headText": "تأسس مستشفى شُمَال التخصصي وفوق التخصصي عام 2013 بهدف رفع مستوى الرعاية الصحية والخدمات الطبية في مدينة آمل ومناطق شمال إيران. يُعد أحد أوائل المستشفيات الخاصة الحديثة في محافظة مازندران، حيث بدأ نشاطه بـ 150 سريراً وبنى تحتية متطورة. وخلال عقد من الزمن، استطاع مستشفى شُمَال من خلال تطوير أقسامه التخصصية والباراكلينيكية، واستقطاب الكوادر الطبية المتميزة، وتجهيزه بأحدث التقنيات الطبية، أن يصبح من أبرز المراكز العلاجية في المنطقة. اليوم، وبفضل غرف العمليات المجهزة، وأقسام العناية المركزة (ICU، CCU، NICU)، وقسم الطوارئ على مدار الساعة، والعيادات التخصصية، وخدمات التصوير والمختبرات، يلبي المستشفى احتياجات المرضى المتزايدة من آمل والمدن المجاورة وحتى المرضى الدوليين. يلتزم مستشفى شُمَال بمبادئ الجودة وكرامة الإنسان والمسؤولية والابتكار، ويواصل رؤيته ليكون من المؤسسات الطبية الرائدة في شمال البلاد.", + "introduction_description_subText": "
  • ترخيص رسمي من وزارة الصحة
  • اعتماد وطني من الدرجة الأولى
  • أكثر من 12 عامًا من الخبرة
  • فريق متعدد اللغات (الإنجليزية، العربية، التركية)
  • مرافقة شاملة من لحظة الوصول حتى الخروج
  • تكاليف مناسبة مع خدمات طبية عالية الجودة
  • خدمات مميزة تشمل النقل من المطار، غرف VIP، مترجمين، جولات سياحية، شواطئ بحر قزوين، غابات هيركاني، ومناطق جبلية مطلة على قمة دماوند
", + "department_introduction": "فريق قسم المرضى الدوليين", + "department_introduction_subtitle": "هدفنا هو أن تشعروا بالراحة والأمان والمساندة في جميع مراحل علاجكم — من الاستشارة الأولى حتى العودة إلى وطنكم.", + "dr_jafarian": { + "name": "الدكتور محسن جعفريان", + "expertise": "دكتوراه في إدارة الخدمات الصحية", + "position": "مدير المستشفى / مدير قسم المرضى الدوليين" + }, + "dr_motamedi": { + "name": "الدكتور حسن معتمدي مطلق", + "expertise": "اختصاصي طب الطوارئ", + "position": "طبيب المرضى الدوليين" + }, + "heidarnejad": { + "name": "رويا حيدرنژاد", + "expertise": "فني الطوارئ الطبية", + "position": "منسقة المرضى الدوليين" + }, + "form": { + "head_text": "هل تحتاج إلى استشارة طبية؟", + "sub_text": "يرجى إرسال معلومات حول حالتك الصحية، وسنتواصل معك في أقرب وقت ممكن.", + "fields": { + "first_name": "الاسم الأول", + "last_name": "اسم العائلة", + "email": "البريد الإلكتروني", + "sex": "الجنس", + "country": "بلدك", + "services": "اختر أحد باقات الخدمات الطبية", + "phone_number": "رقم الهاتف", + "age": "العمر", + "message": "صف حالتك الصحية" + }, + "buttons": { + "send_whatsapp": "إرسال عبر واتساب", + "send_email": "إرسال عبر البريد الإلكتروني" + } + } + }, + "pricing_page": { + "page_title": "قائمة الأسعار", + "table": { + "head": [ + {"name": "اسم الباقة"}, + {"name": "اسم الخدمة"}, + {"name": "نطاق السعر (دولار أمريكي)"} + ] + } + }, + "patient_rights_charter": { + "page_title": "ميثاق حقوق المرضى", + "section_one": { + "title": "الحصول على خدمات صحية مثلى هو حق المريض", + "content": "
    \n
  • تقديم خدمات كريمة ومحترمة تحترم قيمة الإنسان والمعتقدات الثقافية والدينية.
  • \n
  • تقديم الخدمات على أساس الصدق والإنصاف والاحترام واللطف.
  • \n
  • خالية من أي تمييز بما في ذلك العرقي أو الثقافي أو الديني أو نوع المرض أو الجنس.
  • \n
  • استنادًا إلى المعرفة الحديثة وإعطاء الأولوية لمصلحة المريض.
  • \n
  • تضمن عدالة توزيع الموارد الصحية وأولوية احتياجات علاج المرضى.
  • \n
  • تنسيق جميع جوانب الرعاية بما في ذلك الوقاية والتشخيص والعلاج وإعادة التأهيل.
  • \n
  • توفير المرافق الأساسية مع تجنب الألم والمعاناة أو القيود غير الضرورية.
  • \n
  • إيلاء اهتمام خاص لحقوق الفئات الضعيفة مثل الأطفال والنساء الحوامل وكبار السن والمرضى النفسيين والسجناء والمعاقين عقليًا وجسديًا والأفراد غير المصحوبين.
  • \n
  • تقديم الخدمات بسرعة مع احترام وقت المريض ومراعاة عوامل مثل اللغة والعمر والجنس.
  • \n
  • تقديم الرعاية الطارئة والعاجلة بغض النظر عن التكلفة؛ يجب أن تتبع الرعاية غير الطارئة اللوائح المحددة.
  • \n
  • إذا لم يكن من الممكن تقديم الخدمات المناسبة في حالات الطوارئ، يتم ترتيب النقل إلى وحدة مجهزة بعد تقديم الرعاية الضرورية والتوضيحات.
  • \n
  • في مراحل نهاية الحياة حيث يكون المرض غير قابل للشفاء والوفاة وشيكة، يجب تقديم الخدمات لضمان راحة المريض.
  • \n
" + }, + "section_two": { + "title": "يجب تزويد المريض بالمعلومات بشكل مناسب وكافٍ", + "content": "
    \n
  • بنود ميثاق حقوق المرضى عند القبول.
  • \n
  • لوائح وتكاليف متوقعة للمستشفى، بما في ذلك الخدمات الطبية وغير الطبية، ولوائح التأمين، وتقديم نظم الدعم عند القبول.
  • \n
  • أسماء ومسؤوليات ورتبة أعضاء الفريق الطبي المسؤول عن تقديم الرعاية، بما في ذلك الأطباء والممرضين والطلاب، وتفاعلاتهم المهنية.
  • \n
  • طرق التشخيص والعلاج، نقاط القوة والضعف لكل طريقة، الآثار الجانبية المحتملة، تشخيص المرض، التنبؤ به، وكل المعلومات المؤثرة على اتخاذ قرار المريض.
  • \n
  • الوصول إلى الطبيب المعالج وأعضاء الفريق الطبي الرئيسيين أثناء العلاج، وتقديم التدريب الضروري لاستمرارية العلاج، وجميع الإجراءات ذات الطبيعة البحثية.
  • \n
  • يجب تقديم المعلومات في الوقت المناسب وبشكل مناسب وفقًا لظروف المريض، بما في ذلك القلق، الألم، والخصائص الفردية مثل اللغة والتعليم والقدرة على الفهم، ما لم يتسبب تأخير العلاج بسبب المعلومات في ضرر للمريض، أو إذا رفض المريض المعلومات رغم معرفته بحقوقه؛ في هذه الحالة يجب احترام إرادة المريض، ما لم يؤد عدم المعرفة إلى وضعه أو الآخرين في خطر جديد.
  • \n
  • يمكن للمريض الوصول إلى جميع المعلومات المسجلة في ملفه الطبي، والحصول على نسخة منها، وطلب تصحيح أي أخطاء.
  • \n
" + }, + "section_three": { + "title": "يجب احترام حق المريض في الاختيار واتخاذ القرارات بحرية", + "content": "
    \n
  • اختيار الطبيب المعالج ومركز تقديم الخدمات الصحية ضمن الإطار التنظيمي، وكذلك استشارة طبيب ثانٍ كمستشار.
  • \n
  • المشاركة أو عدم المشاركة في أي بحث، مع التأكد من أن القرار لا يؤثر على استمرارية أو طريقة تلقي الخدمات الصحية.
  • \n
  • قبول أو رفض العلاجات المقترحة بعد فهم المخاطر المحتملة؛ باستثناء حالات الانتحار أو عندما يؤدي الرفض إلى تعريض شخص آخر للخطر.
  • \n
  • يجب تسجيل تصريحات المريض السابقة حول العلاجات المستقبلية عندما يكون قادرًا على اتخاذ القرار، واستخدامها كدليل للإجراءات الطبية في حالة فقدان القدرة، مع الالتزام بالأحكام القانونية.
  • \n
  • يجب أن يكون اختيار المريض واتخاذ القرار حرًا ومستنيرًا ومستندًا إلى معلومات كافية وشاملة (كما هو موضح أعلاه).
  • \n
  • بعد تقديم المعلومات، يجب منح المريض الوقت الكافي لاتخاذ قرارات مستنيرة.
  • \n
" + }, + "section_four": { + "title": "الوصول إلى نظام فعال لمعالجة الشكاوى هو حق المريض", + "content": "
    \n
  • يحق لكل مريض تقديم شكوى إلى السلطات المختصة في حال الاشتباه بانتهاك حقوقه المنصوص عليها في هذا الميثاق، دون التأثير على جودة الخدمات الصحية المقدمة.
  • \n
  • يحق للمرضى معرفة كيفية معالجة شكواهم ونتائجها.
  • \n
  • يجب تعويض الأضرار الناجمة عن أخطاء مقدمي الخدمات الصحية بسرعة بعد المراجعة والتحقق، وفقًا للأنظمة.
  • \n
" + } + }, + "accept_request_form": { + "head_text": "نموذج القبول الأولي للمريض" + }, + "contact_us_page": { + "page_title": "اتصل بنا", + "info_box_title": "ابق على تواصل معنا" + }, + "footer": { + "under_logo_text": "يتكوّن فريق المرضى الدوليين في مستشفى شُمَال من مجموعة من المتخصصين في الرعاية الصحية والمترجمين الطبيين ومستشاري السفر العلاجي، الذين يقدمون الدعم للمرضى الدوليين على مدار الساعة وبعدة لغات. هدفنا أن تشعروا بالراحة والأمان والمساندة في جميع مراحل علاجكم — من الاستشارة الأولى حتى عودتكم سالمين إلى وطنكم.", + "our_address": "عنواننا", + "ipd_technician_number": "رقم فني قسم المرضى الدوليين", + "hospital_number": "رقم المستشفى", + "contact_us_text": "تواصل معنا", + "contact_us": { + "address": "إيران، مازندران، آمل، شارع المدرس، آفـتاب ٤٧، مستشفى شُمَال", + "ipd_technician_number": "09385745269", + "hospital_number": "011-4492" + } + }, + "medical_packages": [ + { + "package_name": "باقة الجهاز الهضمي", + "services": [ + {"service_name": "تنظير علوي"}, + {"service_name": "تنظير القولون الكامل"}, + {"service_name": "تنظير و تنظير القولون في وقت واحد"} + ] + }, + { + "package_name": "باقة استئصال الرحم", + "services": [ + {"service_name": "جراحة سرطان الرحم أو عنق الرحم"}, + {"service_name": "جراحة سرطان المبيض"} + ] + }, + { + "package_name": "باقة القلب", + "services": [ + {"service_name": "تصوير الأوعية القلبية"}, + {"service_name": "توسيع الأوعية + تركيب دعامة"}, + {"service_name": "اختبار تخطيط كهربية القلب"}, + {"service_name": "استئصال القلب"}, + {"service_name": "زرع أجهزة القلب (CRT)"}, + {"service_name": "زرع أجهزة القلب (ICD)"}, + {"service_name": "زرع أجهزة القلب (منظم ضربات القلب)"}, + {"service_name": "جراحة تحويل مسار الشريان التاجي (CABG)"} + ] + }, + { + "package_name": "باقة التجميل", + "services": [ + {"service_name": "شفط الدهون / ليبوماتيك (البطن، الجوانب، الفخذ)"}, + {"service_name": "شد البطن (جراحة تجميلية للبطن)"}, + {"service_name": "شد الجفون العليا والسفلى"}, + {"service_name": "رفع الوجه والرقبة"}, + {"service_name": "تكبير / رفع الثدي (مع غرسة)"}, + {"service_name": "تكبير / رفع الثدي (بدون غرسة)"}, + {"service_name": "زرع الشعر"}, + {"service_name": "قص المعدة"}, + {"service_name": "حقن الدهون للوجه أو الجسم"} + ] + }, + { + "package_name": "باقة العظام", + "services": [ + {"service_name": "استبدال مفصل الورك"}, + {"service_name": "استبدال مفصل الركبة"} + ] + }, + { + "package_name": "باقة جراحة المخ", + "services": [ + {"service_name": "جراحة العمود الفقري (الدمج)"}, + {"service_name": "جراحة العمود الفقري (استئصال الصفيحة)"}, + {"service_name": "جراحة العمود الفقري (استئصال القرص)"}, + {"service_name": "استئصال الجمجمة"}, + {"service_name": "جراحة قاعدة الجمجمة"}, + {"service_name": "جراحة أورام المخ"} + ] + }, + { + "package_name": "باقة الأنف والأذن والحنجرة", + "services": [ + {"service_name": "تصحيح انحراف الحاجز الأنفي"}, + {"service_name": "استئصال اللوزتين و/أو اللحمية"}, + {"service_name": "استئصال السلائل الأنفية أو الجيوب"}, + {"service_name": "جراحة تجميل الأنف"} + ] + } + ], + "our_medical_packages": "
  • 💼 التنسيق الكامل قبل الوصول: التنسيق مع مستشفى شمال لمراجعة السجلات الطبية، واستشارة الأطباء المتخصصين، وإرسال تقدير التكلفة
  • 🛬 الاستقبال في المطار: نقل خاص من المطار إلى المستشفى أو الفندق
  • 🌐 مترجم فوري: خدمات الترجمة باللغات الإنجليزية، العربية، الكردية، التركية، وغيرها
  • 🏨 حجز الفندق والإقامة: التعاون مع فنادق بمستوى عالمي بالقرب من المستشفى
  • 🧾 الإرشاد والدعم الإداري: إصدار دعوة للحصول على تأشيرة علاجية، الإرشاد في الجمارك والإقامة
  • 👨‍⚕️ الوصول السريع إلى الأطباء المتخصصين: التنسيق الكامل مع مستشفى شمال؛ تحديد مواعيد فورية وإحالة مباشرة لأفضل الأطباء في كل تخصص
  • 📋 المتابعة بعد الخروج: إرسال السجلات الطبية، التواصل مع الطبيب المعالج، والرد على استفسارات المريض بعد الخروج
", + "our_doctors": "أطباؤنا", + "license_number": "رقم الترخيص الطبي", + "search_by_name": "البحث حسب اسم الطبيب", + "select_this": "اختر هذا", + "search": "البحث", + + "medical_packages_headTitle": "خدماتنا الطبية", + "transfer_service_page": { + "page_title": "خدمات السياحة", + "introduction": { + "title": "تعريف فريق السياحة العلاجية", + "head_text": "

تم تشكيل فريق السياحة العلاجية في مستشفى شمال بالتعاون مع شركة راز نوای آسمان ألبرز بهدف توفير تجربة آمنة ومريحة ومهنية للمرضى الدوليين. يتولى هذا الفريق مهمة تقديم إمكانيات المستشفى وجذب المرضى من الدول الأخرى، ويعتبر حلقة وصل بين المستشفى والأسواق الدولية.

", + "mojgan_yaghoubi": { + "fullname": "مژگان يعقوبي", + "position": "قائدة الفريق ومنسقة الإقامة", + "phone_number": "989353093925", + "email": "yaqoubi.mozhgan@gmail.com" + }, + "hassan_mozaffarzadeh": { + "fullname": "حسن مظفرزاده", + "position": "النقل والمرشد السياحي", + "phone_number": "989353093925", + "email": "" + }, + "packages_list": "قائمة الباقات", + "our_serives_ipd": "خدماتنا للمرضى الدوليين", + "packages": [ + { + "name": "الباقة الفاخرة", + "dsc": "
  • استخراج التأشيرة
  • النقل من وإلى المطار وداخل المدينة
  • مترجم مرافق
  • إقامة كاملة في جناح رويال فندق أكسین (غرفة مزدوجة أو توأم)
  • جولة ليوم كامل إلى ينابيع لاريجان المعدنية أو غابات بِليرون (حسب اختيار المسافر)
", + "price": "السعر المقترح: حوالي 1900 دولار" + }, + { + "name": "الباقة العادية", + "dsc": "
  • استخراج التأشيرة
  • النقل من وإلى المطار وداخل المدينة
  • مترجم مرافق
  • الإقامة في غرف قياسية في فندق أكسین (مزدوجة أو توأم) مع الإفطار
  • جولة نصف يوم في مدينة آمل
", + "price": "السعر المقترح: حوالي 1500 دولار" + }, + { + "name": "الباقة الاقتصادية", + "dsc": "
  • استخراج التأشيرة
  • النقل من وإلى المطار وداخل المدينة
  • مترجم مرافق
  • الإقامة في فندق الأولمبيك مع الإفطار
", + "price": "السعر المقترح: حوالي 900 دولار" + } + ], + "image_headTitle": "جولة نصف يوم في مدينة آمل", + "amol_museum": "متحف آمل", + "grand_mosque": "الجامع الكبير في آمل", + "fire_temple": "معبد النار في آمل" + }, + "jobs": "
  • الرد على طلبات واستفسارات المرضى والوكلاء
  • استخراج التأشيرة العلاجية وتأمين السفر
  • حجز الإقامة المناسبة حسب ميزانية ورغبات المريض (فندق، نُزل، شقة)
  • النقل من المطار إلى المستشفى أو محل الإقامة
  • تنظيم الجولات الثقافية والترفيهية في آمل والمناطق المجاورة (في حال كانت حالة المريض تسمح)
  • مرافق مترجم سياحي عند الحاجة
  • تنسيق إقامة المرافقين وخدمات النقل
", + "services": "
  • تنسيق كامل قبل الوصول
  • التنسيق مع مستشفى شمال لمراجعة الملف الطبي والاستشارات الطبية وإرسال عرض التكلفة
  • الاستقبال في المطار
  • نقل خاص إلى المستشفى أو الفندق
  • مرافقة مرشد سياحي ومتحدث بلغات متعددة
  • حجز الفنادق بالتعاون مع فنادق بمعايير دولية بالقرب من المستشفى
  • الدعم في الإجراءات الإدارية (خطاب دعوة للتأشيرة العلاجية، المساعدة في الجمارك والإقامة)
  • تنسيق مباشر مع مستشفى شمال: تحديد المواعيد العاجلة وتحويل المرضى لأفضل الأطباء
  • المتابعة بعد الخروج (إرسال التقارير الطبية، التواصل مع الطبيب والإجابة على استفسارات المريض)

تكلفة الخدمات الأساسية: تشمل النقل، المرشد، إقامة في غرفة مزدوجة، التأشيرة – 1500 دولار

الجولات الاختيارية: في حال تسمح حالة المريض – ينابيع لاريجان المعدنية مع إقامة كاملة

" + }, + "package_price": "سعر الباقة", + "reserve_ipd": "حجز موعد واستشارة مجانية مع الطبيب وخبير خدمات المرضى الدوليين", + "phone_number": "رقم الهاتف المحمول", + "email": "البريد الإلكتروني", + "oxin_hotel_location": "موقع فندق اوكسين", + "olympic_hotel_location": "موقع فندق الأولمبيك", + "upload_documents": { + "head_text": "نموذج رفع المستندات الطبية", + "input_code_placeholder": "أدخل الرمز المستلم من الاختصاصي", + "input_files_label": "تحميل عدة ملفات من المستندات الطبية", + "input_dsc": "إذا كانت لديك أي ملاحظات حول المستندات، اكتبها هنا", + "sendbutton": "إرسال المستندات" + }, + "related_links": "روابط ذات صلة" +} diff --git a/src/app/[lang]/dictionaries/en.json b/src/app/[lang]/dictionaries/en.json new file mode 100644 index 0000000..f6bf77c --- /dev/null +++ b/src/app/[lang]/dictionaries/en.json @@ -0,0 +1,232 @@ +{ + "products": { + "cart": "Add to Cart" + }, + "about_page": { + "page_title": "About Us", + "introduction": "Introduction to the International Patients Department", + "introduction_description_headText": "The International Patients Unit at Shomal Hospital was established to provide healthcare services to international patients and Iranian expatriates according to international standards. With an experienced, multilingual, and professional team, we support you throughout every stage of your treatment, from initial consultation to returning to your home country.\n• Official license from the Ministry of Health\n• National accreditation, grade one\n• Over 12 years of experience\n• Multilingual team (English, Arabic, Turkish)\n• Full accompaniment from arrival to discharge\n• Cost-effective services with high quality\n• Special services including airport transfer, VIP rooms, interpreter and city tours, Caspian Sea beaches, Hyrcanian forests, and mountain resorts with views of Mount Damavand", + "introduction_description_subText": "
  • Official license from the Ministry of Health
  • National first-class accreditation
  • Over 12 years of experience
  • Multilingual team (English, Arabic, Turkish)
  • Comprehensive assistance from admission to discharge
  • Affordable pricing with premium healthcare quality
  • Exclusive services such as airport transfer, VIP rooms, translation, city tours, Caspian Sea beaches, Hyrcanian forests, and mountain resorts overlooking Mount Damavand
", + "department_introduction": "International Patients Department Team", + "department_introduction_subtitle": "Our goal is to ensure that you feel comfortable, safe, and supported throughout every step of your treatment — from the initial consultation to your return home.", + "dr_jafarian": { + "name": "Dr. Mohsen Jafarian", + "expertise": "Ph.D. in Healthcare Management", + "position": "Hospital Director / Head of International Patients Department" + }, + "dr_motamedi": { + "name": "Dr. Hassan Motamedi Motlagh", + "expertise": "Specialist in Emergency Medicine", + "position": "International Patients Physician" + }, + "heidarnejad": { + "name": "Roya Heidarnejad", + "expertise": "Emergency Medical Technician", + "position": "International Patients Coordinator" + }, + "form": { + "head_text": "Need Medical Consultation?", + "sub_text": "Please send us details about your medical condition. We will contact you as soon as possible.", + "fields": { + "first_name": "First Name", + "last_name": "Last Name", + "email": "Email", + "sex": "Gender", + "country": "Your Country", + "services": "Select one of the medical service packages", + "phone_number": "Phone Number", + "age": "Age", + "message": "Describe your condition" + }, + "buttons": { + "send_whatsapp": "Send Request via WhatsApp", + "send_email": "Send Request via Email" + } + } + }, + "pricing_page": { + "page_title": "Price List", + "table": { + "head": [ + {"name": "Package Name"}, + {"name": "Service Name"}, + {"name": "Price Range (USD)"} + ] + } + }, + "accept_request_form": { + "head_text": "Initial Patient Admission Form" + }, + "contact_us_page": { + "page_title": "Contact Us", + "info_box_title": "Get in Touch with Us" + }, + "patient_rights_charter": { + "page_title": "Patient Rights Charter", + "section_one": { + "title": "Receiving Optimal Health Services is a Patient Right", + "content": "
    \n
  • Provide dignified and respectful services that honor human value and cultural and religious beliefs.
  • \n
  • Offer services based on honesty, fairness, courtesy, and compassion.
  • \n
  • Be free from any discrimination, including ethnic, cultural, religious, disease type, or gender.
  • \n
  • Be evidence-based and prioritize the best interest of the patient.
  • \n
  • Ensure fair allocation of health resources and prioritize patient treatment needs.
  • \n
  • Coordinate all aspects of care, including prevention, diagnosis, treatment, and rehabilitation.
  • \n
  • Provide essential amenities while avoiding unnecessary pain, suffering, or restrictions.
  • \n
  • Pay special attention to the rights of vulnerable groups, including children, pregnant women, elderly, psychiatric patients, prisoners, mentally and physically disabled, and unaccompanied individuals.
  • \n
  • Provide services promptly while respecting patient time and considering factors such as language, age, and gender.
  • \n
  • Provide urgent and emergency care regardless of cost; non-urgent care should follow established regulations.
  • \n
  • If appropriate services cannot be provided in emergencies, arrange transfer to a equipped unit after essential care and explanations.
  • \n
  • In end-of-life stages where the disease is irreversible and death is imminent, provide services to ensure patient comfort.
  • \n
" + }, + "section_two": { + "title": "Information Must Be Provided to the Patient Adequately and Appropriately", + "content": "
    \n
  • Patient rights charter provisions at the time of admission.
  • \n
  • Rules and foreseeable costs of the hospital, including medical and non-medical services, insurance regulations, and introduction of support systems at the time of admission.
  • \n
  • Names, responsibilities, and professional rank of medical team members responsible for patient care, including doctors, nurses, and students, and their professional interactions.
  • \n
  • Diagnostic and treatment methods, strengths and weaknesses of each method, potential side effects, disease diagnosis, prognosis, and all information affecting patient decision-making.
  • \n
  • Access to the attending physician and main medical team members during treatment, provision of necessary training for continuity of care, and all actions with research nature.
  • \n
  • Information must be provided timely and appropriately according to patient conditions, including anxiety, pain, individual characteristics such as language, education, and comprehension ability, unless delaying treatment due to this information would harm the patient, or the patient refuses information despite being aware of the right; in which case, the patient’s will should be respected, unless lack of information exposes the patient or others to new risks.
  • \n
  • The patient can access all information recorded in their clinical file, obtain a copy, and request correction of any errors.
  • \n
" + }, + "section_three": { + "title": "The Patient's Right to Choose and Make Informed Decisions Must Be Respected", + "content": "
    \n
  • Choosing the attending physician and the health service center within regulatory framework, as well as consulting a second physician as an advisor.
  • \n
  • Participation or non-participation in any research, ensuring that the decision does not affect continuity or manner of receiving health services.
  • \n
  • Accepting or rejecting proposed treatments after understanding potential risks; except in cases of suicide or when refusal endangers another person.
  • \n
  • Patient's prior statements regarding future treatments, when capable of decision-making, should be recorded and guide medical actions in case of incapacity, following legal provisions.
  • \n
  • Patient's choice and decision-making must be free, informed, and based on sufficient and comprehensive information (as described above).
  • \n
  • After providing information, allow sufficient time for the patient to make informed decisions.
  • \n
" + }, + "section_four": { + "title": "Access to an Efficient Complaint Handling System is a Patient Right", + "content": "
    \n
  • Every patient has the right to file a complaint with the relevant authorities in case of alleged violation of their rights under this charter, without affecting the quality of health services received.
  • \n
  • Patients have the right to be informed about the process and outcome of their complaint.
  • \n
  • Damages arising from errors by health service providers must be compensated promptly after review and verification, according to regulations.
  • \n
" + } + }, + "footer": { + "under_logo_text": "The International Patients Team at Shomal Hospital consists of professional healthcare specialists, medical interpreters, and medical travel consultants who provide multilingual, 24-hour support to international patients. Our mission is to ensure that you feel comfortable, safe, and supported throughout every stage of your treatment — from the initial consultation to your safe return home.", + "our_address": "Our Address", + "ipd_technician_number": "IPD Technician Contact", + "hospital_number": "Hospital Contact Number", + "contact_us_text": "Contact Us", + "contact_us": { + "address": "Iran, Mazandaran, Amol, Modarres Blvd, Aftab 47, Shomal Hospital", + "ipd_technician_number": "09385745269", + "hospital_number": "011-4492" + } + }, + "medical_packages": [ + { + "package_name": "Gastroenterology Package", + "services": [ + {"service_name": "Upper Endoscopy"}, + {"service_name": "Full Colonoscopy"}, + {"service_name": "Combined Endoscopy and Colonoscopy"} + ] + }, + { + "package_name": "Hysterectomy Package", + "services": [ + {"service_name": "Uterine or Cervical Cancer Surgery"}, + {"service_name": "Ovarian Cancer Surgery"} + ] + }, + { + "package_name": "Cardiology Package", + "services": [ + {"service_name": "Cardiac Angiography"}, + {"service_name": "Angioplasty + Stenting"}, + {"service_name": "Cardiac Electrophysiology Test"}, + {"service_name": "Cardiac Ablation"}, + {"service_name": "Cardiac Device Implantation (CRT)"}, + {"service_name": "Cardiac Device Implantation (ICD)"}, + {"service_name": "Cardiac Device Implantation (Pacemaker)"}, + {"service_name": "Coronary Artery Bypass Grafting (CABG)"} + ] + }, + { + "package_name": "Cosmetic Package", + "services": [ + {"service_name": "Liposuction / Lipomatic (Abdomen, Flanks, Thighs)"}, + {"service_name": "Abdominoplasty (Tummy Tuck)"}, + {"service_name": "Blepharoplasty (Upper and Lower Eyelids)"}, + {"service_name": "Face and Neck Lift"}, + {"service_name": "Breast Augmentation / Lift (With Implant)"}, + {"service_name": "Breast Augmentation / Lift (Without Implant)"}, + {"service_name": "Hair Transplant"}, + {"service_name": "Sleeve"}, + {"service_name": "Fat Injection to Face or Body"} + ] + }, + { + "package_name": "Orthopedic Package", + "services": [ + {"service_name": "Hip Joint Replacement"}, + {"service_name": "Knee Joint Replacement"} + ] + }, + { + "package_name": "Neurosurgery Package", + "services": [ + {"service_name": "Spinal Surgery (Fusion)"}, + {"service_name": "Spinal Surgery (Laminectomy)"}, + {"service_name": "Spinal Surgery (Discectomy)"}, + {"service_name": "Craniotomy"}, + {"service_name": "Skull Base Surgery"}, + {"service_name": "Brain Tumor Surgery"} + ] + }, + { + "package_name": "ENT Package", + "services": [ + {"service_name": "Septoplasty (Correct Nasal Septum Deviation)"}, + {"service_name": "Adenoidectomy and/or Tonsillectomy"}, + {"service_name": "Nasal or Sinus Polyp (Polypectomy)"}, + {"service_name": "Rhinoplasty (Nose Surgery)"} + ] + } + ], + "our_medical_packages": "
  • 💼 Full pre-arrival coordination: Coordination with Shomal Hospital to review medical records, consultation with specialist doctors, and sending a cost estimate
  • 🛬 Airport reception and welcome: Private transfer from the airport to the hospital or hotel
  • 🌐 Simultaneous interpreter: Translation services in English, Arabic, Kurdish, Turkish, etc.
  • 🏨 Hotel and accommodation booking: Cooperation with hotels meeting international standards near the hospital
  • 🧾 Administrative guidance and support: Issuance of invitation letter for medical visa, guidance on customs and residency
  • 👨‍⚕️ Fast access to specialist doctors: Fully coordinated with Shomal Hospital; immediate appointments and direct referral to the best doctors in each specialty
  • 📋 Post-discharge follow-up: Sending medical records, communication with the treating doctor, and answering patient’s follow-up questions
", + "our_doctors": "Our Doctors", + "license_number": "Medical License Number", + "search_by_name": "Search by doctor's name", + "select_this": "Select ...", + "search": "Search", + + "medical_packages_headTitle": "Our Medical Services", + "transfer_service_page": { + "page_title": "Tourism Services", + "introduction": { + "title": "Tourism Team Introduction", + "head_text": "

The medical tourism team of Shomal Hospital, in cooperation with Raz Navaye Aseman Alborz Company, has been established to provide a safe, comfortable, and professional experience for international patients. This team is responsible for presenting the hospital’s capabilities and attracting patients from other countries. They serve as a communication bridge between the hospital and international markets.

", + "mojgan_yaghoubi": { + "fullname": "Mozhgan Yaghoubi", + "position": "Team Leader & Accommodation Coordinator", + "phone_number": "989353093925", + "email": "yaqoubi.mozhgan@gmail.com" + }, + "hassan_mozaffarzadeh": { + "fullname": "Hassan Mozaffarzadeh", + "position": "Transfer & Tour Guide", + "phone_number": "989353093925", + "email": "" + }, + "packages_list": "Package List", + "our_serives_ipd": "Our Services for International Patients", + "packages": [ + { + "name": "Luxury Package", + "dsc": "
  • Visa issuance
  • Airport and city transfer
  • Accompanying translator
  • Full-board stay in Oxin Royal Suite (double or twin room)
  • One-day excursion to Larijan hot springs or Beliron forest (based on traveler’s choice)
", + "price": "Estimated price: around 1900 USD" + }, + { + "name": "Standard Package", + "dsc": "
  • Visa issuance
  • Airport and city transfer
  • Accompanying translator
  • Stay in Oxin Hotel standard rooms (double or twin) with breakfast
  • Half-day city tour of Amol
", + "price": "Estimated price: around 1500 USD" + }, + { + "name": "Economy Package", + "dsc": "
  • Visa issuance
  • Airport and city transfer
  • Accompanying translator
  • Stay at Olympic Hotel with breakfast
", + "price": "Estimated price: around 900 USD" + } + ], + "image_headTitle": "Half-day Amol City Tour", + "amol_museum": "Amol Museum", + "grand_mosque": "Amol Grand Mosque", + "fire_temple": "Amol Fire Temple" + }, + "jobs": "
  • Responding to initial inquiries from patients and agents
  • Medical visa issuance and travel insurance
  • Booking accommodations based on patient budget and preferences (hotel, guesthouse, apartment)
  • Airport transfer to hospital or residence
  • Planning recreational and cultural tours in Amol and nearby areas (depending on patient health)
  • Accompanying tourist interpreter if needed
  • Arranging companion accommodation and transportation services
", + "services": "
  • Full coordination before arrival
  • Coordination with Shomal Hospital for medical records review, specialist consultation, and cost estimation
  • Airport pick-up and reception
  • Private transfer to hospital or hotel
  • Accompanying multilingual tour guide and interpreter
  • Hotel reservation in partnership with international-standard hotels near the hospital
  • Administrative support (medical visa invitation letter, customs and residency assistance)
  • Full coordination with Shomal Hospital: immediate appointments and referrals to the best specialists
  • Post-discharge follow-up (medical file delivery, communication with physician, and answering patient questions)

Basic Service Fee: Includes transfer, guide, shared double room accommodation, visa issuance – 1500 USD

Optional Tours: If patient is in good condition – Larijan hot springs full-board stay

" + }, + "package_price": "Package Price", + "reserve_ipd": "Book an appointment & free consultation with IPD expert and doctor", + "phone_number": "Phone Number", + "email": "Email", + "oxin_hotel_location": "Oxin Hotel Location", + "olympic_hotel_location": "Olympic Hotel Location", + "upload_documents": { + "head_text": "Medical Documents Upload Form", + "input_code_placeholder": "Enter the code received from the specialist", + "input_files_label": "Upload multiple medical document files", + "input_dsc": "If you have any notes about the documents, write them here", + "sendbutton": "Send Documents" + }, + "related_links":"Related Links" +} diff --git a/src/app/[lang]/dictionaries/fa.json b/src/app/[lang]/dictionaries/fa.json new file mode 100644 index 0000000..2c6f520 --- /dev/null +++ b/src/app/[lang]/dictionaries/fa.json @@ -0,0 +1,240 @@ +{ + "products": { + "cart": "افزودن به سبد خرید" + }, + "accept_request_form": { + "head_text": "فرم اولیه پذیرش بیمار" + }, + "about_page": { + "page_title": "درباره ما", + "introduction": "معرفی دپارتمان بیماران بین الملل", + "introduction_description_headText": "واحد بیماران بین‌الملل بیمارستان شمال با هدف ارائه خدمات درمانی با استانداردهای بین‌المللی به بیماران خارجی و ایرانیان مقیم خارج از کشور راه‌اندازی شده است. ما با تیمی متخصص، چندزبانه و با تجربه، همراه شما در تمامی مراحل درمان، از مشاوره اولیه تا بازگشت به کشور خود، خواهیم بود.\n• دارای مجوز رسمی از وزارت بهداشت کشور\n• درجه یک اعتباربخشی ملی\n• بیش از 12 سال تجربه\n• تیم چندزبانه (انگلیسی، عربی، ترکی)\n• همراهی کامل از زمان ورود تا ترخیص\n• هزینه‌های مقرون‌به‌صرفه با ارائه کیفیت عالی\n• خدمات ویژه مانند ترانسفر فرودگاهی، اتاق‌های VIP، مترجم و گشت شهری، سواحل دریای کاسپین، جنگل‌های هیرکانی و ييلاقات با نمای قله دماوند", + "introduction_description_subText": "
  • دارای مجوز رسمی از وزارت بهداشت کشور
  • درجه یک اعتباربخشی ملی
  • بیش از 12 سال تجربه
  • تیم چندزبانه (انگلیسی، عربی، ترکی)
  • همراهی کامل از زمان ورود تا ترخیص
  • هزینه‌های مقرون‌به‌صرفه با ارائه کیفیت عالی
  • خدمات ویژه مانند ترانسفر فرودگاهی، اتاق‌های VIP، مترجم و گشت شهری، سواحل دریای کاسپین، جنگل‌های هیرکانی و ییلاقات با نمای قله دماوند
", + "department_introduction": "تیم دپارتمان بیماران بین الملل", + "department_introduction_subtitle": "هدف ما این است که شما در تمام مراحل درمان — از مشاوره اولیه تا بازگشت به کشور خود — احساس آرامش، امنیت و همراهی داشته باشید.", + "dr_jafarian": { + "name": "دکتر محسن جعفریان", + "expertise": "دکتری مدیریت خدمات بهداشتی و درمانی", + "position": "مدیر بیمارستان / مدیر دپارتمان بیماران بین الملل" + }, + "dr_motamedi": { + "name": "دکتر حسن معتمدی مطلق", + "expertise": "متخصص طب اورژانس", + "position": "پزشک بیماران بین الملل" + }, + "heidarnejad": { + "name": "رویا حیدرنژاد", + "expertise": "کارشناس فوریت پزشکی", + "position": "کارشناس بیماران بین الملل" + }, + "form": { + "head_text": "آیا نیاز به مشاوره پزشکی دارید؟", + "sub_text": "اطلاعاتی درباره بیماری خود برای ما ارسال نمایید. در اسرع وقت با شما تماس خواهیم گرفت.", + "fields": { + "first_name": "نام شما", + "last_name": "نام خانوادگی شما", + "email": "ایمیل", + "sex": "جنسیت", + "country": "کشور شما", + "services": "یکی از پکیج های خدمات پزشکی را انتخاب کنید", + "phone_number": "شماره موبایل", + "age": "سن شما", + "message": "از بیماری تان برایمان بنویسید" + }, + "buttons": { + "send_whatsapp": "ارسال درخواست از طریق واتساپ", + "send_email": "ارسال درخواست از طریق ایمیل" + } + } + }, + "pricing_page": { + "page_title": "لیست قیمت ها", + "table": { + "head": [ + { + "name": "نام پکیج" + }, + { + "name": "نام خدمت" + }, + { + "name": "حدود قیمت به دلار (آمریکا)" + } + ] + } + }, + "patient_rights_charter": { + "page_title": "منشور حقوق بیمار", + "section_one": { + "title": "دریافت مطلوب خدمات سلامت حق بیمار است", + "content": "
    \n
  • خدمات شایسته و در شأن و منزلت انسان و با احترام به ارزش‌ها، اعتقادات فرهنگی و مذهبی باشد.
  • \n
  • ارائه خدمات بر پایه صداقت، انصاف، ادب و همراه با مهربانی باشد.
  • \n
  • فارغ از هرگونه تبعیض از جمله قومی، فرهنگی، مذهبی، نوع بیماری و جنسیتی باشد.
  • \n
  • بر اساس دانش روز و مبتنی بر برتری منافع بیمار باشد.
  • \n
  • در مورد توزیع منابع سلامت مبتنی بر عدالت و اولویت‌های درمانی بیماران باشد.
  • \n
  • مبتنی بر هماهنگی ارکان مراقبت اعم از پیشگیری، تشخیص، درمان و توانبخشی باشد.
  • \n
  • به همراه تأمین کلیه امکانات رفاهی پایه و ضروری و به دور از تحمیل درد، رنج و محدودیت‌های غیرضروری باشد.
  • \n
  • توجه ویژه به حقوق گروه‌های آسیب‌پذیر جامعه از جمله کودکان، زنان باردار، سالمندان، بیماران روانی، زندانیان، معلولان ذهنی و جسمی و افراد بدون سرپرست داشته باشد.
  • \n
  • در سریع‌ترین زمان ممکن و با احترام به وقت بیمار و با در نظر گرفتن متغیرهایی چون زبان، سن و جنس گیرندگان خدمت باشد.
  • \n
  • در مراقبت‌های ضروری و فوری (اورژانس)، بدون توجه به تأمین هزینه آن صورت گیرد و در موارد غیر فوری بر اساس ضوابط تعریف‌شده باشد.
  • \n
  • در مراقبت‌های ضروری و فوری (اورژانس)، در صورتی که ارائه خدمات مناسب ممکن نباشد، پس از ارائه خدمات ضروری و توضیحات لازم، زمینه انتقال بیمار به واحد مجهز فراهم گردد.
  • \n
  • در مراحل پایانی حیات که وضعیت بیماری غیرقابل برگشت و مرگ بیمار قریب‌الوقوع می‌باشد، خدمات با هدف حفظ آسایش وی ارائه گردد.
  • \n
" + }, + "section_two": { + "title": " اطلاعات باید به نحو مطلوب و به میزان کافی در اختیار بیمار قرارگیرد", + "content": "
    \n
  • مفاد منشور حقوق بیمار در زمان پذیرش.
  • \n
  • ضوابط و هزینه‌های قابل پیش‌بینی بیمارستان اعم از خدمات درمانی و غیر درمانی و ضوابط بیمه و معرفی سیستم‌های حمایتی در زمان پذیرش.
  • \n
  • نام، مسئولیت و رتبه حرفه‌ای اعضای گروه پزشکی مسئول ارائه مراقبت از جمله پزشک، پرستار و دانشجو و ارتباط حرفه‌ای آن‌ها با یکدیگر.
  • \n
  • روش‌های تشخیصی و درمانی و نقاط ضعف و قوت هر روش و عوارض احتمالی آن، تشخیص بیماری، پیش‌آگهی و عوارض آن و نیز کلیه اطلاعات تأثیرگذار در روند تصمیم‌گیری بیمار.
  • \n
  • نحوه دسترسی به پزشک معالج و اعضای اصلی گروه پزشکی در طول درمان و ارائه آموزش‌های ضروری برای استمرار درمان و کلیه اقداماتی که ماهیت پژوهشی دارند.
  • \n
  • اطلاعات باید در زمان مناسب و متناسب با شرایط بیمار از جمله اضطراب و درد و ویژگی‌های فردی وی از جمله زبان، تحصیلات و توان درک در اختیار وی قرار گیرد؛ مگر اینکه تأخیر در شروع درمان به واسطه ارائه اطلاعات فوق سبب آسیب به بیمار گردد، یا بیمار علیرغم اطلاع از حق دریافت اطلاعات، از این امر امتناع نماید که در این صورت باید خواست بیمار محترم شمرده شود؛ مگر اینکه عدم اطلاع بیمار، وی یا سایرین را در معرض خطر جدید قرار دهد.
  • \n
  • بیمار می‌تواند به کلیه اطلاعات ثبت‌شده در پرونده بالینی خود دسترسی داشته باشد، تصویر آن را دریافت نموده و تصحیح اشتباهات مندرج در آن را درخواست نماید.
  • \n
" + }, + "section_three": { + "title": " حق انتخاب و تصمیم گیری آزادانه بیمار در دریافت خدمات سلامت باید محترم شمرده شود.", + "content": "
    \n
  • انتخاب پزشک معالج و مرکز ارائه‌کننده خدمات سلامت در چارچوب ضوابط و همچنین انتخاب و نظرخواهی از پزشک دوم به‌عنوان مشاور.
  • \n
  • شرکت یا عدم شرکت در هرگونه پژوهش، با اطمینان از اینکه تصمیم‌گیری وی تأثیری در تداوم و نحوه دریافت خدمات سلامت نخواهد داشت.
  • \n
  • قبول یا رد درمان‌های پیشنهادی پس از آگاهی از عوارض احتمالی ناشی از پذیرش یا رد آن؛ مگر در موارد خودکشی یا شرایطی که امتناع از درمان شخص دیگری را در معرض خطر جدی قرار می‌دهد.
  • \n
  • اعلام نظر قبلی بیمار در مورد اقدامات درمانی آتی، در زمانی که بیمار واجد ظرفیت تصمیم‌گیری می‌باشد ثبت و به‌عنوان راهنمای اقدامات پزشکی در زمان فقدان ظرفیت تصمیم‌گیری وی، با رعایت موازین قانونی مدنظر ارائه‌کنندگان خدمات سلامت و تصمیم‌گیرنده جایگزین بیمار قرار گیرد.
  • \n
  • انتخاب و تصمیم‌گیری بیمار باید آزادانه و آگاهانه و مبتنی بر دریافت اطلاعات کافی و جامع (مذکور در بند دوم) باشد.
  • \n
  • پس از ارائه اطلاعات، زمان لازم و کافی به بیمار جهت تصمیم‌گیری و انتخاب داده شود.
  • \n
" + }, + "section_four": { + "title": "دسترسی به نظام کارآمد رسیدگی به شکایات حق بیمار است.", + "content": "
    \n
  • هر بیمار حق دارد در صورت ادعای نقض حقوق خود که موضوع این منشور است، بدون اختلال در کیفیت دریافت خدمات سلامت، به مقامات ذی‌صلاح شکایت نماید.
  • \n
  • بیماران حق دارند از نحوه رسیدگی و نتایج شکایت خود آگاه شوند.
  • \n
  • خسارت ناشی از خطای ارائه‌کنندگان خدمات سلامت باید پس از رسیدگی و اثبات، مطابق مقررات در کوتاه‌ترین زمان ممکن جبران شود.
  • \n
" + } + }, + "contact_us_page": { + "page_title": "ارتباط با ما", + "info_box_title": "با ما درارتباط باشید" + }, + "footer": { + "under_logo_text": "تیم بیماران بین‌الملل در بیمارستان ما متشکل از گروهی حرفه‌ای از متخصصین مراقبت سلامت، مترجمین پزشکی، و مشاوران سفر درمانی است که به صورت ۲۴ ساعته و چندزبانه در خدمت بیماران خارجی هستند. هدف ما این است که شما در تمام مراحل درمان — از مشاوره اولیه تا بازگشت به کشور خود — احساس آرامش، امنیت و همراهی داشته باشید.", + "our_address": "آدرس ما", + "ipd_technician_number": "شماره تماس کارشناس", + "hospital_number": "شماره تماس بیمارستان", + "contact_us_text": "ارتباط با ما", + "contact_us": { + "address": " ایران ، مازندران ، آمل ، بلوار مدرس آفتاب 47 بیمارستان شمال", + "ipd_technician_number": "09385745269", + "hospital_number": "011-4492" + } + }, + + "medical_packages": [ + { + "package_name": "پكيج گوارش", + "services": [ + {"service_name": "آندوسکوپی فوقانی"}, + {"service_name": "کولونوسکوپی کامل"}, + {"service_name": "آندوسکوپی و کولونوسکوپی هم‌زمان"} + ] + }, + { + "package_name": "پكيج هيستركتومي", + "services": [ + {"service_name": "جراحی سرطان رحم یا دهانه رحم"}, + {"service_name": "جراحی سرطان تخمدان"} + ] + }, + { + "package_name": "پكيج قلب", + "services": [ + {"service_name": "آنژیوگرافی قلب"}, + {"service_name": "آنژیوپلاستی + استنت‌گذاری (فنر قلب)"}, + {"service_name": "تست الکتروفیزیولوژی قلب"}, + {"service_name": "ابلیشن قلبی"}, + {"service_name": "نصب دستگاه‌های قلبی (CRT)"}, + {"service_name": "نصب دستگاه‌های قلبی (ICD)"}, + {"service_name": "نصب دستگاه‌های قلبی (Pacemaker)"}, + {"service_name": "CABG"} + ] + }, + { + "package_name": "پكيج زيبايي", + "services": [ + {"service_name": "لیپوساکشن / لیپوماتیک (شکم، پهلو، ران)"}, + {"service_name": "ابدومینوپلاستی (جراحی زیبایی شکم)"}, + {"service_name": "بلفاروپلاستی (جراحی پلک بالا و پایین)"}, + {"service_name": "لیفت صورت و گردن"}, + {"service_name": "پروتز سینه / لیفت سینه (با پروتز)"}, + {"service_name": "پروتز سینه / لیفت سینه (بدون پروتز)"}, + {"service_name": "کاشت مو"}, + {"service_name": "اسليو"}, + {"service_name": "تزریق چربی به صورت یا بدن"} + ] + }, + { + "package_name": "پكيج ارتوپدي", + "services": [ + {"service_name": "تعويض مفصل ران"}, + {"service_name": "تعويض مفصل زانو"} + ] + }, + { + "package_name": "پكيج جراحي مغز", + "services": [ + {"service_name": "جراحي ستون فقرات (فيوژن)"}, + {"service_name": "جراحي ستون فقرات (لامينكتومي)"}, + {"service_name": "جراحي ستون فقرات (ديستكتومي)"}, + {"service_name": "كرانيوتومي"}, + {"service_name": "جراحي قاعده جمجمه"}, + {"service_name": "جراحي تومورهاي مغزي"} + ] + }, + { + "package_name": "پكيج گوش و حلق و بيني", + "services": [ + {"service_name": "سپتوپلاستی (اصلاح انحراف تیغه بینی)"}, + {"service_name": "آدنوئیدکتومی و/یا لوزه ‌برداری"}, + {"service_name": "پلیپ بینی یا سینوس (پولیپکتومی)"}, + {"service_name": "رینوپلاستی (جراحی بینی)"} + ] + } + ], + "our_doctors":"پزشکان ما", + "license_number":"شماره نظام پزشکی", + "search_by_name":"جستجو بر اساس نام پزشک", + "select_this":"انتخاب کنید", + "search":"جستجو", + "our_medical_packages": "
  • 💼 هماهنگی کامل پیش از ورود: هماهنگی با بیمارستان شمال برای بررسی مدارک پزشکی، مشاوره با پزشکان متخصص و ارسال برآورد هزینه
  • 🛬 پذیرش و استقبال از فرودگاه: ترانسفر اختصاصی از فرودگاه به بیمارستان یا هتل
  • 🌐 مترجم همزمان: ارائه خدمات ترجمه به زبان‌های انگلیسی، عربی، کردی، ترکی و...
  • 🏨 رزرو هتل و اقامتگاه: همکاری با هتل‌های هم‌سطح با استانداردهای بین‌المللی در نزدیکی بیمارستان
  • 🧾 راهنمایی و پشتیبانی امور اداری: صدور دعوت‌نامه برای ویزای درمانی، راهنمایی در امور گمرکی و اقامت
  • 👨‍⚕️ دسترسی سریع به پزشکان متخصص: کاملاً هماهنگ با بیمارستان شمال؛ نوبت‌دهی فوری و ارجاع مستقیم به بهترین پزشکان در هر تخصص
  • 📋 پیگیری بعد از ترخیص: ارسال پرونده پزشکی، ارتباط با پزشک معالج و پاسخ به سوالات بعدی بیمار
", + "medical_packages_headTitle":"خدمات پزشکی ما", + "transfer_service_page": { + "page_title": "خدمات گردشگری", + "introduction": { + "title": "معرفی تیم گردشگری", + "head_text": "

تیم گردشگری درمانی بیمارستان شمال با همکاری شرکت راز نوای آسمان البرز با هدف فراهم کردن تجربه‌ای ایمن، راحت و حرفه‌ای برای بیماران بین‌الملل شکل گرفته است. این تیم وظیفه معرفی قابلیت‌های بیمارستان و جذب بیماران از کشورهای دیگر را بر عهده دارد. آنها پل ارتباطی بین بیمارستان و بازارهای بین‌المللی هستند.

", + "mojgan_yaghoubi": { + "fullname": "مژگان یعقوبی", + "position": "سرتیم و هماهنگ کننده اقامت", + "phone_number": "989353093925", + "email": "yaqoubi.mozhgan@gmail.com" + }, + "hassan_mozaffarzadeh": { + "fullname": "حسن مظفرزاده", + "position": "ترانسفر و راهنماي تور", + "phone_number": "989353093925", + "email": "" + }, + "packages_list": "لیست پکیج ها", + "our_serives_ipd": "خدمات ما برای بیماران بین الملل", + "packages": [ + { + "name": "پکیج لوکس", + "dsc": "
  • اخذ ویزا
  • ترانسفر فرودگاهی و شهری
  • مترجم همراه
  • اقامت فولبورد در سوییت رویال هتل اکسین (اتاق دبل یا تویین)
  • گشت یک روزه چشمه‌های آب معدنی لاریجان یا جنگل بلیرون (انتخاب به عهده مسافر می‌باشد)
", + "price": "قیمت پيشنهادي حدود ۱۹۰۰ دلار" + }, + { + "name": "پکیج عادی", + "dsc": "
  • اخذ ویزا
  • ترانسفر فرودگاهی و شهری
  • مترجم همراه
  • اقامت در اتاق‌های استاندارد هتل اکسین (اتاق دبل یا تویین) همراه با صبحانه
  • گشت نیم‌روزه شهر آمل
", + "price": "قیمت پیشنهادی حدود ۱۵۰۰ دلار" + }, + { + "name": "پکیج اقتصادی", + "dsc": "
  • اخذ ویزا
  • ترانسفر فرودگاهی و شهری
  • مترجم همراه
  • اقامت در هتل المپیک با صبحانه
", + "price": "قیمت پیشنهادی حدود ۹۰۰ دلار" + } + ], + "image_headTitle": "گشت نیم‌روزه شهر آمل", + "amol_museum": "موزه آمل", + "grand_mosque": "مسجد جامع آمل", + "fire_temple": "آتشکده آمل" + }, + "jobs_title": "وظایف این تیم", + + "jobs": "
  • پاسخگویی به استعلام‌ها و درخواست‌های اولیه بیماران و واسطه‌ها
  • اخذ ویزای درمانی و صدور بيمه گردشگري
  • رزرو اقامتگاه مناسب با بودجه و ترجیحات بیمار (هتل، مهمانسرا، آپارتمان)
  • ترانسفر فرودگاهی از فرودگاه به بیمارستان یا اقامتگاه
  • برنامه‌ریزی تورهای تفریحی و فرهنگی در آمل و شهرهای مجاور (در صورت سلامت بیمار)
  • همراهی مترجم گردشگری در صورت نیاز
  • هماهنگی اقامت همراهان بیمار و خدمات حمل و نقل
", + "services": "
  • هماهنگی کامل پیش از ورود
  • هماهنگی با بیمارستان شمال برای بررسی مدارک پزشکی، مشاوره با پزشکان متخصص و ارسال برآورد هزینه
  • پذیرش و استقبال از فرودگاه
  • ترانسفر اختصاصی از فرودگاه به بیمارستان یا هتل
  • همراهی تورلیدر مسلط به زبان به عنوان راهنما و مترجم
  • رزرو هتل و اقامتگاه (همکاری با هتل‌های هم‌سطح با استانداردهای بین‌المللی در نزدیکی بیمارستان)
  • راهنمایی و پشتیبانی امور اداری (صدور دعوت‌نامه برای ویزای درمانی، راهنمایی در امور گمرکی و اقامت)
  • کاملا هماهنگ با بیمارستان شمال: نوبت‌دهی فوری و ارجاع مستقیم به بهترین پزشکان در هر تخصص
  • پیگیری بعد از ترخیص (ارسال پرونده پزشکی، ارتباط با پزشک معالج و پاسخ به سوالات بعدی بیمار)

هزینه خدمات پایه: شامل ترنسفر، لیدر همراه، اقامت هر نفر در اتاق دو تخته، اخذ ویزا – 1500 دلار

تورهای آپشنال تفریحی: در صورت سلامت بیمار – چشمه‌های آب معدنی لاریجان با اقامت فولبورد

" + }, + "package_price": "قیمت پکیج", + "reserve_ipd": "رزرو نوبت و مشاوره رايگان با پزشك و كارشناس IPD", + "phone_number": "شماره موبایل", + "email": "ایمیل", + "oxin_hotel_location":"لوکیشن هتل اکسین", + "olympic_hotel_location":"لوکیشن هتل المپیک", + "upload_documents":{ + "head_text":"فرم آپلود مدارک پزشکی", + "input_code_placeholder":"کد دریافتی از کارشناس را وارد کنید", + "input_files_label":"آپلود چندین فایل از مدارک پزشکی", + "input_dsc":"اگر توضیحی بابت مدارک وجود دارد برایمان بنویسید", + "sendbutton":"ارسال مدارک" + }, + "related_links":"لینک های مرتبط" +} diff --git a/src/app/[lang]/doctors/page.tsx b/src/app/[lang]/doctors/page.tsx new file mode 100644 index 0000000..fb05dc5 --- /dev/null +++ b/src/app/[lang]/doctors/page.tsx @@ -0,0 +1,124 @@ +import {DoctorDataType, languages_types} from "@/types"; +import DoctorsFilterBox from "@/ui/forms/DoctorsFilterBox"; +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import {toPersianNumber} from "@/utils/functions"; +import Image from "next/image"; +import React from "react"; +import { getDictionary } from "../dictionaries"; +import { Metadata } from "next"; +import { pages_titles } from "@/constants"; +export const metadata: Metadata = { + title: pages_titles.doctors['fa'] + ' | ' +'بیمارستان شمال', + description: "Shomal Hospital IPD Doctors page", +}; +async function getDoctorsData() { + const res = await fetch(`http://localhost:4000/doctors`, {cache: "no-cache"}); + if (!res.ok) { + return []; + } + + const data = await res.json(); + + // console.log(data) + return data; +} + +export default async function DoctorsPage({ + params, + searchParams, +}: { + params: Promise<{lang: languages_types}>; + searchParams: Promise<{page: string; name: string; expertise: string}>; +}) { + const {lang} = await params; + const {name = "", expertise = ""} = await searchParams; + const data = await getDoctorsData(); + const {our_doctors,license_number,search_by_name,search,select_this}=await getDictionary(lang) + const filteredData = data.filter((doctor:DoctorDataType) => { + const nameMatch = name + ? Object.values(doctor.fullname) + .join(" ") + .toLowerCase() + .includes(name.toLowerCase()) + : true; + + const expertiseMatch = expertise + ? doctor.category.id.toString() === expertise + : true; + + return nameMatch && expertiseMatch; + }); + + return ( + <> + +
+
+

+ {our_doctors} +

+ +
+ {filteredData?.map((doctor: DoctorDataType) => ( +
+
+ + + {doctor.category.name[lang]} + +
+
+

+ {doctor.fullname[lang]} +

+ +
+
+
    + {doctor.specialties.map((item) => ( +
  • + {item.name[lang]} +
  • + ))} +
+
+
+
+ + {license_number} :{" "} + {lang === "en" + ? doctor?.doctor_identify_number + : toPersianNumber( + String(doctor?.doctor_identify_number) + )} + +
+
+
+ ))} +
+
+
+ + ); +} diff --git a/src/app/[lang]/layout.tsx b/src/app/[lang]/layout.tsx new file mode 100644 index 0000000..9f83e87 --- /dev/null +++ b/src/app/[lang]/layout.tsx @@ -0,0 +1,154 @@ +import type {Metadata} from "next"; +import "../globals.css"; +import {FontVazir} from "@/config/font.config"; +import TopMenu from "@/ui/components/top-menu/TopMenu"; +import TopNavbar from "@/ui/top-navbar"; +import Image from "next/image"; +import {FooterMenuLinks1} from "@/constants/menu/menu.const"; +import CustomLink from "@/ui/components/global/CustomLink"; +import {getHref} from "@/utils/functions"; +import {languages_types} from "@/types"; +import { getDictionary } from "./dictionaries"; + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; +export async function generateStaticParams() { + return [{lang: "en"}, {lang: "fa"}, {lang: "ar"}]; +} +export default async function RootLayout({ + children, + params, +}: Readonly<{ + children: React.ReactNode; + params: Promise<{lang: string}>; +}>) { + const {lang} = await params; + const dict = await getDictionary(lang as languages_types); + const {footer} = dict || {}; + return ( + + + + + {children} +
+
+
+
+ shomal hospital +
+

+ {footer?.under_logo_text} +

+
+
+
+

{dict.related_links}

+
    + {FooterMenuLinks1.map((link) => ( +
  • + + + +
  • + ))} +
+
+
+
+
+

+ {footer?.contact_us_text} +

+

+ + {footer?.our_address} + {" "} + :{footer?.contact_us?.address} +

+

+ + {footer?.ipd_technician_number} + {" "} + :   + + {footer?.contact_us?.ipd_technician_number} + +

+

+ + {footer?.hospital_number} + {" "} + :   + + {footer?.contact_us?.hospital_number} + +

+
+ +
+
+
+
+
+ + + ); +} +// import type {Metadata} from "next"; +// import "../globals.css"; +// import { languages_types } from "@/types"; + +// export const metadata: Metadata = { +// title: "Next.js App", +// description: "Generated by Next.js", +// }; + +// export default async function InsideLayout({ +// children, +// params, +// }: { +// children: React.ReactNode; +// params:Promise<{lang:languages_types}>; +// }) { +// const {lang}=(await params) +// return ( +// +// {children} +// +// ); +// } diff --git a/src/app/[lang]/medical-services/[slug]/page.tsx b/src/app/[lang]/medical-services/[slug]/page.tsx new file mode 100644 index 0000000..3aef140 --- /dev/null +++ b/src/app/[lang]/medical-services/[slug]/page.tsx @@ -0,0 +1,65 @@ +import { sub_packages_data_type } from "@/types"; +import Accordion from "@/ui/components/global/Accordion"; +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import {notFound} from "next/navigation"; +import React from "react"; + +async function getData(slug: string) { + const res = await fetch( + `http://localhost:4000/medical_packages?slug=${slug}` + ); + if (!res.ok) { + return []; + } + + const data = await res.json(); + return data; +} + +export default async function SingleMedicalService({ + params, +}: { + params: Promise<{slug: string; lang: "fa" | "en"}>; +}) { + const {slug, lang} = await params; + const data = (await getData(slug)) || []; + + if (!data || !data.length) { + return notFound(); + } + + return ( + <> + +
+
+

+ انواع خدمات پزشکی {data[0]?.title[lang]} +

+
+ {data[0].sub_packages.map((item:sub_packages_data_type, index: number) => + item?.description?.[lang] ? ( + + ) : ( + "" + ) + )} +
+
+
+ + ); +} diff --git a/src/app/[lang]/medical-services/page.tsx b/src/app/[lang]/medical-services/page.tsx new file mode 100644 index 0000000..854656a --- /dev/null +++ b/src/app/[lang]/medical-services/page.tsx @@ -0,0 +1,124 @@ +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import Link from "next/link"; +import React, {lazy, Suspense} from "react"; +import {packages_types} from "@/types"; +import { getDictionary } from "../dictionaries"; +import { Metadata } from "next"; +import { pages_titles } from "@/constants"; +export const metadata: Metadata = { + title: pages_titles.medical_services['fa'] + ' | ' +'بیمارستان شمال', + description: "Shomal Hospital IPD medical services page", +}; +async function getHeadPackages() { + const res = await fetch( + `http://localhost:4000/medical_packages?is_parent=true` + ); + if (!res.ok) { + return []; + } + const data = await res.json(); + return data; +} + +export default async function MedicalServices({ + params, +}: { + params: Promise<{lang: "fa" | "en"}>; +}) { + const packages = await getHeadPackages(); + const {lang} = await params; + const {medical_packages_headTitle,our_medical_packages} =await getDictionary(lang) + + return ( + <> + +
+
+

+ {medical_packages_headTitle} +

+
+ {/*

+

+
+
*/} +
+
+ {packages.map((item: packages_types) => { + const LazyComponent = lazy( + () => import(`@/ui/components/icons/${item.svg}.tsx`) + ); + return ( +
+ + + در حال بارگذاری...
} + key={item.id} + > + + + + + {item.title[lang]} + + +
+ ); + })} + + {/*
+ + + + + پکیج هیسترکتومی + +
+
+ + + + پکیج قلب +
+
+ + + + پکیج زیبایی +
+
+ + + + پکیج ارتوپدی +
+
+ + + + پکیج جراحی مغز +
+
+ + + + + پکیج گوش و حلق و بینی + +
*/} + {/* */} +
+
+
+
+ + ); +} diff --git a/src/app/[lang]/page.tsx b/src/app/[lang]/page.tsx new file mode 100644 index 0000000..f309469 --- /dev/null +++ b/src/app/[lang]/page.tsx @@ -0,0 +1,204 @@ +import React from "react"; +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import Image from "next/image"; +import PatientConsultantForm from "@/ui/forms/PatientConsultantForm"; +import {getDictionary} from "./dictionaries"; + +export default async function Page({ + params, +}: { + params: Promise<{lang: "en" | "fa" | "ar"}>; +}) { + const {lang} = await params; + const {about_page} = await getDictionary(lang); + + return ( + <> + {/* */} + + +
+
+ {/*
+
+ shomalhospital ipd logo +
+
*/} +

+ {about_page?.introduction} +

+
+

+ {about_page?.introduction_description_headText} +

+
+
+
    +
    +
+
+
+ + {/*
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+
+
*/} +
+
+
+

+ {about_page?.department_introduction} +

+
+ {/*

+ تیم بیماران بین‌الملل در بیمارستان ما متشکل از گروهی حرفه‌ای از متخصصین مراقبت سلامت، مترجمین پزشکی، و مشاوران سفر درمانی است که به صورت ۲۴ ساعته و چندزبانه در خدمت بیماران خارجی هستند. +

*/} +

+ {about_page?.department_introduction_subtitle} +

+
+
+
+
+ +
+
+

+ {about_page?.dr_jafarian?.name} +

+
+ + {about_page?.dr_jafarian?.expertise} + +
+
+ + {about_page?.dr_jafarian?.position} + +
+
+
+
+
+ +
+
+

+ {about_page?.dr_motamedi?.name} +

+
+ + {about_page?.dr_motamedi?.expertise} + +
+
+ + {about_page?.dr_motamedi?.position} + +
+
+
+ +
+
+ +
+
+

+ {about_page?.heidarnejad?.name} +

+
+ + {about_page?.heidarnejad?.expertise} + +
+
+ + {about_page?.heidarnejad?.position} + +
+
+
+
+
+
+
+
+

+ {about_page?.form?.head_text} +

+

+ {about_page?.form?.sub_text} +

+ +
+
+ + ); +} diff --git a/src/app/[lang]/patient-rights-charter/page.tsx b/src/app/[lang]/patient-rights-charter/page.tsx new file mode 100644 index 0000000..e5fbadb --- /dev/null +++ b/src/app/[lang]/patient-rights-charter/page.tsx @@ -0,0 +1,76 @@ +import {languages_types} from "@/types"; +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import React from "react"; +import {getDictionary} from "../dictionaries"; +import { pages_titles } from "@/constants"; +import { Metadata } from "next"; +export const metadata: Metadata = { + title: pages_titles.patient_rights_charter['fa'] + ' | ' +'بیمارستان شمال', + description: "Shomal Hospital IPD patient rights charter page", +}; +export default async function PatientRights({ + params, +}: { + params: Promise<{lang: languages_types}>; +}) { + const {lang} = await params; + const {patient_rights_charter} = await getDictionary(lang); + return ( + <> + +
+
+

+ {patient_rights_charter?.page_title} +

+
+

+ {patient_rights_charter?.section_one?.title} +

+
+
+
+ +

+ {patient_rights_charter?.section_two?.title} +

+
+

+ {patient_rights_charter?.section_three?.title} +

+
+

+ {patient_rights_charter?.section_four?.title} +

+ +
+
+
+
+ + ); +} diff --git a/src/app/[lang]/pricing/page.tsx b/src/app/[lang]/pricing/page.tsx new file mode 100644 index 0000000..57b1e5a --- /dev/null +++ b/src/app/[lang]/pricing/page.tsx @@ -0,0 +1,271 @@ +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import React from "react"; +import {getDictionary} from "../dictionaries"; +import {languages_types} from "@/types"; +import {Metadata} from "next"; +import {pages_titles} from "@/constants"; +export const metadata: Metadata = { + title: pages_titles.pricing["fa"] + " | " + "بیمارستان شمال", + description: "Shomal Hospital IPD Pricing page", +}; +export default async function PricingPage({ + params, +}: { + params: Promise<{lang: languages_types}>; +}) { + const {lang} = await params; + const {pricing_page, medical_packages} = await getDictionary(lang); + return ( + <> + +
+
+

+ {pricing_page?.page_title} +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {pricing_page.table.head[0].name} + + {pricing_page.table.head[1].name} + + {pricing_page.table.head[2].name} +
+ {medical_packages[0].package_name} + + {medical_packages[0].services[0].service_name} + 350 – 600
+ {medical_packages[0].services[1].service_name} + 450 – 800
+ {medical_packages[0].services[2].service_name} + 750 – 1,200
+ {medical_packages[1].package_name} + + {medical_packages[1].services[0].service_name} + 3,800 – 6,000
+ {medical_packages[1].services[1].service_name} + 4,500 – 7,000
+ {medical_packages[2].package_name} + + {medical_packages[2].services[0].service_name} + 900 – 1,300
+ {medical_packages[2].services[1].service_name} + 3,200 – 4,200
+ {medical_packages[2].services[2].service_name} + 1,500 – 2,000
+ {medical_packages[2].services[3].service_name} + 3,000 – 6,000
+ {medical_packages[2].services[4].service_name} + 9,000 – 12,000
+ {medical_packages[2].services[5].service_name} + 7,000 – 10,000
+ {medical_packages[2].services[6].service_name} + 550 – 4,500
+ {medical_packages[2].services[7].service_name} + 5,500-9,000
+ {medical_packages[3].package_name} + + {medical_packages[3].services[0].service_name} + 1,800 – 2,800
+ {medical_packages[3].services[1].service_name} + 2,500 – 3,500
+ {medical_packages[3].services[2].service_name} + 1,000 – 1,600
+ {medical_packages[3].services[3].service_name} + 3,500 – 5,000
+ {medical_packages[3].services[4].service_name} + 2,800 – 3,800
+ {medical_packages[3].services[5].service_name} + 2,500 – 3,200
+ {medical_packages[3].services[6].service_name} + 1,000 – 1,500
+ {medical_packages[3].services[7].service_name} + 4,500 - 7,000
+ {medical_packages[3].services[8].service_name} + 800 – 1,200
+ {medical_packages[4].package_name} + + {medical_packages[4].services[0].service_name} + 6,600 - 11,700
+ {medical_packages[4].services[1].service_name} + 5,100 - 9,000
+ {medical_packages[5].package_name} +
+ {medical_packages[5].services[2].service_name} + 4,500 - 9,000
+ {medical_packages[5].services[5].service_name} + 10,000 - 35,000
+ {medical_packages[6].package_name} + + {medical_packages[6].services[0].service_name} + 1,200 – 1,800
+ {medical_packages[6].services[1].service_name} + 1,000 – 1,500
+ {medical_packages[6].services[2].service_name} + 1,000 – 1,400
+ {medical_packages[6].services[3].service_name} + 1,500 – 2,500
+
+
+
+ + ); +} diff --git a/src/app/[lang]/transfer-services/page.tsx b/src/app/[lang]/transfer-services/page.tsx new file mode 100644 index 0000000..857966a --- /dev/null +++ b/src/app/[lang]/transfer-services/page.tsx @@ -0,0 +1,156 @@ +import {languages_types} from "@/types"; +import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider"; +import React from "react"; +import {getDictionary} from "../dictionaries"; +import Image from "next/image"; +import TransferServicesPackages from "@/ui/TransferServicesPackages"; +import {toPersianNumber} from "@/utils/functions"; +import { Metadata } from "next"; +import { pages_titles } from "@/constants"; +export const metadata: Metadata = { + title: pages_titles.transfer_services['fa'] + ' | ' +'بیمارستان شمال', + description: "Shomal Hospital IPD transfer services page", +}; +export default async function TransferServicePage({ + params, +}: { + params: Promise<{lang: languages_types}>; +}) { + const {lang} = await params; + const {transfer_service_page, package_price, phone_number, email,oxin_hotel_location,olympic_hotel_location} = + await getDictionary(lang); + return ( + <> + +
+
+

+ {transfer_service_page.introduction?.title} +

+
+
+
+
+ +
+
+

+ { + transfer_service_page.introduction?.mojgan_yaghoubi + ?.fullname + } +

+
+ + { + transfer_service_page.introduction?.mojgan_yaghoubi + ?.position + } + +
+
+ + {phone_number}:{" "} + {lang === "en" + ? transfer_service_page.introduction?.mojgan_yaghoubi + ?.phone_number + : toPersianNumber( + transfer_service_page.introduction?.mojgan_yaghoubi + ?.phone_number + )} + + + +
+
+ + {email} :{" "} + + yaqoubi.mozhgan@gmail.com + {" "} + +
+
+
+
+
+ +
+
+

+ { + transfer_service_page.introduction?.hassan_mozaffarzadeh + ?.fullname + } +

+
+ + { + transfer_service_page.introduction?.hassan_mozaffarzadeh + ?.position + } + +
+
+ + {phone_number}:{" "} + {lang === "en" + ? transfer_service_page.introduction?.hassan_mozaffarzadeh + ?.phone_number + : toPersianNumber( + transfer_service_page.introduction + ?.hassan_mozaffarzadeh?.phone_number + )} + + + +
+
+ + {email} : {" "} + +
+
+
+
+
+
+
+
+

+ {transfer_service_page.page_title} +

+
+
+
+
+
+

+ {transfer_service_page.introduction.our_serives_ipd} +

+ <> +
+ +

+ {transfer_service_page.introduction.packages_list} +

+ +
+
+ + ); +} diff --git a/src/app/[lang]/upload-documents/page.tsx b/src/app/[lang]/upload-documents/page.tsx new file mode 100644 index 0000000..ad278f8 --- /dev/null +++ b/src/app/[lang]/upload-documents/page.tsx @@ -0,0 +1,30 @@ +import UploadDocuments from "@/ui/forms/UploadDocuments"; +import React from "react"; +import {getDictionary} from "../dictionaries"; +import {languages_types} from "@/types"; +import { Metadata } from "next"; +import { pages_titles } from "@/constants"; +export const metadata: Metadata = { + title: pages_titles.upload_documents['fa'] + ' | ' +'بیمارستان شمال', + description: "Shomal Hospital IPD upload documents page", +}; +export default async function UploadDocumentsPage({ + params, +}: { + params: Promise<{lang: languages_types}>; +}) { + const {lang} = await params; + const {upload_documents} = await getDictionary(lang); + return ( + <> +
+
+

+ {upload_documents.head_text} +

+ +
+
+ + ); +} diff --git a/src/app/android-chrome-192x192.png b/src/app/android-chrome-192x192.png new file mode 100644 index 0000000..8d30bbc Binary files /dev/null and b/src/app/android-chrome-192x192.png differ diff --git a/src/app/android-chrome-512x512.png b/src/app/android-chrome-512x512.png new file mode 100644 index 0000000..8c0cb55 Binary files /dev/null and b/src/app/android-chrome-512x512.png differ diff --git a/src/app/apple-touch-icon.png b/src/app/apple-touch-icon.png new file mode 100644 index 0000000..b655733 Binary files /dev/null and b/src/app/apple-touch-icon.png differ diff --git a/src/app/favicon-16x16.png b/src/app/favicon-16x16.png new file mode 100644 index 0000000..c185906 Binary files /dev/null and b/src/app/favicon-16x16.png differ diff --git a/src/app/favicon-32x32.png b/src/app/favicon-32x32.png new file mode 100644 index 0000000..b6ff4e4 Binary files /dev/null and b/src/app/favicon-32x32.png differ diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000..51d140a Binary files /dev/null and b/src/app/favicon.ico differ diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..98881fd --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,131 @@ +@import "tailwindcss"; + +@theme { + --color-blue-primary: rgba(4, 61, 130, 1); + --color-secondary: rgba(0, 193, 211, 1); + --color-orange-primary: rgba(248, 138, 40, 1); + --color-blue-secondary: rgba(95, 164, 248, 1); + --color-title-primary: rgba(43, 43, 43, 1); + --color-text-body: rgba(99, 99, 99, 1); + --color-text-subtext: rgba(109, 109, 109, 1); + + --color-subtitle-primary: rgba(128, 128, 128, 1); + --color-subtitle-secondary: rgba(116, 128, 145, 1); + --color-desc: rgba(89, 89, 89, 1); +} + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} +/* +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} */ + +body { + /* background: var(--background); */ + /* color: var(--foreground); */ + font-family: VazirMatn, Arial, Helvetica, sans-serif; + scroll-behavior: smooth; +} +@utility container { + margin-inline: auto; + padding-inline: 1rem; + + @media (min-width: 768px) { + padding-inline: 2rem; + } + + @media (min-width: 1024px) { + padding-inline: 4rem; + } +} + +/* swiper customization */ + +.swiper-pagination-bullets { + background-color: rgba(255, 255, 255, 0.8); + width: fit-content !important; + margin: 0 auto !important; + border-radius: 10px; + padding: 4px; + position: absolute; + display: flex; + border: 1px solid rgba(255, 255, 255, 0.9); + backdrop-filter: blur(24px); + -webkit-backdrop-filter: blur(24px); + left: 50% !important; /* Move to the center along X-axis */ + transform: translate(-50%, -50%) !important; + /* box-shadow: 1px 1px 1px 1px rgba(255, 255, 255, 0.7) !important; */ +} +.swiper-button-next, +.swiper-button-prev { + background-color: rgba(255, 255, 255, 0.8) !important; + border-radius: 50% !important; + border: 1px solid rgba(255, 255, 255, 0.9) !important; + backdrop-filter: blur(24px) !important; + -webkit-backdrop-filter: blur(24px) !important; + /* box-shadow: 1px 1px 1px 1px rgba(255, 255, 255, 0.8) !important; */ +} +.swiper-button-next .swiper-navigation-icon, +.swiper-button-prev .swiper-navigation-icon { + width: 25px !important; + height: 25px !important; + color: var(--color-blue-primary) !important; +} +.swiper-pagination-bullets .swiper-pagination-bullet { + background-color: black !important; + width: 10px; + height: 10px; + transition: all !important; + transition-duration: 4s; +} +.swiper-pagination-bullets .swiper-pagination-bullet-active { + background-color: var(--color-blue-primary) !important; + width: 30px !important; + border-radius: 12px !important; + height: 10px !important; +} + +.custom-shadow { + box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.1); +} + +/* header-slider */ +.gradient-slider { +} +.introduction_description_subText ul { + @apply list-disc list-inside marker:text-secondary marker:text-2xl text-[1.2rem] space-y-2 text-[#454547]; +} +.packages_subpackages_list ul { + @apply list-disc list-inside marker:text-secondary marker:text-2xl text-[1rem] space-y-1 text-[#454547]; +} +.react-select-container .rs__control { + @apply bg-transparent py-4 px-6 rounded-2xl border border-neutral-200 w-full focus:outline-secondary focus:outline-1; +} + +table { + border: 1px solid #ccc; + margin: 8px 0; +} +table th, +tr, +td { + border: 1px solid #ccc; + padding: 8px; +} + +p { + @apply leading-relaxed my-4; +} diff --git a/src/app/manifest.ts b/src/app/manifest.ts new file mode 100644 index 0000000..56eebd8 --- /dev/null +++ b/src/app/manifest.ts @@ -0,0 +1,27 @@ +// import {EN_SITENAME, FA_SITENAME} from "@/constants/global/global.const"; +import type {MetadataRoute} from "next"; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "بیماران بین الملل بیمارستان شمال آمل", + short_name: "بیماران بین الملل بیمارستان شمال", + description: `A Progressive Web App for shomal hospital international patient department`, + start_url: "/", + display: "standalone", + background_color: "#ffffff", + theme_color: "#043d82", + + icons: [ + { + src: "/android-chrome-192x192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "/android-chrome-512x512.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; +} diff --git a/src/app/robots.txt b/src/app/robots.txt new file mode 100644 index 0000000..6ffbc30 --- /dev/null +++ b/src/app/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Disallow: / + diff --git a/src/config/font.config.ts b/src/config/font.config.ts new file mode 100644 index 0000000..0a74347 --- /dev/null +++ b/src/config/font.config.ts @@ -0,0 +1,48 @@ +import localFont from "next/font/local"; + +export const FontVazir = localFont({ + src: [ + { + path: "../../public/fonts/vazir/Vazirmatn-Thin.woff2", + weight: "100", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-ExtraLight.woff2", + weight: "200", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-Light.woff2", + weight: "300", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-Regular.woff2", + weight: "400", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-Medium.woff2", + weight: "500", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-SemiBold.woff2", + weight: "600", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-Bold.woff2", + weight: "700", + style: "normal", + }, + { + path: "../../public/fonts/vazir/Vazirmatn-ExtraBold.woff2", + weight: "800", + style: "normal", + }, + ], + variable: "--font-vazir", // اگر خواستی متغیر CSS بسازی برای Tailwind یا CSS مدول + display: "swap", // بهترین گزینه برای نمایش فونت +}); diff --git a/src/constants/index.ts b/src/constants/index.ts new file mode 100644 index 0000000..3dac9e8 --- /dev/null +++ b/src/constants/index.ts @@ -0,0 +1,741 @@ +import {contact_us_form_types} from "@/types"; + +export const site_languages = [ + { + label: "English", + value: "en", + }, + { + label: "فارسی", + value: "fa", + }, + { + label: "Arabic", + value: "ar", + }, +]; +// src/constants/services.ts + +export const SERVICES = [ + {id: "stone", label: "سنگ‌شکن برون‌اندامی"}, + {id: "endoscopy", label: "آندوسکوپی فوقانی"}, + {id: "colonoscopy", label: "کولونوسکوپی کامل"}, + {id: "endo-colono", label: "آندوسکوپی و کولونوسکوپی هم‌زمان"}, + {id: "dialysis1", label: "دیالیز ویژه بیماران بین‌الملل (یک‌جلسه‌ای)"}, + {id: "dialysis3", label: "دیالیز ویژه بیماران بین‌الملل کوتاه‌مدت (3 جلسه)"}, + {id: "dialysis6", label: "دیالیز ویژه بیماران بین‌الملل هفتگی (6 جلسه)"}, + {id: "dialysis12", label: "دیالیز ویژه بیماران بین‌الملل ماهانه (12 جلسه)"}, + {id: "uterus", label: "جراحی سرطان رحم یا دهانه رحم"}, + {id: "ovary", label: "جراحی سرطان تخمدان"}, + {id: "women-screen", label: "غربالگری جامع زنان"}, + {id: "breast-screen", label: "غربالگری بیماری‌های پستان"}, + {id: "angiography", label: "آنژیوگرافی قلب"}, + {id: "stent", label: "آنژیوپلاستی + استنت‌گذاری (فنر قلب)"}, + {id: "ep-study", label: "تست الکتروفیزیولوژی قلب"}, + {id: "ablation", label: "ابلیشن قلبی"}, + {id: "crt", label: "نصب دستگاه‌های قلبی (CRT)"}, + {id: "icd", label: "نصب دستگاه‌های قلبی (ICD)"}, + {id: "pacemaker", label: "نصب دستگاه‌های قلبی (Pacemaker)"}, + {id: "rhinoplasty", label: "رینوپلاستی (جراحی بینی)"}, + {id: "lipo", label: "لیپوساکشن / لیپوماتیک (شکم، پهلو، ران)"}, + {id: "abdominoplasty", label: "ابدومینوپلاستی (جراحی زیبایی شکم)"}, + {id: "blepharoplasty", label: "بلفاروپلاستی (جراحی پلک بالا و پایین)"}, + {id: "facelift", label: "لیفت صورت و گردن"}, + {id: "breast-pro", label: "پروتز سینه / لیفت سینه (با پروتز)"}, + {id: "breast-no-pro", label: "پروتز سینه / لیفت سینه (بدون پروتز)"}, + {id: "hair", label: "کاشت مو"}, + {id: "fat", label: "تزریق چربی به صورت یا بدن"}, + {id: "septoplasty", label: "سپتوپلاستی (اصلاح انحراف تیغه بینی)"}, + {id: "tonsil", label: "آدنوئیدکتومی و/یا لوزه‌برداری"}, + {id: "polyp", label: "پولیپ بینی یا سینوس (پولیپکتومی)"}, + {id: "path-bio", label: "پاتولوژی (نمونه‌های بافتی)"}, + {id: "path-cyto1", label: "پاتولوژی (سیتولوژی - پاپ‌اسمیر ساده)"}, + {id: "path-cyto2", label: "پاتولوژی (سیتولوژی - پاپ‌اسمیر + مایع پایه)"}, + {id: "path-fna", label: "پاتولوژی (سیتولوژی - گزارش FNA+)"}, + {id: "path-ihc1", label: "پاتولوژی (ایمونوهیستوشیمی - هر مارکر)"}, + { + id: "path-ihc2", + label: "پاتولوژی (ایمونوهیستوشیمی - پکیج کامل سرطان پستان)", + }, + {id: "path-slide", label: "پاتولوژی (بازخوانی اسلاید)"}, + {id: "path-block", label: "پاتولوژی (تهیه بلوک و اسلاید اضافی)"}, +]; + +// src/constants/packageServices.ts + +export const PACKAGE_SERVICES = [ + { + id: 1, + slug: "digestive-package", + title: "پکیج گوارش", + content: [ + "آندوسکوپی فوقانی", + "کولونوسکوپی کامل", + "آندوسکوپی و کولونوسکوپی هم‌زمان", + ], + }, + { + id: 2, + slug: "hysterectomy", + title: "پکیج هیسترتومی", + content: ["جراحی سرطان رحم یا دهانه رحم", "جراحی سرطان تخمدان"], + }, + { + id: 3, + slug: "cardiac", + title: "پکیج قلب", + content: [ + "آنژیوگرافی قلب", + "آنژیوپلاستی + استنت‌گذاری (فنر قلب)", + "تست الکتروفیزیولوژی قلب", + "ابلیشن قلبی", + "نصب دستگاه‌های قلبی (CRT)", + "نصب دستگاه‌های قلبی (ICD)", + "نصب دستگاه‌های قلبی (Pacemaker)", + "CABG", + ], + }, + { + id: 4, + slug: "beauty", + title: "پکیج زیبایی", + content: [ + "لیپوساکشن / لیپوماتیک (شکم، پهلو، ران)", + "ابدومینوپلاستی (جراحی زیبایی شکم)", + "بلفاروپلاستی (جراحی پلک بالا و پایین)", + "لیفت صورت و گردن", + "پروتز سینه / لیفت سینه (با پروتز)", + "پروتز سینه / لیفت سینه (بدون پروتز)", + "کاشت مو", + "اسلیو", + "تزریق چربی به صورت یا بدن", + ], + }, + { + id: 5, + slug: "orthopedic", + title: "پکیج ارتوپدی", + content: ["تعویض مفصل ران", "تعویض مفصل زانو"], + }, + { + id: 6, + slug: "brain-surgery", + title: "پکیج جراحی مغز", + content: [ + "جراحی ستون فقرات (فیوژن)", + "جراحی ستون فقرات (لامینکتومی)", + "جراحی ستون فقرات (دیستکتومی)", + "کرانيوتومی", + "جراحی قاعده جمجمه", + "جراحی تومورهای مغزی", + ], + }, + { + id: 7, + slug: "ent", + title: "پکیج گوش و حلق و بینی", + content: [ + "سپتوپلاستی (اصلاح انحراف تیغه بینی)", + "آدنوئیدکتومی و/یا لوزه‌برداری", + "پلیپ بینی یا سینوس (پولیپکتومی)", + "رینوپلاستی (جراحی بینی)", + ], + }, +]; + +export const MEDICAL_PACKAGES = PACKAGE_SERVICES.map((item) => ({ + id: item.id, + slug: item.slug, + title: item.title, +})); + +export const PHONE_NUMBERS = Object.freeze({ + ipd_technician: { + label: "09385745269", + href: "+989385745269", + }, + hospital: { + label: "011-4492", + href: "+09811-4492", + }, +}); + +export const Page_header_slider = Object.freeze({ + hospital_name: { + fa: "بیمارستان فوق تخصصی شمال آمل", + en: "Shomal Super Specialty Hospital, Amol", + ar: "مستشفى شمال التخصصي الفائق – آمل", + }, + n1_authority_validation: { + fa: "کسب رتبه یک اعتباربخشی", + en: "Achieved Grade A National Accreditation", + ar: "الحصول على التصنيف الأول في الاعتماد الوطني", + }, +}); + +export const contact_us_form: contact_us_form_types = Object.freeze({ + fields: { + first_name: { + type: "text", + as: "input", + }, + last_name: { + type: "text", + as: "input", + }, + phone_number: { + type: "text", + as: "input", + }, + email: { + type: "text", + as: "input", + }, + age: { + type: "number", + as: "input", + }, + sex: { + type: "select", + as: "select", + }, + country: { + type: "select", + as: "select", + }, + message: { + type: "text", + as: "textarea", + }, + }, +}); + +export const Expertises = [ + { + id: 1, + name: { + fa: "ارتوپدی", + en: "Orthopedics", + ar: "جراحة العظام", + }, + }, + { + id: 2, + name: { + fa: "جراحی عمومی", + en: "General Surgery", + ar: "الجراحة العامة", + }, + }, + { + id: 3, + name: { + fa: "قلب و عروق", + en: "Cardiology", + ar: "أمراض القلب", + }, + }, + { + id: 4, + name: { + fa: "زنان و زایمان", + en: "Obstetrics and Gynecology", + ar: "أمراض النساء والتوليد", + }, + }, + { + id: 5, + name: { + fa: "مغز و اعصاب", + en: "Neurosurgery / Neurology", + ar: "جراحة الأعصاب / طب الأعصاب", + }, + }, + { + id: 6, + name: { + fa: "گوارش", + en: "Gastroenterology", + ar: "أمراض الجهاز الهضمي", + }, + }, + { + id: 7, + name: { + fa: "کلیه و مجاری ادراری", + en: "Urology", + ar: "أمراض الكلى والجهاز البولي", + }, + }, + + { + id: 8, + name: { + fa: "گوش و حلق و بینی", + en: "ENT (Ear, Nose, and Throat)", + ar: "أمراض الأنف والأذن والحنجرة", + }, + }, +]; + +export const all_countries = [ + {label: "Afghanistan", value: "afghanistan", code: "+93"}, + {label: "Albania", value: "albania", code: "+355"}, + {label: "Algeria", value: "algeria", code: "+213"}, + {label: "American Samoa", value: "american-samoa", code: "+1-684"}, + {label: "Andorra", value: "andorra", code: "+376"}, + {label: "Angola", value: "angola", code: "+244"}, + {label: "Anguilla", value: "anguilla", code: "+1-264"}, + {label: "Antigua and Barbuda", value: "antigua-and-barbuda", code: "+1-268"}, + {label: "Argentina", value: "argentina", code: "+54"}, + {label: "Armenia", value: "armenia", code: "+374"}, + {label: "Aruba", value: "aruba", code: "+297"}, + {label: "Australia", value: "australia", code: "+61"}, + {label: "Austria", value: "austria", code: "+43"}, + {label: "Azerbaijan", value: "azerbaijan", code: "+994"}, + {label: "Bahamas", value: "bahamas", code: "+1-242"}, + {label: "Bahrain", value: "bahrain", code: "+973"}, + {label: "Bangladesh", value: "bangladesh", code: "+880"}, + {label: "Barbados", value: "barbados", code: "+1-246"}, + {label: "Belarus", value: "belarus", code: "+375"}, + {label: "Belgium", value: "belgium", code: "+32"}, + {label: "Belize", value: "belize", code: "+501"}, + {label: "Benin", value: "benin", code: "+229"}, + {label: "Bhutan", value: "bhutan", code: "+975"}, + {label: "Bolivia", value: "bolivia", code: "+591"}, + { + label: "Bosnia and Herzegovina", + value: "bosnia-and-herzegovina", + code: "+387", + }, + {label: "Botswana", value: "botswana", code: "+267"}, + {label: "Brazil", value: "brazil", code: "+55"}, + {label: "Brunei", value: "brunei", code: "+673"}, + {label: "Bulgaria", value: "bulgaria", code: "+359"}, + {label: "Burkina Faso", value: "burkina-faso", code: "+226"}, + {label: "Burundi", value: "burundi", code: "+257"}, + {label: "Cabo Verde", value: "cabo-verde", code: "+238"}, + {label: "Cambodia", value: "cambodia", code: "+855"}, + {label: "Cameroon", value: "cameroon", code: "+237"}, + {label: "Canada", value: "canada", code: "+1"}, + { + label: "Central African Republic", + value: "central-african-republic", + code: "+236", + }, + {label: "Chad", value: "chad", code: "+235"}, + {label: "Chile", value: "chile", code: "+56"}, + {label: "China", value: "china", code: "+86"}, + {label: "Colombia", value: "colombia", code: "+57"}, + {label: "Comoros", value: "comoros", code: "+269"}, + {label: "Congo", value: "congo", code: "+242"}, + { + label: "Congo, Democratic Republic of the", + value: "congo-democratic-republic", + code: "+243", + }, + {label: "Costa Rica", value: "costa-rica", code: "+506"}, + {label: "Croatia", value: "croatia", code: "+385"}, + {label: "Cuba", value: "cuba", code: "+53"}, + {label: "Cyprus", value: "cyprus", code: "+357"}, + {label: "Czech Republic", value: "czech-republic", code: "+420"}, + {label: "Denmark", value: "denmark", code: "+45"}, + {label: "Djibouti", value: "djibouti", code: "+253"}, + {label: "Dominica", value: "dominica", code: "+1-767"}, + {label: "Dominican Republic", value: "dominican-republic", code: "+1-809"}, + {label: "Ecuador", value: "ecuador", code: "+593"}, + {label: "Egypt", value: "egypt", code: "+20"}, + {label: "El Salvador", value: "el-salvador", code: "+503"}, + {label: "Equatorial Guinea", value: "equatorial-guinea", code: "+240"}, + {label: "Eritrea", value: "eritrea", code: "+291"}, + {label: "Estonia", value: "estonia", code: "+372"}, + {label: "Eswatini", value: "eswatini", code: "+268"}, + {label: "Ethiopia", value: "ethiopia", code: "+251"}, + {label: "Fiji", value: "fiji", code: "+679"}, + {label: "Finland", value: "finland", code: "+358"}, + {label: "France", value: "france", code: "+33"}, + {label: "Gabon", value: "gabon", code: "+241"}, + {label: "Gambia", value: "gambia", code: "+220"}, + {label: "Georgia", value: "georgia", code: "+995"}, + {label: "Germany", value: "germany", code: "+49"}, + {label: "Ghana", value: "ghana", code: "+233"}, + {label: "Greece", value: "greece", code: "+30"}, + {label: "Grenada", value: "grenada", code: "+1-473"}, + {label: "Guatemala", value: "guatemala", code: "+502"}, + {label: "Guinea", value: "guinea", code: "+224"}, + {label: "Guinea-Bissau", value: "guinea-bissau", code: "+245"}, + {label: "Guyana", value: "guyana", code: "+592"}, + {label: "Haiti", value: "haiti", code: "+509"}, + {label: "Honduras", value: "honduras", code: "+504"}, + {label: "Hungary", value: "hungary", code: "+36"}, + {label: "Iceland", value: "iceland", code: "+354"}, + {label: "India", value: "india", code: "+91"}, + {label: "Indonesia", value: "indonesia", code: "+62"}, + {label: "Iran", value: "iran", code: "+98"}, + {label: "Iraq", value: "iraq", code: "+964"}, + {label: "Ireland", value: "ireland", code: "+353"}, + {label: "Israel", value: "israel", code: "+972"}, + {label: "Italy", value: "italy", code: "+39"}, + {label: "Jamaica", value: "jamaica", code: "+1-876"}, + {label: "Japan", value: "japan", code: "+81"}, + {label: "Jordan", value: "jordan", code: "+962"}, + {label: "Kazakhstan", value: "kazakhstan", code: "+7"}, + {label: "Kenya", value: "kenya", code: "+254"}, + {label: "Kiribati", value: "kiribati", code: "+686"}, + {label: "Kuwait", value: "kuwait", code: "+965"}, + {label: "Kyrgyzstan", value: "kyrgyzstan", code: "+996"}, + {label: "Laos", value: "laos", code: "+856"}, + {label: "Latvia", value: "latvia", code: "+371"}, + {label: "Lebanon", value: "lebanon", code: "+961"}, + {label: "Lesotho", value: "lesotho", code: "+266"}, + {label: "Liberia", value: "liberia", code: "+231"}, + {label: "Libya", value: "libya", code: "+218"}, + {label: "Liechtenstein", value: "liechtenstein", code: "+423"}, + {label: "Lithuania", value: "lithuania", code: "+370"}, + {label: "Luxembourg", value: "luxembourg", code: "+352"}, + {label: "Macau", value: "macau", code: "+853"}, + {label: "North Macedonia", value: "north-macedonia", code: "+389"}, + {label: "Madagascar", value: "madagascar", code: "+261"}, + {label: "Malawi", value: "malawi", code: "+265"}, + {label: "Malaysia", value: "malaysia", code: "+60"}, + {label: "Maldives", value: "maldives", code: "+960"}, + {label: "Mali", value: "mali", code: "+223"}, + {label: "Malta", value: "malta", code: "+356"}, + {label: "Marshall Islands", value: "marshall-islands", code: "+692"}, + {label: "Mauritania", value: "mauritania", code: "+222"}, + {label: "Mauritius", value: "mauritius", code: "+230"}, + {label: "Mexico", value: "mexico", code: "+52"}, + {label: "Micronesia", value: "micronesia", code: "+691"}, + {label: "Moldova", value: "moldova", code: "+373"}, + {label: "Monaco", value: "monaco", code: "+377"}, + {label: "Mongolia", value: "mongolia", code: "+976"}, + {label: "Montenegro", value: "montenegro", code: "+382"}, + {label: "Morocco", value: "morocco", code: "+212"}, + {label: "Mozambique", value: "mozambique", code: "+258"}, + {label: "Myanmar", value: "myanmar", code: "+95"}, + {label: "Namibia", value: "namibia", code: "+264"}, + {label: "Nauru", value: "nauru", code: "+674"}, + {label: "Nepal", value: "nepal", code: "+977"}, + {label: "Netherlands", value: "netherlands", code: "+31"}, + {label: "New Zealand", value: "new-zealand", code: "+64"}, + {label: "Nicaragua", value: "nicaragua", code: "+505"}, + {label: "Niger", value: "niger", code: "+227"}, + {label: "Nigeria", value: "nigeria", code: "+234"}, + {label: "Norway", value: "norway", code: "+47"}, + {label: "Oman", value: "oman", code: "+968"}, + {label: "Pakistan", value: "pakistan", code: "+92"}, + {label: "Palau", value: "palau", code: "+680"}, + {label: "Palestine", value: "palestine", code: "+970"}, + {label: "Panama", value: "panama", code: "+507"}, + {label: "Papua New Guinea", value: "papua-new-guinea", code: "+675"}, + {label: "Paraguay", value: "paraguay", code: "+595"}, + {label: "Peru", value: "peru", code: "+51"}, + {label: "Philippines", value: "philippines", code: "+63"}, + {label: "Poland", value: "poland", code: "+48"}, + {label: "Portugal", value: "portugal", code: "+351"}, + {label: "Qatar", value: "qatar", code: "+974"}, + {label: "Romania", value: "romania", code: "+40"}, + {label: "Russia", value: "russia", code: "+7"}, + {label: "Rwanda", value: "rwanda", code: "+250"}, + {label: "Samoa", value: "samoa", code: "+685"}, + {label: "San Marino", value: "san-marino", code: "+378"}, + {label: "Saudi Arabia", value: "saudi-arabia", code: "+966"}, + {label: "Senegal", value: "senegal", code: "+221"}, + {label: "Serbia", value: "serbia", code: "+381"}, + {label: "Seychelles", value: "seychelles", code: "+248"}, + {label: "Sierra Leone", value: "sierra-leone", code: "+232"}, + {label: "Singapore", value: "singapore", code: "+65"}, + {label: "Slovakia", value: "slovakia", code: "+421"}, + {label: "Slovenia", value: "slovenia", code: "+386"}, + {label: "Solomon Islands", value: "solomon-islands", code: "+677"}, + {label: "Somalia", value: "somalia", code: "+252"}, + {label: "South Africa", value: "south-africa", code: "+27"}, + {label: "South Sudan", value: "south-sudan", code: "+211"}, + {label: "Spain", value: "spain", code: "+34"}, + {label: "Sri Lanka", value: "sri-lanka", code: "+94"}, + {label: "Sudan", value: "sudan", code: "+249"}, + {label: "Suriname", value: "suriname", code: "+597"}, + {label: "Sweden", value: "sweden", code: "+46"}, + {label: "Switzerland", value: "switzerland", code: "+41"}, + {label: "Syria", value: "syria", code: "+963"}, + {label: "Taiwan", value: "taiwan", code: "+886"}, + {label: "Tajikistan", value: "tajikistan", code: "+992"}, + {label: "Tanzania", value: "tanzania", code: "+255"}, + {label: "Thailand", value: "thailand", code: "+66"}, + {label: "Timor‑Leste", value: "timor-leste", code: "+670"}, + {label: "Togo", value: "togo", code: "+228"}, + {label: "Tonga", value: "tonga", code: "+676"}, + {label: "Trinidad and Tobago", value: "trinidad-and-tobago", code: "+1-868"}, + {label: "Tunisia", value: "tunisia", code: "+216"}, + {label: "Turkey", value: "turkey", code: "+90"}, + {label: "Turkmenistan", value: "turkmenistan", code: "+993"}, + {label: "Tuvalu", value: "tuvalu", code: "+688"}, + {label: "Uganda", value: "uganda", code: "+256"}, + {label: "Ukraine", value: "ukraine", code: "+380"}, + {label: "United Arab Emirates", value: "united-arab-emirates", code: "+971"}, + {label: "United Kingdom", value: "united-kingdom", code: "+44"}, + {label: "United States", value: "united-states", code: "+1"}, + {label: "Uruguay", value: "uruguay", code: "+598"}, + {label: "Uzbekistan", value: "uzbekistan", code: "+998"}, + {label: "Vanuatu", value: "vanuatu", code: "+678"}, + { + label: "Vatican City", + value: "vatican-city", + code: "+379" /* برخی منابع مختلف است */, + }, + {label: "Venezuela", value: "venezuela", code: "+58"}, + {label: "Vietnam", value: "vietnam", code: "+84"}, + {label: "Yemen", value: "yemen", code: "+967"}, + {label: "Zambia", value: "zambia", code: "+260"}, + {label: "Zimbabwe", value: "zimbabwe", code: "+263"}, +]; + +export const all_countries_code = [ + {code: "+93", label: "Afghanistan"}, + {code: "+355", label: "Albania"}, + {code: "+213", label: "Algeria"}, + {code: "+1-684", label: "American Samoa"}, + {code: "+376", label: "Andorra"}, + {code: "+244", label: "Angola"}, + {code: "+1-264", label: "Anguilla"}, + {code: "+1-268", label: "Antigua and Barbuda"}, + {code: "+54", label: "Argentina"}, + {code: "+374", label: "Armenia"}, + {code: "+297", label: "Aruba"}, + {code: "+61", label: "Australia"}, + {code: "+43", label: "Austria"}, + {code: "+994", label: "Azerbaijan"}, + {code: "+1-242", label: "Bahamas"}, + {code: "+973", label: "Bahrain"}, + {code: "+880", label: "Bangladesh"}, + {code: "+1-246", label: "Barbados"}, + {code: "+375", label: "Belarus"}, + {code: "+32", label: "Belgium"}, + {code: "+501", label: "Belize"}, + {code: "+229", label: "Benin"}, + {code: "+975", label: "Bhutan"}, + {code: "+591", label: "Bolivia"}, + {code: "+387", label: "Bosnia and Herzegovina"}, + {code: "+267", label: "Botswana"}, + {code: "+55", label: "Brazil"}, + {code: "+673", label: "Brunei"}, + {code: "+359", label: "Bulgaria"}, + {code: "+226", label: "Burkina Faso"}, + {code: "+257", label: "Burundi"}, + {code: "+238", label: "Cabo Verde"}, + {code: "+855", label: "Cambodia"}, + {code: "+237", label: "Cameroon"}, + {code: "+1", label: "Canada"}, + {code: "+236", label: "Central African Republic"}, + {code: "+235", label: "Chad"}, + {code: "+56", label: "Chile"}, + {code: "+86", label: "China"}, + {code: "+57", label: "Colombia"}, + {code: "+269", label: "Comoros"}, + {code: "+242", label: "Congo"}, + {code: "+243", label: "Congo, Democratic Republic of the"}, + {code: "+506", label: "Costa Rica"}, + {code: "+385", label: "Croatia"}, + {code: "+53", label: "Cuba"}, + {code: "+357", label: "Cyprus"}, + {code: "+420", label: "Czech Republic"}, + {code: "+45", label: "Denmark"}, + {code: "+253", label: "Djibouti"}, + {code: "+1-767", label: "Dominica"}, + {code: "+1-809", label: "Dominican Republic"}, + {code: "+593", label: "Ecuador"}, + {code: "+20", label: "Egypt"}, + {code: "+503", label: "El Salvador"}, + {code: "+240", label: "Equatorial Guinea"}, + {code: "+291", label: "Eritrea"}, + {code: "+372", label: "Estonia"}, + {code: "+268", label: "Eswatini"}, + {code: "+251", label: "Ethiopia"}, + {code: "+679", label: "Fiji"}, + {code: "+358", label: "Finland"}, + {code: "+33", label: "France"}, + {code: "+241", label: "Gabon"}, + {code: "+220", label: "Gambia"}, + {code: "+995", label: "Georgia"}, + {code: "+49", label: "Germany"}, + {code: "+233", label: "Ghana"}, + {code: "+30", label: "Greece"}, + {code: "+1-473", label: "Grenada"}, + {code: "+502", label: "Guatemala"}, + {code: "+224", label: "Guinea"}, + {code: "+245", label: "Guinea-Bissau"}, + {code: "+592", label: "Guyana"}, + {code: "+509", label: "Haiti"}, + {code: "+504", label: "Honduras"}, + {code: "+36", label: "Hungary"}, + {code: "+354", label: "Iceland"}, + {code: "+91", label: "India"}, + {code: "+62", label: "Indonesia"}, + {code: "+98", label: "Iran"}, + {code: "+964", label: "Iraq"}, + {code: "+353", label: "Ireland"}, + {code: "+972", label: "Israel"}, + {code: "+39", label: "Italy"}, + {code: "+1-876", label: "Jamaica"}, + {code: "+81", label: "Japan"}, + {code: "+962", label: "Jordan"}, + {code: "+7", label: "Kazakhstan"}, + {code: "+254", label: "Kenya"}, + {code: "+686", label: "Kiribati"}, + {code: "+965", label: "Kuwait"}, + {code: "+996", label: "Kyrgyzstan"}, + {code: "+856", label: "Laos"}, + {code: "+371", label: "Latvia"}, + {code: "+961", label: "Lebanon"}, + {code: "+266", label: "Lesotho"}, + {code: "+231", label: "Liberia"}, + {code: "+218", label: "Libya"}, + {code: "+423", label: "Liechtenstein"}, + {code: "+370", label: "Lithuania"}, + {code: "+352", label: "Luxembourg"}, + {code: "+853", label: "Macau"}, + {code: "+389", label: "North Macedonia"}, + {code: "+261", label: "Madagascar"}, + {code: "+265", label: "Malawi"}, + {code: "+60", label: "Malaysia"}, + {code: "+960", label: "Maldives"}, + {code: "+223", label: "Mali"}, + {code: "+356", label: "Malta"}, + {code: "+692", label: "Marshall Islands"}, + {code: "+222", label: "Mauritania"}, + {code: "+230", label: "Mauritius"}, + {code: "+52", label: "Mexico"}, + {code: "+691", label: "Micronesia"}, + {code: "+373", label: "Moldova"}, + {code: "+377", label: "Monaco"}, + {code: "+976", label: "Mongolia"}, + {code: "+382", label: "Montenegro"}, + {code: "+212", label: "Morocco"}, + {code: "+258", label: "Mozambique"}, + {code: "+95", label: "Myanmar"}, + {code: "+264", label: "Namibia"}, + {code: "+674", label: "Nauru"}, + {code: "+977", label: "Nepal"}, + {code: "+31", label: "Netherlands"}, + {code: "+64", label: "New Zealand"}, + {code: "+505", label: "Nicaragua"}, + {code: "+227", label: "Niger"}, + {code: "+234", label: "Nigeria"}, + {code: "+47", label: "Norway"}, + {code: "+968", label: "Oman"}, + {code: "+92", label: "Pakistan"}, + {code: "+680", label: "Palau"}, + {code: "+970", label: "Palestine"}, + {code: "+507", label: "Panama"}, + {code: "+675", label: "Papua New Guinea"}, + {code: "+595", label: "Paraguay"}, + {code: "+51", label: "Peru"}, + {code: "+63", label: "Philippines"}, + {code: "+48", label: "Poland"}, + {code: "+351", label: "Portugal"}, + {code: "+1-787", label: "Puerto Rico"}, + {code: "+974", label: "Qatar"}, + {code: "+40", label: "Romania"}, + {code: "+7", label: "Russia"}, + {code: "+250", label: "Rwanda"}, + {code: "+590", label: "Saint Barthélemy"}, + {code: "+1-869", label: "Saint Kitts and Nevis"}, + {code: "+1-758", label: "Saint Lucia"}, + {code: "+508", label: "Saint Pierre and Miquelon"}, + {code: "+1-784", label: "Saint Vincent and the Grenadines"}, + {code: "+685", label: "Samoa"}, + {code: "+378", label: "San Marino"}, + {code: "+239", label: "Sao Tome and Principe"}, + {code: "+966", label: "Saudi Arabia"}, + {code: "+221", label: "Senegal"}, + {code: "+381", label: "Serbia"}, + {code: "+248", label: "Seychelles"}, + {code: "+232", label: "Sierra Leone"}, + {code: "+65", label: "Singapore"}, + {code: "+421", label: "Slovakia"}, + {code: "+386", label: "Slovenia"}, + {code: "+677", label: "Solomon Islands"}, + {code: "+27", label: "South Africa"}, + {code: "+211", label: "South Sudan"}, + {code: "+34", label: "Spain"}, + {code: "+94", label: "Sri Lanka"}, + {code: "+249", label: "Sudan"}, + {code: "+597", label: "Suriname"}, + {code: "+268", label: "Swaziland"}, + {code: "+46", label: "Sweden"}, + {code: "+41", label: "Switzerland"}, + {code: "+963", label: "Syria"}, + {code: "+886", label: "Taiwan"}, + {code: "+992", label: "Tajikistan"}, + {code: "+255", label: "Tanzania"}, + {code: "+66", label: "Thailand"}, + {code: "+670", label: "Timor‑Leste"}, + {code: "+228", label: "Togo"}, + {code: "+676", label: "Tonga"}, + {code: "+1-868", label: "Trinidad and Tobago"}, + {code: "+216", label: "Tunisia"}, + {code: "+90", label: "Turkey"}, + {code: "+993", label: "Turkmenistan"}, + {code: "+688", label: "Tuvalu"}, + {code: "+256", label: "Uganda"}, + {code: "+380", label: "Ukraine"}, + {code: "+971", label: "United Arab Emirates"}, + {code: "+44", label: "United Kingdom"}, + {code: "+1", label: "United States"}, + {code: "+598", label: "Uruguay"}, + {code: "+998", label: "Uzbekistan"}, + {code: "+678", label: "Vanuatu"}, + {code: "+39‑89", label: "Vatican City"}, + {code: "+58", label: "Venezuela"}, + {code: "+84", label: "Vietnam"}, + {code: "+967", label: "Yemen"}, + {code: "+260", label: "Zambia"}, + {code: "+263", label: "Zimbabwe"}, +]; + +export const default_info = { + phone_number: "+989385725269", + email: "ipd@shomal.hospital", +}; +export const pages_titles = { + contact_us: { + fa: "تماس با ما", + en: "Contact Us", + ar: "اتصل بنا", + }, + doctors: { + fa: "پزشکان", + en: "Doctors", + ar: "الأطباء", + }, + medical_services: { + fa: "خدمات پزشکی", + en: "Medical Services", + ar: "الخدمات الطبية", + }, + patient_rights_charter: { + fa: "منشور حقوق بیمار", + en: "Patient Rights Charter", + ar: "ميثاق حقوق المرضى", + }, + pricing: { + fa: "قیمت‌ها", + en: "Pricing", + ar: "الأسعار", + }, + transfer_services: { + fa: "خدمات ترانسفر", + en: "Transfer Services", + ar: "خدمات النقل", + }, + upload_documents: { + fa: "آپلود مدارک", + en: "Upload Documents", + ar: "تحميل المستندات", + }, + about_us: { + fa: "درباره ما", + en: "About Us", + ar: "معلومات عنا", + }, +}; diff --git a/src/constants/menu/menu.const.ts b/src/constants/menu/menu.const.ts new file mode 100644 index 0000000..a35246a --- /dev/null +++ b/src/constants/menu/menu.const.ts @@ -0,0 +1,140 @@ +import { MenuItemsTypes } from "@/types/global/menu.type"; + +export const DefaultMenuLinks: MenuItemsTypes[] = [ + { + id: 1, + label: { + fa: "درباره ما", + en: "About Us", + ar: "معلومات عنا", + }, + href: "/", + sub: [], + }, + { + id: 4, + label: { + fa: "پزشکان", + en: "Doctors", + ar: "الأطباء", + }, + href: "/doctors", + sub: [], + }, + { + id: 5, + label: { + fa: "لیست قیمت‌ها", + en: "Pricing", + ar: "الأسعار", + }, + href: "/pricing", + sub: [], + }, + { + id: 6, + label: { + fa: "خدمات ما", + en: "Our Services", + ar: "خدماتنا", + }, + href: "#", + sub: [ + { + id: 1, + label: { + fa: "خدمات پزشکی", + en: "Medical Services", + ar: "الخدمات الطبية", + }, + href: "/medical-services", + sub: [], + }, + { + id: 2, + label: { + fa: "خدمات گردشگری", + en: "Tourism & Transfer Services", + ar: "خدمات النقل والسياحة", + }, + href: "/transfer-services", + sub: [], + }, + ], + }, + { + id: 7, + label: { + fa: "منشور حقوق بیمار", + en: "Patient Rights Charter", + ar: "ميثاق حقوق المريض", + }, + href: "/patient-rights-charter", + sub: [], + }, + { + id: 8, + label: { + fa: "تماس با ما", + en: "Contact Us", + ar: "اتصل بنا", + }, + href: "/contact-us", + sub: [], + }, +]; + +export const FooterMenuLinks1: MenuItemsTypes[] = [ + { + id: 1, + label: { + fa: "پزشکان", + en: "Doctors", + ar: "الأطباء", + }, + href: "/doctors", + sub: [], + }, + { + id: 2, + label: { + fa: "لیست قیمت‌ها", + en: "Pricing", + ar: "الأسعار", + }, + href: "/pricing", + sub: [], + }, + { + id: 3, + label: { + fa: "خدمات پزشکی ما", + en: "Our Medical Services", + ar: "الخدمات الطبية", + }, + href: "/medical-services", + sub: [], + }, + { + id: 4, + label: { + fa: "خدمات گردشگری", + en: "Tourism & Transfer Services", + ar: "خدمات النقل والسياحة", + }, + href: "/transfer-services", + sub: [], + }, +]; +export const Menu_buttons = { + upload_document: { + fa: "آپلود مدارک پزشکی", + en: "Upload Medical Documents", + ar: "تحميل المستندات الطبية", + }, + request_to_accept: { + fa: "درخواست پذیرش بیمار", + en: "Patient Admission Request", + ar: "طلب قبول المريض", + }, +}; diff --git a/src/data/doctors.json b/src/data/doctors.json new file mode 100644 index 0000000..2bc62da --- /dev/null +++ b/src/data/doctors.json @@ -0,0 +1,12 @@ +[ + { + "id": 1, + "fullname": "اصغر محمدی", + "expertise": "متخصص قلب" + }, + { + "id": 2, + "fullname": "علی احمدی", + "expertise": "متخصص گوش و حلق و بینی" + } +] diff --git a/src/data/faq.json b/src/data/faq.json new file mode 100644 index 0000000..f4c7794 --- /dev/null +++ b/src/data/faq.json @@ -0,0 +1,12 @@ +[ + { + "id": 1, + "question": "بیمه های طرف قرارداد بیمارستان و درمانگاه کدامند ؟", + "answer": "لیست بیمه های طرف قرارداد را می‌توانید در لینک زیر مشاهده نمائید:\n\nhttps://shomalhospital.ir/departments/accepted-insurance/" + }, + { + "id": 2, + "question": "بیمه تکمیلی دارم ، بیمه من چند درصد از هزینه هایم را پرداخت می کند؟", + "answer": "لیست بیمه های طرف قرارداد را می‌توانید در لینک زیر مشاهده نمائید:\n\nhttps://shomalhospital.ir/departments/accepted-insurance/" + } +] diff --git a/src/middleware.js b/src/middleware.js new file mode 100644 index 0000000..93a0ec3 --- /dev/null +++ b/src/middleware.js @@ -0,0 +1,32 @@ +import {NextResponse} from "next/server"; + +const locales = ["en", "fa","ar"]; + +export function middleware(request) { + const {pathname} = request.nextUrl; + + if ( + pathname.startsWith("/_next") || + pathname.startsWith("/favicon.ico") || + pathname.startsWith("/robots.txt") || + pathname.match(/^\/.*\.(png|jpg|jpeg|gif|svg|webp|ico)$/) + ) { + return NextResponse.next(); + } + + const pathnameHasLocale = locales.some( + (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}` + ); + if (pathnameHasLocale) return NextResponse.next(); + + const locale = "fa"; + const url = request.nextUrl.clone(); + url.pathname = `/${locale}${pathname}`; + return NextResponse.redirect(url); +} + +// export const config = { +// matcher: [ +// "/((?!_next|favicon.ico|robots.txt|.*\\.(png|jpg|jpeg|gif|svg|webp|ico)).*)", +// ], +// }; diff --git a/src/types/global/menu.type.ts b/src/types/global/menu.type.ts new file mode 100644 index 0000000..8d8fe97 --- /dev/null +++ b/src/types/global/menu.type.ts @@ -0,0 +1,8 @@ +export interface MenuItemsTypes { + href: string; + label: { + [a:string]:string + }; + id: number; + sub: MenuItemsTypes[] | []; +} diff --git a/src/types/icons/icons.type.ts b/src/types/icons/icons.type.ts new file mode 100644 index 0000000..faf6a3d --- /dev/null +++ b/src/types/icons/icons.type.ts @@ -0,0 +1,6 @@ +export interface IconsProps { + color?: string; + size?: string; + width?: string; + height?: string; +} diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..63e2a74 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,105 @@ +export interface packages_types { + id: number; + slug: string; + svg: string; + title: { + [a: string]: string; + }; + content: { + [a: string]: string; + }; + sub_packages: packages_types[]; +} +export type languages_types = "fa" | "en" | "ar"; +export interface DoctorDataType { + id: number; + fullname: { + fa: string; + en: string; + ar: string; + }; + image: string; + specialties: { + id: number; + name: { + fa: string; + en: string; + ar: string; + }; + }[]; + category: { + id: number; + name: { + fa: string; + en: string; + ar: string; + }; + }; + doctor_identify_number: number; +} +export interface contact_us_form_types { + [a: string]: { + [b: string]: { + type: "text" | "select" | "number"; + as: "input" | "select" | "textarea"; + }; + }; +} + +export interface DoctorDataType { + id: number; + image: string; + fullname: { + fa: string; + en: string; + ar: string; + }; + specialties: { + id: number; + name: { + fa: string; + en: string; + ar: string; + }; + }[]; + category: { + id: number; + name: { + fa: string; + en: string; + ar: string; + }; + }; + doctor_identify_number: number; +} +export interface sub_packages_data_type { + id: number; + slug: string; + svg: string; + title: { + fa: string; + en: string; + ar: string; + }; + thumbnail: string; + description?: { + fa: string; + en: string; + ar: string; + }; + services?: { + fa: string; + en: string; + ar: string; + }; + price?: { + fa: string; + en: string; + ar: string; + }; + notes?: { + fa: string; + en: string; + ar: string; + }; +} diff --git a/src/ui/TransferServicesPackages.tsx b/src/ui/TransferServicesPackages.tsx new file mode 100644 index 0000000..573e208 --- /dev/null +++ b/src/ui/TransferServicesPackages.tsx @@ -0,0 +1,381 @@ +"use client"; +import React, {useState} from "react"; +import ChevronLeftSvg from "./components/icons/ChevronLeftSvg"; +import Image from "next/image"; +interface AccordionProps { + defaultOpen?: number; + package_price: string; + transfer_service_page?: { + page_title: string; + introduction: { + title: string; + head_text: string; + mojgan_yaghoubi: { + fullname: string; + position: string; + phone_number: string; + email: string; + }; + hassan_mozaffarzadeh: { + fullname: string; + position: string; + phone_number: string; + email: string; + }; + packages_list: string; + our_serives_ipd: string; + packages: { + name: string; + dsc: string; + price: string; + }[]; + image_headTitle: string; + amol_museum: string; + grand_mosque: string; + fire_temple: string; + }; + jobs: string; + services: string; + }; + oxin_hotel_location: string; + olympic_hotel_location: string; +} +export default function TransferServicesPackages({ + defaultOpen, + package_price, + transfer_service_page, + oxin_hotel_location, + olympic_hotel_location, +}: AccordionProps) { + const [openIndex, setOpenIndex] = useState( + defaultOpen ?? null + ); + + const toggle = (index: number) => { + setOpenIndex(openIndex === index ? null : index); + }; + return ( +
+
+ + +
+ {openIndex === 1 && ( +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+ +
+

+ {transfer_service_page?.introduction.image_headTitle} +

+
+
+
+ +
+
+ {transfer_service_page?.introduction.amol_museum} +
+
+
+
+ +
+
+ {transfer_service_page?.introduction.grand_mosque} +
+
+
+
+ +
+
+ {transfer_service_page?.introduction.fire_temple} +
+
+
+
+ + <> +

{package_price}

+
+ {transfer_service_page?.introduction.packages[0].price} +
+ + + <> +

{oxin_hotel_location}

+
+ +
+ +
+ )} +
+
+
+ + +
+ {openIndex === 2 && ( +
+
+ +
+

+ {transfer_service_page?.introduction.image_headTitle} +

+
+
+
+ +
+
+ {transfer_service_page?.introduction.amol_museum} +
+
+
+
+ +
+
+ {transfer_service_page?.introduction.grand_mosque} +
+
+
+
+ +
+
+ {transfer_service_page?.introduction.fire_temple} +
+
+
+
+ + <> +

{package_price}:

+
+ {transfer_service_page?.introduction.packages[1].price} +
+ + + <> +

{oxin_hotel_location}

+
+ +
+ +
+ )} +
+
+
+ + +
+ {openIndex === 3 && ( +
+
+ +
+

+ {transfer_service_page?.introduction.image_headTitle} +

+
+
+
+ +
+
+ {transfer_service_page?.introduction.amol_museum} +
+
+
+
+ +
+
+ {transfer_service_page?.introduction.grand_mosque} +
+
+
+
+ +
+
+ {transfer_service_page?.introduction.fire_temple} +
+
+
+
+ + <> +

{package_price}:

+
+ {transfer_service_page?.introduction.packages[2].price} +
+ + + <> +

{olympic_hotel_location}

+
+ +
+ +
+ )} +
+
+
+ ); +} diff --git a/src/ui/components/Footer.tsx b/src/ui/components/Footer.tsx new file mode 100644 index 0000000..af1d3be --- /dev/null +++ b/src/ui/components/Footer.tsx @@ -0,0 +1,5 @@ +import React from "react"; + +export default function Footer() { + return <>; +} diff --git a/src/ui/components/InsurancesSlider.tsx b/src/ui/components/InsurancesSlider.tsx new file mode 100644 index 0000000..a6644b7 --- /dev/null +++ b/src/ui/components/InsurancesSlider.tsx @@ -0,0 +1,184 @@ +"use client"; +import Image from "next/image"; +import Link from "next/link"; +import React from "react"; +import {Autoplay, Navigation} from "swiper/modules"; +import {Swiper, SwiperSlide} from "swiper/react"; +import "swiper/css"; +import "swiper/css/navigation"; +export default function InsurancesSlider() { + return ( + <> + console.log("slide change")} + onSwiper={(swiper) => console.log(swiper)} + className="h-[120px]" + > + + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ {/* + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ +
*/} +
+ + ); +} diff --git a/src/ui/components/LanguagesChanger.tsx b/src/ui/components/LanguagesChanger.tsx new file mode 100644 index 0000000..13212c8 --- /dev/null +++ b/src/ui/components/LanguagesChanger.tsx @@ -0,0 +1,66 @@ +"use client"; +import {languages_types} from "@/types"; +import {usePathname, useRouter} from "next/navigation"; +import React from "react"; + +export default function LanguagesChanger({lang}: {lang: languages_types}) { + const pathname = usePathname(); + const router = useRouter(); + const removeLangPrefix = (path: string) => { + const regex = /^\/(fa|en|ar)(\/|$)/; + return path.replace(regex, "/"); + }; + + const handleChangeLanguage = (lang: languages_types) => { + const cleanPath = removeLangPrefix(pathname); // مسیر بدون prefix + const newPath = `/${lang}${cleanPath}`; + router.push(newPath); + }; + return ( + <> +
+ + + + | + + + + | + + + + + + +
+ + ); +} diff --git a/src/ui/components/MobileToggler.tsx b/src/ui/components/MobileToggler.tsx new file mode 100644 index 0000000..cae7faa --- /dev/null +++ b/src/ui/components/MobileToggler.tsx @@ -0,0 +1,28 @@ +"use client"; +import React, {useState} from "react"; + +export default function MobileToggler() { + const [, setOpen] = useState(false); + return ( + <> + + + ); +} diff --git a/src/ui/components/global/Accordion.tsx b/src/ui/components/global/Accordion.tsx new file mode 100644 index 0000000..424be2e --- /dev/null +++ b/src/ui/components/global/Accordion.tsx @@ -0,0 +1,117 @@ +"use client"; + +import {useState} from "react"; +import ChevronLeftSvg from "../icons/ChevronLeftSvg"; +import Image from "next/image"; +import { default_info } from "@/constants"; + +interface AccordionProps { + title: string; + description: string; + thumbnail: string; + services: string; + notes?: string; + price: string; + defaultOpen?: number; + index: number; +} + +export default function Accordion({ + title, + index, + description, + services, + notes = "", + thumbnail, + price, + defaultOpen, +}: AccordionProps) { + const [openIndex, setOpenIndex] = useState( + defaultOpen ?? null + ); + + const toggle = (index: number) => { + setOpenIndex(openIndex === index ? null : index); + }; + + return ( +
+
+ + +
+ {openIndex === index && ( +
+ {thumbnail && ( +
+ +
+ )} + {description && ( +
+ )} + {services && ( + <> +

+ خدمات قابل ارائه به بيمار شامل: +

+
+ + )} + {price && ( + <> +

قیمت پکیج ها:

+
+ + )} + {notes && ( + <> +

نکات مهم :

+
+ + )} + <> +

+ رزرو نوبت و مشاوره رايگان با پزشك و كارشناس IPD : +

+
+ +
واتساپ :
+
+ +
+ )} +
+
+
+ ); +} diff --git a/src/ui/components/global/Button.tsx b/src/ui/components/global/Button.tsx new file mode 100644 index 0000000..4f72f17 --- /dev/null +++ b/src/ui/components/global/Button.tsx @@ -0,0 +1,10 @@ +import React from "react"; +interface ButtonProps { + label: string; + onClick: (e: React.MouseEvent) => void; +} +export default function Button({label,onClick}: ButtonProps) { + return ( + + ); +} diff --git a/src/ui/components/global/CustomLink.tsx b/src/ui/components/global/CustomLink.tsx new file mode 100644 index 0000000..804d010 --- /dev/null +++ b/src/ui/components/global/CustomLink.tsx @@ -0,0 +1,14 @@ +import Link from "next/link"; +import React from "react"; +interface CustomLinkProps { + href: string; + label: string; + className?: string; +} +export default function CustomLink({href, label, className}: CustomLinkProps) { + return ( + + {label} + + ); +} diff --git a/src/ui/components/global/CustomSelect.tsx b/src/ui/components/global/CustomSelect.tsx new file mode 100644 index 0000000..4302ca7 --- /dev/null +++ b/src/ui/components/global/CustomSelect.tsx @@ -0,0 +1,80 @@ +"use client"; +import React, { useMemo } from "react"; +import Select from "react-select"; + +export interface Option { + value: string; + label: string; +} + +interface CustomSelectProps { + options: Option[]; + value?: string; + onChange?: (value: string) => void; + placeholder?: string; + className?: string; + isSearchable?: boolean; + isDisabled?: boolean; + isClearable?: boolean; + rtl?: boolean; +} + +const CustomSelect: React.FC = ({ + options, + value, + onChange, + placeholder = "انتخاب کنید...", + className = "", + isSearchable = true, + isDisabled = false, + isClearable = false, + rtl = true +}) => { + const selectedOption = useMemo( + () => options.find((opt) => opt.value === value) ?? null, + [value, options] + ); + + return ( + setName(e.target.value)} + placeholder={dict.search_by_name} + className="bg-white py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ +
+
+ +
+
+ + ); +} diff --git a/src/ui/forms/PatientAcceptForm.tsx b/src/ui/forms/PatientAcceptForm.tsx new file mode 100644 index 0000000..eafdbbd --- /dev/null +++ b/src/ui/forms/PatientAcceptForm.tsx @@ -0,0 +1,222 @@ +"use client"; +import React, {useState} from "react"; +import CustomSelect from "../components/global/CustomSelect"; +import {all_countries} from "@/constants"; +import { generateIPDReceptionCode } from "@/utils/functions"; + +interface PatientAcceptFormValues { + first_name: string; + last_name: string; + email: string; + phone_number: string; + age: string; + country: string; + country_code: string; + service: string; + message: string; +} +interface PatientAcceptFormProps { + lang: string; + dict: { + form: { + fields: { + first_name: string; + last_name: string; + phone_number: string; + email: string; + age: string; + country: string; + services: string; + message: string; + }; + buttons: { + send_whatsapp: string; + send_email: string; + }; + }; + }; +} +function PatientAcceptForm({lang, dict}: PatientAcceptFormProps) { + const [formData, setFormData] = useState({ + first_name: "", + last_name: "", + email: "", + phone_number: "", + age: "", + country: "", + country_code: "", + service: "", + message: "", + }); + + const sendToWhatsApp = (formData: PatientAcceptFormValues) => { + const phone = "9112211874"; // بدون + و با کد کشور + const message = + `درخواست پذیرش جدید ثبت شد:\n` + + `شناسه تولید شده: ${generateIPDReceptionCode()}\n` + + `نام: ${formData.first_name}\n` + + `نام خانوادگی: ${formData.last_name}\n` + + `سن: ${formData.age ?? "وارد نشده است"}\n` + + `ایمیل: ${formData.email ?? "وارد نشده است"}\n` + + `شماره تماس: ${formData.phone_number ?? "وارد نشده است"}\n` + + `کشور: ${formData.country ?? "وارد نشده است"}\n` + + `کد کشور: ${formData.country_code ?? "وارد نشده است"}\n` + + // `سرویس: ${formData.service}\n` + + `توضیحات: ${formData.message ?? "وارد نشده است"}\n`; + + const encoded = encodeURIComponent(message); + window.open(`https://wa.me/${phone}?text=${encoded}`, "_blank"); + }; + const sendToEmail = (formData: PatientAcceptFormValues) => { + const email = "mojtaba5269@gmail.com"; + const subject = "درخواست پذیرش جدید"; + + const message = + `درخواست پذیرش جدید ثبت شد:\n` + + `شناسه تولید شده: ${generateIPDReceptionCode()}\n` + + `نام: ${formData.first_name}\n` + + `نام خانوادگی: ${formData.last_name}\n` + + `سن: ${formData.age ?? "وارد نشده است"}\n` + + `ایمیل: ${formData.email ?? "وارد نشده است"}\n` + + `شماره تماس: ${formData.phone_number ?? "وارد نشده است"}\n` + + `کشور: ${formData.country ?? "وارد نشده است"}\n` + + `کد کشور: ${formData.country_code ?? "وارد نشده است"}\n` + + // `سرویس: ${formData.service}\n` + + `توضیحات: ${formData.message ?? "وارد نشده است"}\n`; + + const mailto = `mailto:${email}?subject=${encodeURIComponent( + subject + )}&body=${encodeURIComponent(message)}`; + + window.location.href = mailto; + }; + return ( + <> +
+
+ + setFormData((prev) => ({...prev, first_name: e.target.value})) + } + placeholder={dict?.form?.fields?.first_name} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, last_name: e.target.value})) + } + placeholder={dict?.form?.fields?.last_name} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, phone_number: e.target.value})) + } + placeholder={dict?.form?.fields?.phone_number} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, email: e.target.value})) + } + placeholder={dict?.form?.fields?.email} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, age: e.target.value})) + } + placeholder={dict?.form?.fields?.age} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({ + ...prev, + country: value, + country_code: all_countries.find( + (c) => c.value === value + )?.code || "", + })) + } + placeholder={dict.form.fields.country} + isClearable + className="w-full" + rtl + /> +
+
+ {/* */} + {/* + setFormData((prev) => ({...prev, service: value})) + } + placeholder={dict.form.fields.services} + isClearable + className="w-full" + rtl + /> */} +
+
+ +
+
+ + +
+
+ + ); +} + +export default PatientAcceptForm; diff --git a/src/ui/forms/PatientConsultantForm.tsx b/src/ui/forms/PatientConsultantForm.tsx new file mode 100644 index 0000000..4a21af7 --- /dev/null +++ b/src/ui/forms/PatientConsultantForm.tsx @@ -0,0 +1,198 @@ +"use client"; +import React, {useState} from "react"; +import CustomSelect from "../components/global/CustomSelect"; +import {all_countries} from "@/constants"; +import {generateIPDConsultantCode} from "@/utils/functions"; + +interface PatientAcceptFormValues { + first_name: string; + last_name: string; + email: string; + phone_number: string; + age: string; + country: string; + country_code: string; + + message: string; +} +interface PatientAcceptFormProps { + lang: string; + dict: { + form: { + fields: { + first_name: string; + last_name: string; + phone_number: string; + email: string; + age: string; + country: string; + message: string; + }; + buttons: { + send_whatsapp: string; + send_email: string; + }; + }; + }; +} +function PatientConsultantForm({lang, dict}: PatientAcceptFormProps) { + const [formData, setFormData] = useState({ + first_name: "", + last_name: "", + email: "", + phone_number: "", + age: "", + country: "", + country_code: "", + + message: "", + }); + + const sendToWhatsApp = (formData: PatientAcceptFormValues) => { + const phone = "989385745269"; // بدون + و با کد کشور + const message = + `درخواست مشاوره جدید ثبت شد:\n` + + `شناسه تولید شده: ${generateIPDConsultantCode()}\n` + + `نام: ${formData.first_name}\n` + + `نام خانوادگی: ${formData.last_name}\n` + + `سن: ${formData.age ?? "وارد نشده است"}\n` + + `ایمیل: ${formData.email ?? "وارد نشده است"}\n` + + `شماره تماس: ${formData.phone_number ?? "وارد نشده است"}\n` + + `کشور: ${formData.country ?? "وارد نشده است"}\n` + + `کشور: ${formData.country_code ?? "وارد نشده است"}\n` + + `توضیحات: ${formData.message ?? "وارد نشده است"}\n`; + + const encoded = encodeURIComponent(message); + window.open(`https://wa.me/${phone}?text=${encoded}`, "_blank"); + }; + const sendToEmail = (formData: PatientAcceptFormValues) => { + const email = "mojtaba5269@gmail.com"; + const subject = "درخواست مشاوره جدید ارسال شد"; + + const message = + `درخواست مشاوره جدید ثبت شد :\n` + + `شناسه تولید شده: ${generateIPDConsultantCode()}\n` + + `نام: ${formData.first_name}\n` + + `نام خانوادگی: ${formData.last_name}\n` + + `سن: ${formData.age ?? "وارد نشده است"}\n` + + `ایمیل: ${formData.email ?? "وارد نشده است"}\n` + + `شماره تماس: ${formData.phone_number ?? "وارد نشده است"}\n` + + `کشور: ${formData.country ?? "وارد نشده است"}\n` + + `کشور: ${formData.country_code ?? "وارد نشده است"}\n` + + `توضیحات: ${formData.message ?? "وارد نشده است"}\n`; + + const mailto = `mailto:${email}?subject=${encodeURIComponent( + subject + )}&body=${encodeURIComponent(message)}`; + + window.location.href = mailto; + }; + return ( + <> +
+
+ + setFormData((prev) => ({...prev, first_name: e.target.value})) + } + placeholder={dict?.form?.fields?.first_name} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, last_name: e.target.value})) + } + placeholder={dict?.form?.fields?.last_name} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, phone_number: e.target.value})) + } + placeholder={dict?.form?.fields?.phone_number} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, email: e.target.value})) + } + placeholder={dict?.form?.fields?.email} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({...prev, age: e.target.value})) + } + placeholder={dict?.form?.fields?.age} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+
+ + setFormData((prev) => ({ + ...prev, + country: value, + country_code: + all_countries.find((c) => c.value === value)?.code || "", + })) + } + placeholder={dict.form.fields.country} + isClearable + className="w-full" + rtl + /> +
+ +
+ +
+
+ + +
+
+ + ); +} + +export default PatientConsultantForm; diff --git a/src/ui/forms/UploadDocuments.tsx b/src/ui/forms/UploadDocuments.tsx new file mode 100644 index 0000000..682f5a6 --- /dev/null +++ b/src/ui/forms/UploadDocuments.tsx @@ -0,0 +1,74 @@ +"use client"; +import React, {useState} from "react"; + + +interface UploadDocumentsValues { + code: string; + files: [{src: string}] | []; + message: string; +} +interface UploadDocumentsProps { + lang: string; + dict: { + head_text: string; + input_code_placeholder: string; + input_files_label: string; + input_dsc: string; + sendbutton: string; + }; +} +function UploadDocuments({lang, dict}: UploadDocumentsProps) { + const [formData, setFormData] = useState({ + code: "", + files: [], + message: "", + }); + + const sendToEmail = (formData: UploadDocumentsValues) => {}; + return ( + <> +
+
+ + setFormData((prev) => ({...prev, first_name: e.target.value})) + } + placeholder={dict.input_code_placeholder} + className="py-4 px-6 rounded-2xl border-[1px] border-neutral-200 w-full focus:outline-secondary focus:outline-[1px]" + /> +
+ +
+ + +
+
+ +
+
+ +
+
+ + ); +} + +export default UploadDocuments; diff --git a/src/ui/home-header-slider/HomeHeaderSlider.tsx b/src/ui/home-header-slider/HomeHeaderSlider.tsx new file mode 100644 index 0000000..854e90c --- /dev/null +++ b/src/ui/home-header-slider/HomeHeaderSlider.tsx @@ -0,0 +1,72 @@ +"use client"; +import React from "react"; +import {Swiper, SwiperSlide} from "swiper/react"; +import "swiper/css"; +import "swiper/css/pagination"; +import "swiper/css/navigation"; + +import {Autoplay, Navigation, Pagination} from "swiper/modules"; +import Image from "next/image"; + +export default function HomeHeaderSlider() { + return ( + console.log("slide change")} + onSwiper={(swiper) => console.log(swiper)} + className="lg:h-[75vh] h-[460px]" + > + {/*
+
+ +
+
*/} + + + + + + + + + + + + +
+ ); +} diff --git a/src/ui/page-header-slider/PageHeaderSlider.tsx b/src/ui/page-header-slider/PageHeaderSlider.tsx new file mode 100644 index 0000000..57a2311 --- /dev/null +++ b/src/ui/page-header-slider/PageHeaderSlider.tsx @@ -0,0 +1,76 @@ +"use client"; +import React from "react"; +import {Swiper, SwiperSlide} from "swiper/react"; +import "swiper/css"; +import "swiper/css/pagination"; +import "swiper/css/navigation"; + +import {Autoplay, Navigation, Pagination} from "swiper/modules"; +import Image from "next/image"; +import { Page_header_slider } from "@/constants"; +import { languages_types } from "@/types"; + +export default function PageHeaderSlider({ + pageTitle, + imageSrc, + lang, +}: { + pageTitle: string; + imageSrc: string; + lang: string; +}) { + return ( + console.log("slide change")} + onSwiper={(swiper) => console.log(swiper)} + className="lg:h-[50vh] h-[460px]" + > +
+
+

+ {pageTitle} +

+

+ {Page_header_slider.hospital_name[lang as languages_types]} +

+

+ {Page_header_slider.n1_authority_validation[lang as languages_types]} +

+
+
+ + + + {/* + + */} +
+ ); +} diff --git a/src/ui/top-navbar/index.tsx b/src/ui/top-navbar/index.tsx new file mode 100644 index 0000000..b99fa8c --- /dev/null +++ b/src/ui/top-navbar/index.tsx @@ -0,0 +1,68 @@ +import React from "react"; +import LanguagesChanger from "../components/LanguagesChanger"; +import { languages_types } from "@/types"; +import { default_info } from "@/constants"; + +export default function TopNavbar({lang}:{lang:languages_types}) { + return ( +
+
+ + + + + + + {default_info.email} + +
+
+ + + + + + | + + + + + + + | + + +
+
+ ); +} diff --git a/src/utils/functions.ts b/src/utils/functions.ts new file mode 100644 index 0000000..51c6447 --- /dev/null +++ b/src/utils/functions.ts @@ -0,0 +1,35 @@ +import {languages_types} from "@/types"; + +export function toPersianNumber(num: string) { + const persianDigits = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"]; + return num + .toString() + .split("") + .map((d) => persianDigits[+d] || d) + .join(""); +} +export function removeLangFromPathname( + pathname: string, + lang: languages_types +) { + // بررسی می‌کنیم که pathname با /lang شروع می‌شود + const prefix = `/${lang}`; + console.log("prefix : ", prefix); + if (pathname.startsWith(prefix)) { + console.log("yes started"); + return pathname.slice(prefix.length) || "/"; // اگر مسیر خالی شد "/" برگردان + } + return pathname; // اگر prefix نبود، مسیر اصلی را برگردان +} + +export const getHref = (href: string, lang: string) => { + const cleanPath = href.replace(/^\/(fa|en|ar)(\/|$)/, "/"); + return `/${lang}${cleanPath}`; +}; +export function generateIPDReceptionCode() { + const randomNumber = Math.floor(100000 + Math.random() * 900000); // عدد 6 رقمی + return `ipd-r-${randomNumber}`; +}export function generateIPDConsultantCode() { + const randomNumber = Math.floor(100000 + Math.random() * 900000); // عدد 6 رقمی + return `ipd-c-${randomNumber}`; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c1efaa0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "src/middleware.js"], + "exclude": ["node_modules"] +}