From e9d52799b5df7a883b0987e7491c531acd33e0dd Mon Sep 17 00:00:00 2001 From: "[vinald]" Date: Mon, 1 Sep 2025 00:03:22 +0300 Subject: [PATCH 1/3] experience card --- src/App.jsx | 4 +- src/components/Button/Button.jsx | 17 ++++++ src/components/Button/Button.module.css | 17 ++++++ src/components/{ => Education}/Education.jsx | 0 src/components/Education/EducationCard.jsx | 0 .../Education/EducationCard.module.css | 0 src/components/Experience.jsx | 35 ------------ src/components/Experience/Experience.jsx | 33 +++++++++++ src/components/Experience/ExperienceCard.jsx | 26 +++++++++ .../Experience/ExperienceCard.module.css | 0 src/components/certificates/Certificates.jsx | 2 +- src/components/projects/ProjectCard.jsx | 2 + src/components/projects/Projects.jsx | 57 ++++++++++++------- 13 files changed, 135 insertions(+), 58 deletions(-) create mode 100644 src/components/Button/Button.jsx create mode 100644 src/components/Button/Button.module.css rename src/components/{ => Education}/Education.jsx (100%) create mode 100644 src/components/Education/EducationCard.jsx create mode 100644 src/components/Education/EducationCard.module.css delete mode 100644 src/components/Experience.jsx create mode 100644 src/components/Experience/Experience.jsx create mode 100644 src/components/Experience/ExperienceCard.jsx create mode 100644 src/components/Experience/ExperienceCard.module.css diff --git a/src/App.jsx b/src/App.jsx index 7a5126c..b9c25d6 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,7 @@ import Navbar from "./components/Navbar"; import Hero from "./components/Hero"; -import Experience from "./components/Experience"; -import Education from "./components/Education"; +import Experience from "./components/Experience/Experience.jsx"; +import Education from "./components/Education/Education.jsx"; import Skills from "./components/Skills"; import Projects from "./components/projects/Projects.jsx"; import Certificates from "./components/certificates/Certificates.jsx"; diff --git a/src/components/Button/Button.jsx b/src/components/Button/Button.jsx new file mode 100644 index 0000000..77e35bb --- /dev/null +++ b/src/components/Button/Button.jsx @@ -0,0 +1,17 @@ +import styles from "./Button.module.css"; + +export default function Button() { + const handleClick = () => { + alert("Button clicked!"); + }; + + return ( + <> +
+ +
+ + ); +} diff --git a/src/components/Button/Button.module.css b/src/components/Button/Button.module.css new file mode 100644 index 0000000..129bf36 --- /dev/null +++ b/src/components/Button/Button.module.css @@ -0,0 +1,17 @@ +.buttonContainer { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + margin: 20px 0; +} + +.button { + border: none; + background: blue; + color: white; + border-radius: 5px; + padding: 10px; + text-align: center; + cursor: pointer; +} diff --git a/src/components/Education.jsx b/src/components/Education/Education.jsx similarity index 100% rename from src/components/Education.jsx rename to src/components/Education/Education.jsx diff --git a/src/components/Education/EducationCard.jsx b/src/components/Education/EducationCard.jsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Education/EducationCard.module.css b/src/components/Education/EducationCard.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Experience.jsx b/src/components/Experience.jsx deleted file mode 100644 index e77d01a..0000000 --- a/src/components/Experience.jsx +++ /dev/null @@ -1,35 +0,0 @@ -function Experience() { - return ( -
-
-

Experience

-
- {/* Experience Item */} -
- - January 2025 - Present - -

- Software Developer, Infectious Disease Institute -

-

- Skills: Agile, Kotlin, Docker, OpenMRS -

-
    -
  • - Collaborated with teams to develop and maintain mobile healthcare - apps. -
  • -
  • Participated in Agile processes (sprints, stand-ups).
  • -
  • Enhanced OpenMRS functionality.
  • -
  • Reviewed code and mentored peers.
  • -
-
- - {/* Add remaining experiences in the same structure... */} -
-
-
- ); -} -export default Experience; diff --git a/src/components/Experience/Experience.jsx b/src/components/Experience/Experience.jsx new file mode 100644 index 0000000..6957248 --- /dev/null +++ b/src/components/Experience/Experience.jsx @@ -0,0 +1,33 @@ +import ExperienceCard from "./ExperienceCard"; + +function Experience() { + const experiences = [ + { + period: "January 2025 - Present", + title: "Software Developer, Infectious Disease Institute", + skills: ["Agile", "Kotlin", "Docker", "OpenMRS"], + responsibilities: [ + "Collaborated with teams to develop and maintain mobile healthcare apps.", + "Participated in Agile processes (sprints, stand-ups).", + "Enhanced OpenMRS functionality.", + "Reviewed code and mentored peers.", + ], + }, + ]; + return ( +
+
+

Experience

+
+ +
+
+
+ ); +} +export default Experience; diff --git a/src/components/Experience/ExperienceCard.jsx b/src/components/Experience/ExperienceCard.jsx new file mode 100644 index 0000000..fa99339 --- /dev/null +++ b/src/components/Experience/ExperienceCard.jsx @@ -0,0 +1,26 @@ +function ExperienceCard({ + period, + title, + skills, + responsibilities, +}) { + return ( + <> +
+ {period} +

{title}

+

+ Skills: {skills.join(", ")} +

+ +
+ + ); +} +export default ExperienceCard; diff --git a/src/components/Experience/ExperienceCard.module.css b/src/components/Experience/ExperienceCard.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/certificates/Certificates.jsx b/src/components/certificates/Certificates.jsx index 64eec93..d755273 100644 --- a/src/components/certificates/Certificates.jsx +++ b/src/components/certificates/Certificates.jsx @@ -29,4 +29,4 @@ function Certificates() { ); } -export default Certificates; \ No newline at end of file +export default Certificates; diff --git a/src/components/projects/ProjectCard.jsx b/src/components/projects/ProjectCard.jsx index 6e8cfe8..378f401 100644 --- a/src/components/projects/ProjectCard.jsx +++ b/src/components/projects/ProjectCard.jsx @@ -1,4 +1,5 @@ import styles from "./ProjectCard.module.css"; +import Button from "../Button/Button"; function ProjectCard({ title, image, description }) { return ( @@ -14,6 +15,7 @@ function ProjectCard({ title, image, description }) {

{title}

{description}

+ ); diff --git a/src/components/projects/Projects.jsx b/src/components/projects/Projects.jsx index d1fc004..a42df46 100644 --- a/src/components/projects/Projects.jsx +++ b/src/components/projects/Projects.jsx @@ -1,32 +1,49 @@ import ProjectCard from "./ProjectCard"; +import irrigation from "../../assets/images/irrigation.jpg"; +import wheelchair from "../../assets/images/wheelchair.jpg"; +import blog from "../../assets/images/blog.jpg"; +import travel from "../../assets/images/trevallo.png"; function Projects() { + const projectData = [ + { + title: "Smart Irrigation System", + image: irrigation, + description: "Developed a smart irrigation system integrating IoT & ML.", + }, + { + title: "Wheelchair Tracker", + image: wheelchair, + description: "Created a wheelchair tracking system using GPS and IoT.", + }, + { + title: "Personal Blog", + image: blog, + description: "Developed a personal blog using React and Node.js.", + }, + { + title: "Travel Booking App", + image: travel, + description: "Built a travel booking application with user authentication.", + }, + ]; + return (

Projects

+
- - - - + {projectData.map((project, index) => ( + + ))}
); } + export default Projects; From f4eb1145bb3910979e3b4f68cc239731e2d5c528 Mon Sep 17 00:00:00 2001 From: "[vinald]" Date: Tue, 2 Sep 2025 19:31:59 +0300 Subject: [PATCH 2/3] react project structure --- .vscode/settings.json | 22 +- package-lock.json | 8 +- package.json | 2 +- {src => public}/assets/images/1.jpg | Bin .../images/ProjectManagementCertificate.png | Bin .../assets/images/UIPECertificate.png | Bin {src => public}/assets/images/addi.jpg | Bin {src => public}/assets/images/blog.jpg | Bin {src => public}/assets/images/bruno.jpg | Bin {src => public}/assets/images/circuit.png | Bin {src => public}/assets/images/daphine.jpg | Bin {src => public}/assets/images/dash_board.png | Bin {src => public}/assets/images/hisham.png | Bin {src => public}/assets/images/hw.jpg | Bin {src => public}/assets/images/irrigation.jpg | Bin {src => public}/assets/images/irrigation2.jpg | Bin {src => public}/assets/images/ivan.jpg | Bin {src => public}/assets/images/kakeeto.jpg | Bin {src => public}/assets/images/layout.jpg | Bin {src => public}/assets/images/lender.png | Bin {src => public}/assets/images/method.png | Bin {src => public}/assets/images/models.png | Bin .../assets/images/netlabsugCertificate.png | Bin {src => public}/assets/images/nickson.jpg | Bin {src => public}/assets/images/patricia.jpg | Bin {src => public}/assets/images/profile.jpg | Bin .../assets/images/profile_new_1.jpg | Bin .../assets/images/realtime_data.png | Bin {src => public}/assets/images/trevallo.png | Bin {src => public}/assets/images/viola.jpg | Bin {src => public}/assets/images/wheelchair.jpg | Bin .../assets/okiror_samuel_vinald.pdf | Bin {src => public/assets}/styles.css | 0 index.html => public/index.html | 0 src/App.jsx | 34 +- src/assets/React-TODO-APP-main/.gitignore | 24 - src/assets/React-TODO-APP-main/README.md | 2 - .../React-TODO-APP-main/eslint.config.js | 33 - src/assets/React-TODO-APP-main/index.html | 21 - .../React-TODO-APP-main/package-lock.json | 2585 ----------------- src/assets/React-TODO-APP-main/package.json | 27 - .../React-TODO-APP-main/public/vite.svg | 1 - src/assets/React-TODO-APP-main/src/App.jsx | 42 - .../React-TODO-APP-main/src/assets/react.svg | 1 - .../src/components/Header.jsx | 19 - .../src/components/Tabs.jsx | 34 - .../src/components/TodoCard.jsx | 21 - .../src/components/TodoInput.jsx | 27 - .../src/components/TodoList.jsx | 23 - src/assets/React-TODO-APP-main/src/fanta.css | 674 ----- src/assets/React-TODO-APP-main/src/index.css | 153 - src/assets/React-TODO-APP-main/src/main.jsx | 11 - src/assets/React-TODO-APP-main/vite.config.js | 7 - src/components/{ => Contact}/Contact.jsx | 0 src/components/Contact/ContactCards.jsx | 73 + src/components/Education/Education.jsx | 55 +- src/components/Education/EducationCard.jsx | 11 + src/components/Experience/Experience.jsx | 114 +- src/components/Experience/ExperienceCard.jsx | 45 +- src/components/Footer.jsx | 19 +- src/components/Header.jsx | 0 src/components/Hero.jsx | 70 +- src/components/Navbar.jsx | 108 +- src/components/Project/ProjectCard.jsx | 28 + src/components/Project/Projects.jsx | 48 + src/components/Skills.jsx | 248 +- .../certificates/CertificateCard.jsx | 34 +- src/components/certificates/Certificates.jsx | 81 +- src/components/projects/ProjectCard.jsx | 23 - .../projects/ProjectCard.module.css | 0 src/components/projects/Projects.jsx | 49 - 71 files changed, 734 insertions(+), 4043 deletions(-) rename {src => public}/assets/images/1.jpg (100%) rename {src => public}/assets/images/ProjectManagementCertificate.png (100%) rename {src => public}/assets/images/UIPECertificate.png (100%) rename {src => public}/assets/images/addi.jpg (100%) rename {src => public}/assets/images/blog.jpg (100%) rename {src => public}/assets/images/bruno.jpg (100%) rename {src => public}/assets/images/circuit.png (100%) rename {src => public}/assets/images/daphine.jpg (100%) rename {src => public}/assets/images/dash_board.png (100%) rename {src => public}/assets/images/hisham.png (100%) rename {src => public}/assets/images/hw.jpg (100%) rename {src => public}/assets/images/irrigation.jpg (100%) rename {src => public}/assets/images/irrigation2.jpg (100%) rename {src => public}/assets/images/ivan.jpg (100%) rename {src => public}/assets/images/kakeeto.jpg (100%) rename {src => public}/assets/images/layout.jpg (100%) rename {src => public}/assets/images/lender.png (100%) rename {src => public}/assets/images/method.png (100%) rename {src => public}/assets/images/models.png (100%) rename {src => public}/assets/images/netlabsugCertificate.png (100%) rename {src => public}/assets/images/nickson.jpg (100%) rename {src => public}/assets/images/patricia.jpg (100%) rename {src => public}/assets/images/profile.jpg (100%) rename {src => public}/assets/images/profile_new_1.jpg (100%) rename {src => public}/assets/images/realtime_data.png (100%) rename {src => public}/assets/images/trevallo.png (100%) rename {src => public}/assets/images/viola.jpg (100%) rename {src => public}/assets/images/wheelchair.jpg (100%) rename src/assets/resume.pdf => public/assets/okiror_samuel_vinald.pdf (100%) rename {src => public/assets}/styles.css (100%) rename index.html => public/index.html (100%) delete mode 100644 src/assets/React-TODO-APP-main/.gitignore delete mode 100644 src/assets/React-TODO-APP-main/README.md delete mode 100644 src/assets/React-TODO-APP-main/eslint.config.js delete mode 100644 src/assets/React-TODO-APP-main/index.html delete mode 100644 src/assets/React-TODO-APP-main/package-lock.json delete mode 100644 src/assets/React-TODO-APP-main/package.json delete mode 100644 src/assets/React-TODO-APP-main/public/vite.svg delete mode 100644 src/assets/React-TODO-APP-main/src/App.jsx delete mode 100644 src/assets/React-TODO-APP-main/src/assets/react.svg delete mode 100644 src/assets/React-TODO-APP-main/src/components/Header.jsx delete mode 100644 src/assets/React-TODO-APP-main/src/components/Tabs.jsx delete mode 100644 src/assets/React-TODO-APP-main/src/components/TodoCard.jsx delete mode 100644 src/assets/React-TODO-APP-main/src/components/TodoInput.jsx delete mode 100644 src/assets/React-TODO-APP-main/src/components/TodoList.jsx delete mode 100644 src/assets/React-TODO-APP-main/src/fanta.css delete mode 100644 src/assets/React-TODO-APP-main/src/index.css delete mode 100644 src/assets/React-TODO-APP-main/src/main.jsx delete mode 100644 src/assets/React-TODO-APP-main/vite.config.js rename src/components/{ => Contact}/Contact.jsx (100%) create mode 100644 src/components/Contact/ContactCards.jsx delete mode 100644 src/components/Header.jsx create mode 100644 src/components/Project/ProjectCard.jsx create mode 100644 src/components/Project/Projects.jsx delete mode 100644 src/components/projects/ProjectCard.jsx delete mode 100644 src/components/projects/ProjectCard.module.css delete mode 100644 src/components/projects/Projects.jsx diff --git a/.vscode/settings.json b/.vscode/settings.json index a90daae..4a8e118 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,23 @@ { - "liveServer.settings.port": 5501 + "liveServer.settings.port": 5501, + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#65c89b", + "activityBar.background": "#65c89b", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#945bc4", + "activityBarBadge.foreground": "#e7e7e7", + "commandCenter.border": "#15202b99", + "sash.hoverBorder": "#65c89b", + "statusBar.background": "#42b883", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#359268", + "statusBarItem.remoteBackground": "#42b883", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#42b883", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#42b88399", + "titleBar.inactiveForeground": "#15202b99" + }, + "peacock.color": "#42b883" } diff --git a/package-lock.json b/package-lock.json index b4c0b65..7109f33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "my-portfolio", "version": "0.0.0", "dependencies": { - "bootstrap": "^5.3.7", + "bootstrap": "^5.3.8", "react": "^19.1.1", "react-dom": "^19.1.1" }, @@ -1546,9 +1546,9 @@ "license": "MIT" }, "node_modules/bootstrap": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.7.tgz", - "integrity": "sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", "funding": [ { "type": "github", diff --git a/package.json b/package.json index 017fc79..06ab6ba 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "deploy": "gh-pages -d dist" }, "dependencies": { - "bootstrap": "^5.3.7", + "bootstrap": "^5.3.8", "react": "^19.1.1", "react-dom": "^19.1.1" }, diff --git a/src/assets/images/1.jpg b/public/assets/images/1.jpg similarity index 100% rename from src/assets/images/1.jpg rename to public/assets/images/1.jpg diff --git a/src/assets/images/ProjectManagementCertificate.png b/public/assets/images/ProjectManagementCertificate.png similarity index 100% rename from src/assets/images/ProjectManagementCertificate.png rename to public/assets/images/ProjectManagementCertificate.png diff --git a/src/assets/images/UIPECertificate.png b/public/assets/images/UIPECertificate.png similarity index 100% rename from src/assets/images/UIPECertificate.png rename to public/assets/images/UIPECertificate.png diff --git a/src/assets/images/addi.jpg b/public/assets/images/addi.jpg similarity index 100% rename from src/assets/images/addi.jpg rename to public/assets/images/addi.jpg diff --git a/src/assets/images/blog.jpg b/public/assets/images/blog.jpg similarity index 100% rename from src/assets/images/blog.jpg rename to public/assets/images/blog.jpg diff --git a/src/assets/images/bruno.jpg b/public/assets/images/bruno.jpg similarity index 100% rename from src/assets/images/bruno.jpg rename to public/assets/images/bruno.jpg diff --git a/src/assets/images/circuit.png b/public/assets/images/circuit.png similarity index 100% rename from src/assets/images/circuit.png rename to public/assets/images/circuit.png diff --git a/src/assets/images/daphine.jpg b/public/assets/images/daphine.jpg similarity index 100% rename from src/assets/images/daphine.jpg rename to public/assets/images/daphine.jpg diff --git a/src/assets/images/dash_board.png b/public/assets/images/dash_board.png similarity index 100% rename from src/assets/images/dash_board.png rename to public/assets/images/dash_board.png diff --git a/src/assets/images/hisham.png b/public/assets/images/hisham.png similarity index 100% rename from src/assets/images/hisham.png rename to public/assets/images/hisham.png diff --git a/src/assets/images/hw.jpg b/public/assets/images/hw.jpg similarity index 100% rename from src/assets/images/hw.jpg rename to public/assets/images/hw.jpg diff --git a/src/assets/images/irrigation.jpg b/public/assets/images/irrigation.jpg similarity index 100% rename from src/assets/images/irrigation.jpg rename to public/assets/images/irrigation.jpg diff --git a/src/assets/images/irrigation2.jpg b/public/assets/images/irrigation2.jpg similarity index 100% rename from src/assets/images/irrigation2.jpg rename to public/assets/images/irrigation2.jpg diff --git a/src/assets/images/ivan.jpg b/public/assets/images/ivan.jpg similarity index 100% rename from src/assets/images/ivan.jpg rename to public/assets/images/ivan.jpg diff --git a/src/assets/images/kakeeto.jpg b/public/assets/images/kakeeto.jpg similarity index 100% rename from src/assets/images/kakeeto.jpg rename to public/assets/images/kakeeto.jpg diff --git a/src/assets/images/layout.jpg b/public/assets/images/layout.jpg similarity index 100% rename from src/assets/images/layout.jpg rename to public/assets/images/layout.jpg diff --git a/src/assets/images/lender.png b/public/assets/images/lender.png similarity index 100% rename from src/assets/images/lender.png rename to public/assets/images/lender.png diff --git a/src/assets/images/method.png b/public/assets/images/method.png similarity index 100% rename from src/assets/images/method.png rename to public/assets/images/method.png diff --git a/src/assets/images/models.png b/public/assets/images/models.png similarity index 100% rename from src/assets/images/models.png rename to public/assets/images/models.png diff --git a/src/assets/images/netlabsugCertificate.png b/public/assets/images/netlabsugCertificate.png similarity index 100% rename from src/assets/images/netlabsugCertificate.png rename to public/assets/images/netlabsugCertificate.png diff --git a/src/assets/images/nickson.jpg b/public/assets/images/nickson.jpg similarity index 100% rename from src/assets/images/nickson.jpg rename to public/assets/images/nickson.jpg diff --git a/src/assets/images/patricia.jpg b/public/assets/images/patricia.jpg similarity index 100% rename from src/assets/images/patricia.jpg rename to public/assets/images/patricia.jpg diff --git a/src/assets/images/profile.jpg b/public/assets/images/profile.jpg similarity index 100% rename from src/assets/images/profile.jpg rename to public/assets/images/profile.jpg diff --git a/src/assets/images/profile_new_1.jpg b/public/assets/images/profile_new_1.jpg similarity index 100% rename from src/assets/images/profile_new_1.jpg rename to public/assets/images/profile_new_1.jpg diff --git a/src/assets/images/realtime_data.png b/public/assets/images/realtime_data.png similarity index 100% rename from src/assets/images/realtime_data.png rename to public/assets/images/realtime_data.png diff --git a/src/assets/images/trevallo.png b/public/assets/images/trevallo.png similarity index 100% rename from src/assets/images/trevallo.png rename to public/assets/images/trevallo.png diff --git a/src/assets/images/viola.jpg b/public/assets/images/viola.jpg similarity index 100% rename from src/assets/images/viola.jpg rename to public/assets/images/viola.jpg diff --git a/src/assets/images/wheelchair.jpg b/public/assets/images/wheelchair.jpg similarity index 100% rename from src/assets/images/wheelchair.jpg rename to public/assets/images/wheelchair.jpg diff --git a/src/assets/resume.pdf b/public/assets/okiror_samuel_vinald.pdf similarity index 100% rename from src/assets/resume.pdf rename to public/assets/okiror_samuel_vinald.pdf diff --git a/src/styles.css b/public/assets/styles.css similarity index 100% rename from src/styles.css rename to public/assets/styles.css diff --git a/index.html b/public/index.html similarity index 100% rename from index.html rename to public/index.html diff --git a/src/App.jsx b/src/App.jsx index b9c25d6..b92005c 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,26 +1,30 @@ +import React from "react"; import Navbar from "./components/Navbar"; -import Hero from "./components/Hero"; -import Experience from "./components/Experience/Experience.jsx"; -import Education from "./components/Education/Education.jsx"; +import Intro from "./components/Hero"; +import ContactCards from "./components/Contact/ContactCards"; +import Experience from "./components/Experience/Experience"; +import Education from "./components/Education/Education"; import Skills from "./components/Skills"; -import Projects from "./components/projects/Projects.jsx"; -import Certificates from "./components/certificates/Certificates.jsx"; -import Contact from "./components/Contact"; +import Projects from "./components/Project/Projects"; +import Certificates from "./components/certificates/Certificates"; import Footer from "./components/Footer"; function App() { return ( - <> +
- - - - - - - +
+ + + + + + + +
- +
); } + export default App; diff --git a/src/assets/React-TODO-APP-main/.gitignore b/src/assets/React-TODO-APP-main/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/src/assets/React-TODO-APP-main/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/src/assets/React-TODO-APP-main/README.md b/src/assets/React-TODO-APP-main/README.md deleted file mode 100644 index 6bdeb35..0000000 --- a/src/assets/React-TODO-APP-main/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# todo-app -React.JS Todo App with FantaCSS & LocalStorage diff --git a/src/assets/React-TODO-APP-main/eslint.config.js b/src/assets/React-TODO-APP-main/eslint.config.js deleted file mode 100644 index ec2b712..0000000 --- a/src/assets/React-TODO-APP-main/eslint.config.js +++ /dev/null @@ -1,33 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' - -export default [ - { ignores: ['dist'] }, - { - files: ['**/*.{js,jsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { jsx: true }, - sourceType: 'module', - }, - }, - plugins: { - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...js.configs.recommended.rules, - ...reactHooks.configs.recommended.rules, - 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -] diff --git a/src/assets/React-TODO-APP-main/index.html b/src/assets/React-TODO-APP-main/index.html deleted file mode 100644 index 724aec9..0000000 --- a/src/assets/React-TODO-APP-main/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - Vinald Todo App - - - - -
- - - diff --git a/src/assets/React-TODO-APP-main/package-lock.json b/src/assets/React-TODO-APP-main/package-lock.json deleted file mode 100644 index 2e7948d..0000000 --- a/src/assets/React-TODO-APP-main/package-lock.json +++ /dev/null @@ -1,2585 +0,0 @@ -{ - "name": "todo-app", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "todo-app", - "version": "0.0.0", - "dependencies": { - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@eslint/js": "^9.22.0", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@vitejs/plugin-react": "^4.3.4", - "eslint": "^9.22.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.19", - "globals": "^16.0.0", - "vite": "^6.3.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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==", - "dev": true, - "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/compat-data": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.1.tgz", - "integrity": "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", - "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helpers": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz", - "integrity": "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "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==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", - "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", - "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz", - "integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.27.1" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.1.tgz", - "integrity": "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", - "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", - "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", - "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", - "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", - "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", - "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", - "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", - "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", - "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", - "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", - "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", - "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", - "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", - "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", - "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", - "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", - "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", - "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", - "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", - "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", - "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", - "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", - "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", - "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", - "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "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.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", - "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.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", - "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/eslintrc/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/@eslint/js": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", - "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "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.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", - "dev": true, - "dependencies": { - "@eslint/core": "^0.13.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "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.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", - "dev": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz", - "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz", - "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz", - "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz", - "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz", - "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz", - "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz", - "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz", - "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz", - "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz", - "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz", - "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz", - "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz", - "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz", - "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz", - "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz", - "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz", - "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz", - "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz", - "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz", - "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "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/react": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", - "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", - "dev": true, - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.1.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.3.tgz", - "integrity": "sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==", - "dev": true, - "peerDependencies": { - "@types/react": "^19.0.0" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", - "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", - "dev": true, - "dependencies": { - "@babel/core": "^7.26.10", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "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-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/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.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/browserslist": { - "version": "4.24.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001716", - "electron-to-chromium": "^1.5.149", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001716", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001716.tgz", - "integrity": "sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==", - "dev": true, - "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/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/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/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "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/electron-to-chromium": { - "version": "1.5.149", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.149.tgz", - "integrity": "sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", - "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.3", - "@esbuild/android-arm": "0.25.3", - "@esbuild/android-arm64": "0.25.3", - "@esbuild/android-x64": "0.25.3", - "@esbuild/darwin-arm64": "0.25.3", - "@esbuild/darwin-x64": "0.25.3", - "@esbuild/freebsd-arm64": "0.25.3", - "@esbuild/freebsd-x64": "0.25.3", - "@esbuild/linux-arm": "0.25.3", - "@esbuild/linux-arm64": "0.25.3", - "@esbuild/linux-ia32": "0.25.3", - "@esbuild/linux-loong64": "0.25.3", - "@esbuild/linux-mips64el": "0.25.3", - "@esbuild/linux-ppc64": "0.25.3", - "@esbuild/linux-riscv64": "0.25.3", - "@esbuild/linux-s390x": "0.25.3", - "@esbuild/linux-x64": "0.25.3", - "@esbuild/netbsd-arm64": "0.25.3", - "@esbuild/netbsd-x64": "0.25.3", - "@esbuild/openbsd-arm64": "0.25.3", - "@esbuild/openbsd-x64": "0.25.3", - "@esbuild/sunos-x64": "0.25.3", - "@esbuild/win32-arm64": "0.25.3", - "@esbuild/win32-ia32": "0.25.3", - "@esbuild/win32-x64": "0.25.3" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", - "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.25.1", - "@eslint/plugin-kit": "^0.2.8", - "@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.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.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-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-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", - "dev": true, - "peerDependencies": { - "eslint": ">=8.40" - } - }, - "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", - "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.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "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/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-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/fdir": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", - "dev": true, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "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/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/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "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": "16.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", - "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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==", - "dev": true, - "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/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-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/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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-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-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": "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/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/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/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/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "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/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "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/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/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true - }, - "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/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==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "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.8", - "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/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/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-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz", - "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.7" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.1", - "@rollup/rollup-android-arm64": "4.40.1", - "@rollup/rollup-darwin-arm64": "4.40.1", - "@rollup/rollup-darwin-x64": "4.40.1", - "@rollup/rollup-freebsd-arm64": "4.40.1", - "@rollup/rollup-freebsd-x64": "4.40.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", - "@rollup/rollup-linux-arm-musleabihf": "4.40.1", - "@rollup/rollup-linux-arm64-gnu": "4.40.1", - "@rollup/rollup-linux-arm64-musl": "4.40.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", - "@rollup/rollup-linux-riscv64-gnu": "4.40.1", - "@rollup/rollup-linux-riscv64-musl": "4.40.1", - "@rollup/rollup-linux-s390x-gnu": "4.40.1", - "@rollup/rollup-linux-x64-gnu": "4.40.1", - "@rollup/rollup-linux-x64-musl": "4.40.1", - "@rollup/rollup-win32-arm64-msvc": "4.40.1", - "@rollup/rollup-win32-ia32-msvc": "4.40.1", - "@rollup/rollup-win32-x64-msvc": "4.40.1", - "fsevents": "~2.3.2" - } - }, - "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": "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/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/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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", - "dev": true, - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "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/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "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/vite": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz", - "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==", - "dev": true, - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "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/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/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "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/src/assets/React-TODO-APP-main/package.json b/src/assets/React-TODO-APP-main/package.json deleted file mode 100644 index 02b4e0b..0000000 --- a/src/assets/React-TODO-APP-main/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "todo-app", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@eslint/js": "^9.22.0", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@vitejs/plugin-react": "^4.3.4", - "eslint": "^9.22.0", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-refresh": "^0.4.19", - "globals": "^16.0.0", - "vite": "^6.3.1" - } -} diff --git a/src/assets/React-TODO-APP-main/public/vite.svg b/src/assets/React-TODO-APP-main/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/src/assets/React-TODO-APP-main/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/React-TODO-APP-main/src/App.jsx b/src/assets/React-TODO-APP-main/src/App.jsx deleted file mode 100644 index 33b5c2e..0000000 --- a/src/assets/React-TODO-APP-main/src/App.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import Header from "./components/Header"; -import TodoList from "./components/TodoList"; -import Tabs from "./components/Tabs"; -import TodoInput from "./components/TodoInput"; -import { useState } from "react"; - -function App() { - const [todos, setTodos] = useState([{ input: "Hello! Add your first todo!", complete: true }]); - const [selectedTab, setSelectedTab] = useState("Open"); - - const handleAddTodo = (input) => { - const newTodo = { input, complete: false }; - setTodos([...todos, newTodo]); - }; - - const handleCompleteTodo = (index) => { - const updatedTodos = todos.map((todo, i) => - i === index ? { ...todo, complete: !todo.complete } : todo - ); - setTodos(updatedTodos); - }; - - const handleDeleteTodo = (index) => { - const newTodoList = todos.filter((_, i) => i !== index); - setTodos(newTodoList); - }; - return ( - <> -
- - - - - ); -} - -export default App; diff --git a/src/assets/React-TODO-APP-main/src/assets/react.svg b/src/assets/React-TODO-APP-main/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/src/assets/React-TODO-APP-main/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/React-TODO-APP-main/src/components/Header.jsx b/src/assets/React-TODO-APP-main/src/components/Header.jsx deleted file mode 100644 index 015f321..0000000 --- a/src/assets/React-TODO-APP-main/src/components/Header.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from "react"; - -function Header(props) { - const { todos } = props; - const todoLength = todos.length; - - const isTaskPlural = todoLength !== 1; - const taskOrTasks = isTaskPlural ? "tasks" : "task"; - - return ( -
-

- You have {todoLength} open {taskOrTasks} -

-
- ); -} - -export default Header; diff --git a/src/assets/React-TODO-APP-main/src/components/Tabs.jsx b/src/assets/React-TODO-APP-main/src/components/Tabs.jsx deleted file mode 100644 index 23b6440..0000000 --- a/src/assets/React-TODO-APP-main/src/components/Tabs.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from "react"; - -function Tabs(props) { - const { todos, selectedTab, setSelectedTab } = props; - const tabs = ["All", "Open", "Complete"]; - - return ( - - ); -} - -export default Tabs; diff --git a/src/assets/React-TODO-APP-main/src/components/TodoCard.jsx b/src/assets/React-TODO-APP-main/src/components/TodoCard.jsx deleted file mode 100644 index 15395d7..0000000 --- a/src/assets/React-TODO-APP-main/src/components/TodoCard.jsx +++ /dev/null @@ -1,21 +0,0 @@ -function TodoCard(props) { - const { todo, handleCompleteTodo, handleDeleteTodo, todoIndex } = props; - - return ( - <> -
-

{todo.input}

-
- - -
-
- - ); -} - -export default TodoCard; diff --git a/src/assets/React-TODO-APP-main/src/components/TodoInput.jsx b/src/assets/React-TODO-APP-main/src/components/TodoInput.jsx deleted file mode 100644 index 007709d..0000000 --- a/src/assets/React-TODO-APP-main/src/components/TodoInput.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useState } from "react"; - -function TodoInput(props) { - const { handleAddTodo } = props; - const [inputValue, setInputValue] = useState(""); - - return ( -
- setInputValue(e.target.value)} - placeholder={"Add Task"} - /> - -
- ); -} - -export default TodoInput; diff --git a/src/assets/React-TODO-APP-main/src/components/TodoList.jsx b/src/assets/React-TODO-APP-main/src/components/TodoList.jsx deleted file mode 100644 index 1f6b5b1..0000000 --- a/src/assets/React-TODO-APP-main/src/components/TodoList.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from "react"; -import TodoCard from "./TodoCard"; - -function TodoList(props) { - const { todos, selectedTab } = props; - - const filteredTodosList = - selectedTab === "All" - ? todos - : selectedTab === "Open" - ? todos.filter((val) => !val.complete) - : todos.filter((val) => val.complete); - - return ( - <> - {filteredTodosList.map((todo, todoIndex) => { - return ; - })} - - ); -} - -export default TodoList; diff --git a/src/assets/React-TODO-APP-main/src/fanta.css b/src/assets/React-TODO-APP-main/src/fanta.css deleted file mode 100644 index 00239e2..0000000 --- a/src/assets/React-TODO-APP-main/src/fanta.css +++ /dev/null @@ -1,674 +0,0 @@ -/** -* Fanta.css (Fantasy + CSS) -* Version 0.1.0 -* https://github.com/jamezmca/fantacss -* -* Sections -* 1. Content sectioning -* 2. Text content -* 3. Inline text semantics -* 4. Image and multimedia -* 5. Tables -* 6. Forms -* 7. Interactive elements -* -*/ - -@import url('https://fonts.googleapis.com/css2?family=Eczar:wght@400..800&family=Grenze:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); - -:root { - --background-primary: white; - --background-secondary: ''; - --background-tertiary: #dbeafe; - --background-accent: ''; - --background-compliment: ''; - --background-gradient: ''; - --background-muted: #f8fafc; - - --color-primary: #030615; - --color-secondary: ''; - --color-tertiary: ''; - --color-accent: ''; - --color-compliment: ''; - --color-gradient: ''; - --color-muted: ; - --color-link: #2563eb; - --color-link-transparent: rgba(37, 99, 235, 0.1); - - --color-success: ''; - --color-warning: ''; - --color-error: ''; - --color-info: ''; - --color-highlight: #fef9c3; - - --gradient-start: #9580ff; - --gradient-end: #80ffea; - - --border-primary: #f1f5f9; - --border-secondary: #bed1e7; - --border-highlight: #64748b; - --border-tertiary: ''; - - --shadow-dark: ''; - --shadow-light: ''; - --shadow-text: ''; - - --padding-small: 1rem; - --padding-large: 2rem; - - --border-radius-small: 0.5rem; - --border-radius-large: 0.75rem; - --highlight-border-radius: 0.5rem; - - --text-selection: ''; -} - -@media (prefers-color-scheme: dark) { - :root { - --background-primary: #05070f; - --background-secondary: #0e101e; - --background-tertiary: #121424; - --background-accent: ''; - --background-compliment: ''; - --background-gradient: ''; - --background-muted: #1a1e32; - - --color-primary: white; - --color-secondary: ''; - --color-tertiary: ''; - --color-accent: ''; - --color-compliment: ''; - --color-gradient: ''; - --color-muted: ; - --color-link: #60a5fa; - --color-link-transparent: rgba(37, 99, 235, 0.1); - - --color-success: ''; - --color-warning: ''; - --color-error: ''; - --color-info: ''; - --color-highlight: #fef9c3; - - --gradient-start: #9580ff; - --gradient-end: #80ffea; - - --border-primary: #29325b; - --border-secondary: #323c71; - --border-highlight: #4649af; - --border-tertiary: ''; - - --shadow-dark: ''; - --shadow-light: ''; - --shadow-text: ''; - - --padding-small: 1rem; - --padding-large: 2rem; - - --border-radius-small: 0.5rem; - --border-radius-large: 0.75rem; - --highlight-border-radius: 0.5rem; - - --text-selection: ''; - } -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; - font-family: "Eczar", serif; -} - -body { - background: var(--background-primary); - color: var(--color-primary); - font-size: 0.875rem; - line-height: 1.6rem; -} - -/* Special */ -.text-gradient { - -webkit-text-fill-color: transparent; - -webkit-background-clip: text; - background-image: linear-gradient(135deg, var(--gradient-start) 0, var(--gradient-end) 100%); - background-size: 100%; - -webkit-box-decoration-break: clone; -} - - -/* Typography */ -h1, -h2, -h3, -h4, -h5, -h6, -button { - font-family: "Arial", serif; - width: fit-content; -} - -h1 { - font-size: 1.875rem; - line-height: 2.25rem; -} - -h2 { - font-size: 1.5rem; - line-height: 2rem; -} - -h3 { - font-size: 1.25rem; - line-height: 1.75rem; -} - -h4 { - font-size: 1.125rem; - line-height: 1.75rem; -} - -h5 { - font-size: 1rem; - line-height: 1.5rem; -} - -h6 { - font-size: 0.875rem; - line-height: 1.25rem; -} - -p { - display: block; - width: fit-content; -} - -/* Content Sectioning */ - -main {} - -header {} - -footer {} - -nav {} - -section {} - -address { - font-style: normal; -} - -aside { - float: right; - width: 40%; - padding: 0.75rem; - margin: 0.5rem; - font-style: italic; - color: var(--color-primary); - background-color: var(--background-muted); - border-radius: var(--border-radius-large); -} - - -/* Text Content */ -blockquote { - position: relative; - padding-left: 1.5rem; - margin: 0; -} - -blockquote::after { - content: ""; - display: block; - position: absolute; - left: 0; - top: 0; - height: 100%; - border-left: 7px solid var(--border-primary); - border-radius: 6px; -} - -blockquote footer { - padding-top: 1rem; -} - -dd { - padding-bottom: 11px; -} - -dl {} - -dt { - font-weight: bold; -} - -figure {} - -figcaption { - padding-top: 10px; - font-size: 0.8rem; -} - -hr {} - - -ul, -ol { - list-style-position: inside; - padding-left: 1rem; -} - -li { - line-height: 1.6em; -} - -/* Inline Text Elements */ - -a { - color: var(--color-link); -} - -a:active, -a:focus, -a:hover { - text-decoration: none; -} - -mark, -samp, -kbd, -code, -time { - border-radius: var(--highlight-border-radius, 4px); - box-decoration-break: clone; - -webkit-box-decoration-break: clone; -} - -mark { - background-color: var(--color-highlight); - padding: 0 4px; -} - -samp { - font-weight: bold; - padding: 0.5rem 1rem; - background-color: var(--background-muted); - color: var(--color-primary); -} - -kbd, -time { - padding: 0rem 0.5rem; - background-color: var(--background-muted); - color: var(--color-primary); -} - -code, -pre { - font-size: 0.9em; - padding: 0.2rem 0.5rem; - background: var(--background-muted); - border: 1px solid var(--border-primary); - max-width: fit-content; - overflow-x: auto; -} - -pre>code { - padding: 10px; - border: 0; - display: block; - overflow-x: auto; -} - -pre { - border-radius: var(--border-radius-large); -} - -sup, -sub { - line-height: normal; -} - -/* Image and multimedia */ -audio { - width: 100%; -} - -audio, -img, -video { - border-radius: var(--border-radius-large); - max-width: 100%; -} - -img { - height: auto; -} - -/* Tables */ -table { - width: fit-content; - border: 1px solid var(--border-primary); - background: var(--background-muted); - border-radius: var(--border-radius-small); -} - -table tr:last-child td:first-child { - border-bottom-left-radius: 8px; -} - -table tr:last-child td:last-child { - border-bottom-right-radius: 8px; -} - -table tr:first-child th:first-child { - border-top-left-radius: 8px; -} - -table tr:first-child th:last-child { - border-top-right-radius: 8px; -} - -th { - background-color: var(--background-muted); -} - -td { - background: var(--background-primary); -} - -td, -th { - text-align: left; - padding: 8px; -} - -thead { - border-collapse: collapse; -} - -tfoot { - border-top: 1px solid black; -} - -table tr:hover td, -tbody tr:nth-child(even):hover td { - background-color: var(--background-muted); -} - -/* Form elements */ -input, -button, -select, -optgroup, -textarea { - /* margin: 0; */ -} - -button, -select, -input[type="submit"], -input[type="button"], -input[type="checkbox"], -input[type="range"], -input[type="radio"] { - cursor: pointer; -} - -button { - color: var(--color-primary); - background-color: var(--background-primary); - width: fit-content; - font-family: inherit; - font-size: inherit; - font-weight: 500; - padding: 0.25rem 1.25rem; - border: 1.5px solid var(--border-secondary); - border-radius: var(--border-radius-small); - box-shadow: 2px 2px 0 0 var(--border-secondary); - transition-duration: 200ms; -} - -button:hover { - box-shadow: 0 0 0 0 var(--border-secondary); - transform: translate(2px, 2px); -} - -button[disabled]:hover { - box-shadow: 2px 2px 0 0 var(--border-secondary); - transform: translate(0, 0); -} - -button:disabled, -button[disabled] { - border: 1.5px solid var(--border-secondary); - cursor: initial; - opacity: 0.55; -} - -label { - display: block; - max-width: fit-content; - font-weight: 500; -} - -input, -textarea, -select { - font-size: 1em; - background-color: var(--background-muted); - border: 1px solid var(--border-secondary); - color: var(--color-primary); - padding: 0.5rem 0.75rem; - border-radius: var(--border-radius-small); - width: 100%; - /* max-width: fit-content; */ - outline: none; - appearance: none; -} - -input:disabled { - cursor: not-allowed; - opacity: 0.6; -} - -input[type="checkbox"], -input[type="radio"] { - padding: 0.5rem; - width: fit-content; - vertical-align: middle; - position: relative; - margin: 0.5rem 0.25rem 0.5rem 0.5rem; - /* margin-right: 0.33em; - margin-top: 0.31em; */ -} - -input[type="checkbox"] { - border-radius: 7px; - margin-left: 0; -} - -input[type="radio"] { - border-radius: 100%; -} - -input[type="checkbox"]:checked, -input[type="radio"]:checked { - background: var(--border-secondary); -} - -input[type="range"] { - vertical-align: middle; - padding: 0; -} - -input[type="color"] { - appearance: none; - border: none; - outline-style: none; - padding: initial; - max-width: initial; - height: 2rem; - width: 3rem; -} - -select:is([multiple]) { - background: none; - height: fit-content; -} - -fieldset:focus-within, -input:focus-within, -textarea:focus-within, -select:focus-within { - border-color: var(--border-highlight); -} - -fieldset:hover, -input:hover, -textarea:hover, -select:hover { - border-color: var(--border-highlight); -} - -progress { - appearance: none; - height: 1rem; - margin: 0.75rem 0; -} - -progress::-webkit-progress-bar { - background: var(--background-main); - border: 1px solid var(--border-primary); - border-radius: var(--highlight-border-radius); -} - -progress::-webkit-progress-value { - background-color: var(--color-link); - border-radius: var(--border-radius-small); -} - -progress::-moz-progress-bar { - background-color: var(--color-link); - border-radius: var(--border-radius-small); -} - -fieldset { - border: 1px solid var(--border-primary); - border-radius: var(--border-radius-small); - margin: 0; - margin-bottom: 6px; - padding: 1rem; - max-width: fit-content; -} - -/* Interactive elements */ -details { - border: 1px solid var(--border-primary); - border-radius: var(--border-radius-small); - padding: 0.5rem 0.75rem; -} - -summary { - font-weight: bold; -} - -details[open] summary { - border-bottom: 1px solid var(--border-primary); - margin-bottom: 0.5rem; -} - -.card, -.button-card { - background-color: var(--background-muted); - color: var(--color-primary); - padding: 1rem; - border-radius: 0.5rem; -} - -.card { - border: 1px solid var(--color-link-transparent); -} - -.button-card { - border: 1px solid var(--border-secondary); -} - -.button-card { - box-shadow: none; -} - -.button-card:hover { - transform: translate(0); - box-shadow: none; - border-color: var(--border-highlight); -} - -.card-button-primary, -.card-button-secondary { - border: none !important; - box-shadow: none !important; -} - -.card-button-primary { - color: var(--background-primary); - background: var(--color-link); -} - -.card-button-secondary { - color: var(--color-link); - background: var(--color-link-transparent); -} - -.card-button-primary:hover, -.card-button-secondary:hover { - transform: none; - opacity: 0.6; -} - - -@media (min-width: 640px) { - body { - font-size: 1rem; - line-height: 1.5rem; - } - - h1 { - font-size: 2.25rem; - line-height: 2.5rem; - } - - h2 { - font-size: 1.875rem; - line-height: 2.25rem; - } - - h3 { - font-size: 1.5rem; - line-height: 2rem; - } - - h4 { - font-size: 1.25rem; - line-height: 1.75rem; - } - - h5 { - font-size: 1.125rem; - line-height: 1.75rem; - } - - h6 { - font-size: 1rem; - line-height: 1.5rem; - } - - button { - width: fit-content; - } - - input { - max-width: 600px; - } -} \ No newline at end of file diff --git a/src/assets/React-TODO-APP-main/src/index.css b/src/assets/React-TODO-APP-main/src/index.css deleted file mode 100644 index 71aa165..0000000 --- a/src/assets/React-TODO-APP-main/src/index.css +++ /dev/null @@ -1,153 +0,0 @@ -#root { - max-width: 800px; - width: 100%; - margin: 0 auto; - display: flex; - flex-direction: column; - gap: 1rem; - padding: 1rem; -} - -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -h1 { - width: fit-content; -} - -.tab-container { - overflow-x: auto; -} - -.tab-button { - border: none; - box-shadow: none; - padding: 0.5rem 1rem; - cursor: pointer; -} - -.tab-button span { - opacity: 0.4; - font-weight: 400; -} - -.tab-button:hover { - transform: translate(0); -} - -.tab-selected { - position: relative; -} - -.tab-selected::after { - content: ""; - position: absolute; - bottom: -2px; - left: 50%; - transform: translateX(-50%); - background: var(--color-link); - border-radius: 0.5px; - animation: widen 250ms ease-in-out forwards; -} - -hr { - opacity: 0.4; -} - -.todo-item { - display: flex; - flex-direction: column; - gap: 0.5rem; - border: none; -} - -.todo-complete { - position: relative; -} - -.todo-complete::after { - position: absolute; - content: ""; - z-index: 4; - inset: -1.5px; - border-radius: inherit; - background: var(--background-primary); - opacity: 0.6; -} - -.todo-buttons { - display: flex; - gap: 1rem; - position: relative; - z-index: 5; -} - -.todo-buttons button { - border: none !important; - box-shadow: none !important; -} - -.todo-buttons button:hover { - transform: none; - opacity: 0.6; -} - -.todo-buttons button:first-of-type { - /* color: #8aff80; - background: rgba(138, 255, 128, .1); */ - color: var(--background-primary); - background: var(--color-link); -} - -.todo-buttons button:last-of-type { - /* color: #9580ff; - background: rgba(149, 128, 255, .1); */ - color: var(--color-link); - background: var(--color-link-transparent); -} - -.todo-item p { - font-weight: 500; -} - -.input-container { - display: flex; - align-items: center; - gap: 1rem; -} - -.input-container input { - width: 100%; - flex: 1; - max-width: unset !important; -} - -@keyframes widen { - from { - width: 20%; - height: 1px; - opacity: 0.6; - } - - to { - width: 100%; - height: 2.5px; - opacity: 1; - } -} - -@media (min-width: 640px) { - .tab-button { - padding: 0.5rem 1.5rem; - } - - .todo-item { - flex-direction: row; - align-items: center; - justify-content: space-between; - gap: 1rem; - } -} diff --git a/src/assets/React-TODO-APP-main/src/main.jsx b/src/assets/React-TODO-APP-main/src/main.jsx deleted file mode 100644 index b1843e8..0000000 --- a/src/assets/React-TODO-APP-main/src/main.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import { StrictMode } from "react"; -import { createRoot } from "react-dom/client"; -import App from "./App.jsx"; -import "./index.css"; -import "./fanta.css"; - -createRoot(document.getElementById("root")).render( - - - -); diff --git a/src/assets/React-TODO-APP-main/vite.config.js b/src/assets/React-TODO-APP-main/vite.config.js deleted file mode 100644 index 8b0f57b..0000000 --- a/src/assets/React-TODO-APP-main/vite.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vite.dev/config/ -export default defineConfig({ - plugins: [react()], -}) diff --git a/src/components/Contact.jsx b/src/components/Contact/Contact.jsx similarity index 100% rename from src/components/Contact.jsx rename to src/components/Contact/Contact.jsx diff --git a/src/components/Contact/ContactCards.jsx b/src/components/Contact/ContactCards.jsx new file mode 100644 index 0000000..c7be1d6 --- /dev/null +++ b/src/components/Contact/ContactCards.jsx @@ -0,0 +1,73 @@ +import React from "react"; + +const ContactCards = () => ( + +); + +export default ContactCards; diff --git a/src/components/Education/Education.jsx b/src/components/Education/Education.jsx index 817be17..f6454a3 100644 --- a/src/components/Education/Education.jsx +++ b/src/components/Education/Education.jsx @@ -1,25 +1,32 @@ -function Education() { - return ( -
-

Education

-
-
- 2021 - 2025 -

Bachelor of Science in Computer Engineering

-

Makerere University, Kampala-Uganda

-
-
- 2018 - 2019 -

Uganda Advanced Certificate of Education

-

St. Peter's College, Tororo

-
-
- 2014 - 2017 -

Uganda Certificate of Education

-

St. Peter's College, Tororo

-
-
-
- ); -} +import EducationCard from "./EducationCard"; + +const educationList = [ + { + date: "2021 - 2025", + degree: "Bachelor of Science in Computer Engineering", + school: "Makerere University, Kampala-Uganda", + }, + { + date: "2018 - 2019", + degree: "Uganda Advanced Certificate of Education", + school: "St. Peter's College, Tororo", + }, + { + date: "2014 - 2017", + degree: "Uganda Certificate of Education", + school: "St. Peter's College, Tororo", + }, +]; + +const Education = () => ( +
+

Education

+
+ {educationList.map((edu, idx) => ( + + ))} +
+
+); + export default Education; diff --git a/src/components/Education/EducationCard.jsx b/src/components/Education/EducationCard.jsx index e69de29..adf93ed 100644 --- a/src/components/Education/EducationCard.jsx +++ b/src/components/Education/EducationCard.jsx @@ -0,0 +1,11 @@ +import React from "react"; + +const EducationCard = ({ education }) => ( +
+ {education.date} +

{education.degree}

+

{education.school}

+
+); + +export default EducationCard; diff --git a/src/components/Experience/Experience.jsx b/src/components/Experience/Experience.jsx index 6957248..d880fb0 100644 --- a/src/components/Experience/Experience.jsx +++ b/src/components/Experience/Experience.jsx @@ -1,33 +1,89 @@ import ExperienceCard from "./ExperienceCard"; -function Experience() { - const experiences = [ - { - period: "January 2025 - Present", - title: "Software Developer, Infectious Disease Institute", - skills: ["Agile", "Kotlin", "Docker", "OpenMRS"], - responsibilities: [ - "Collaborated with teams to develop and maintain mobile healthcare apps.", - "Participated in Agile processes (sprints, stand-ups).", - "Enhanced OpenMRS functionality.", - "Reviewed code and mentored peers.", - ], - }, - ]; - return ( -
-
-

Experience

-
- -
+const experiences = [ + { + date: "January 2025 - Present", + title: "Software Developer, Infectious Disease Institute", + skills: "Agile, Mobile App Development (Kotlin), Docker, OpenMRS, Team work, Documentation", + responsibilities: [ + "Collaborated with cross-functional teams to develop and maintain mobile applications for healthcare solutions.", + "Participated in Agile development processes, including sprint planning and daily stand-ups.", + "Developed and integrated features into the OpenMRS platform, enhancing its functionality and user experience.", + "Conducted code reviews and provided constructive feedback to team members.", + "Assisted in troubleshooting and debugging issues in existing applications.", + ], + }, + { + date: "August 2024 - October 2024", + title: "Data Science and Web Development Intern, Zidio Development", + skills: "Python, JavaScript, SQL, Excel, API Design, Data Analysis", + responsibilities: [ + "Analyzed project data and created summaries to support decision-making.", + "Cleaned and transformed data, ensuring high-quality datasets.", + "Used Excel functions to enhance performance monitoring and reporting accuracy.", + "Collaborated on data analysis tasks to identify trends and produce insights for business strategy.", + "Developed backend services with JavaScript, optimizing server performance and scalability.", + "Designed APIs and ensured secure integration of databases for improved functionality.", + ], + }, + { + date: "April 2024 - September 2024", + title: "Freelance Software Developer, Biremedia (Part-time)", + skills: "Django, REST APIs, Python programming, Django REST Framework, Back-End Web Development", + responsibilities: [ + "Designed and developed back-end services using Django and Django REST Framework, ensuring scalability and performance.", + "Built and integrated REST APIs for seamless data exchange between client and server.", + "Collaborated with front-end developers to deliver complete solutions for clients.", + "Managed multiple projects while adhering to deadlines and code quality standards.", + "Provided technical support and implemented client-driven enhancements.", + ], + }, + { + date: "June 2023 - September 2023", + title: "Software Intern, NetLabsUG", + skills: "Python, Networking, Machine Learning, Embedded Systems", + responsibilities: [ + "Learned foundational machine learning concepts, including data preprocessing, model selection, and evaluation.", + "Gained a solid understanding of supervised learning algorithms (Sklearn and Tensorflow algorithms)", + "Designed a smart irrigation management system using Python and TensorFlow that optimized irrigation patterns from real-time sensor data for better water efficiency and crop yield.", + "Integrated sensor data into an embedded system for real-time decision-making.", + "Acquired practical experience in embedded systems, networking, Python, and machine learning.", + ], + }, + { + date: "June 2022 - September 2022", + title: "Software Intern, EvoTech Solutions (Pivadel)", + skills: "HTML, CSS, JavaScript, React, SEO", + responsibilities: [ + "Developed user interface components for a school management system using React.", + "Implemented interactive features that enhanced the user experience and functionality of the system.", + "Generated content for the system, improving information accessibility for users.", + "Collaborated with the team to optimize code for better performance.", + ], + }, + { + date: "October 2021 - May 2023", + title: "Graphic Designer, BireMedia", + skills: "Illustrator, Photoshop, Color Theory", + responsibilities: [ + "Designed marketing materials, including brochures and banners, and social media graphics, ensuring brand consistency and visual appeal.", + "Collaborated with clients to deliver high-quality design solutions tailored to their needs.", + "Managed multiple design projects while meeting tight deadlines.", + ], + }, +]; + +const Experience = () => ( +
+
+

Experience

+
+ {experiences.map((exp, idx) => ( + + ))}
-
- ); -} +
+
+); + export default Experience; diff --git a/src/components/Experience/ExperienceCard.jsx b/src/components/Experience/ExperienceCard.jsx index fa99339..3a50211 100644 --- a/src/components/Experience/ExperienceCard.jsx +++ b/src/components/Experience/ExperienceCard.jsx @@ -1,26 +1,21 @@ -function ExperienceCard({ - period, - title, - skills, - responsibilities, -}) { - return ( - <> -
- {period} -

{title}

-

- Skills: {skills.join(", ")} -

-
    - {responsibilities.map((item, index) => ( -
  • - {item.description} -
  • - ))} -
-
- - ); -} +import React from "react"; + +const ExperienceCard = ({ experience }) => ( +
+ {experience.date} +

{experience.title}

+

+ Skills: {experience.skills} +

+

+ Responsibilities: +

+
    + {experience.responsibilities.map((item, idx) => ( +
  • {item}
  • + ))} +
+
+); + export default ExperienceCard; diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index b974dcb..ac51856 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,8 +1,11 @@ -function Footer() { - return ( -
-

© {new Date().getFullYear()} Okiror Samuel Vinald

-
- ); -} -export default Footer; \ No newline at end of file +import React from "react"; + +const Footer = () => ( +
+

+ © {new Date().getFullYear()} Okiror Samuel Vinald +

+
+); + +export default Footer; diff --git a/src/components/Header.jsx b/src/components/Header.jsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/Hero.jsx b/src/components/Hero.jsx index ffd7940..e6d7f55 100644 --- a/src/components/Hero.jsx +++ b/src/components/Hero.jsx @@ -1,20 +1,66 @@ -function Hero() { - return ( -
-
-

Hello, I'm

-

Okiror Samuel Vinald

-

+import React from "react"; + +const Intro = () => ( +
+
+

+ Hello, I'm +

+

+ Okiror Samuel Vinald +

+
+

Computer Engineer

+
+ -
- ); -} -export default Hero; +

+
+
+ Vinald +
+
+

+ I'm a Results-driven Software Developer with a Bachelor of + Science in Computer Engineering, specializing in full-stack web and mobile + development. With professional expertise in + JavaScript (React and React Native), + Python (Django), and Java, with hands-on + experience building scalable, user-centric applications. +

+

+ Since transitioning from academia to professional development, I've focused on + bridging the gap between theoretical knowledge and practical implementation. My + engineering background gives me a unique perspective on system design, while my + hands-on experience allows me to create efficient, scalable applications that + solve real business problems. +

+

+ What drives me is the opportunity to transform complex requirements into + intuitive digital experiences. Whether optimizing backend performance or + crafting pixel-perfect UIs, I approach each challenge with a problem-solving + mindset and commitment to clean, maintainable code. +

+
+ Software Development | Machine Learning & AI | Cyber Security Enthusiast | + Continuous Learner +
+
+
+
+); + +export default Intro; diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx index cd5ef00..0168133 100644 --- a/src/components/Navbar.jsx +++ b/src/components/Navbar.jsx @@ -1,54 +1,58 @@ -function Navbar() { - return ( - +); + export default Navbar; diff --git a/src/components/Project/ProjectCard.jsx b/src/components/Project/ProjectCard.jsx new file mode 100644 index 0000000..70c24e4 --- /dev/null +++ b/src/components/Project/ProjectCard.jsx @@ -0,0 +1,28 @@ +import React from "react"; + +const ProjectCard = ({ project }) => ( +
+
+ {project.title} +
+

{project.title}

+

{project.description}

+
+ +
+
+); + +export default ProjectCard; diff --git a/src/components/Project/Projects.jsx b/src/components/Project/Projects.jsx new file mode 100644 index 0000000..4d12a8e --- /dev/null +++ b/src/components/Project/Projects.jsx @@ -0,0 +1,48 @@ +import ProjectCard from "./ProjectCard"; + +const projects = [ + { + image: "assets/images/irrigation.jpg", + title: "Smart Irrigation System", + description: + "Developed a smart irrigation system integrating IoT and machine learning for real-time water management, cost reduction, and crop yield improvement. This innovative solution promotes sustainable farming practices.", + link: "projects/irrigation-project.html", + disabled: false, + }, + { + image: "assets/images/wheelchair.jpg", + title: "Voice-Controlled Wheelchair System", + description: + "Engineered a Luganda Voice-Controlled Wheelchair System to enhance mobility for Luganda-speaking individuals. The system integrates Luganda voice commands with speech intent recognition technology for wheelchair control.", + link: "projects/wheelchair-project.html", + disabled: false, + }, + { + image: "assets/images/blog.jpg", + title: "Blog Website", + description: + "Developed a blog platform with features for creating, editing, and deleting posts. The interface is responsive and user-friendly, utilizing Django, HTML, and Bootstrap for seamless user interaction.", + link: "projects/wheelchair-project.html", + disabled: true, + }, + { + image: "assets/images/trevallo.png", + title: "Travello Web Application", + description: "Coming soon...", + link: "projects/wheelchair-project.html", + disabled: true, + }, +]; + +const Projects = () => ( +
+

Projects

+
+ {projects.map((project, idx) => ( + + ))} +
+
+); + +export default Projects; diff --git a/src/components/Skills.jsx b/src/components/Skills.jsx index 9004886..933c39e 100644 --- a/src/components/Skills.jsx +++ b/src/components/Skills.jsx @@ -1,59 +1,199 @@ - function Skills() { - return ( +import React from "react"; - // Programming languages list - // const programmingLanguages = ["Python", "Java", "Kotlin", "JavaScript", "TypeScript", "PHP", "SQL", "HTML/CSS"]; - -
-
-

Skills

- - {/* Technical Skills */} -

Technical Skills

-
-
-
-
-
- Programming Languages -
-
- Python - Java - Kotlin - JavaScript - TypeScript - PHP - SQL - HTML/CSS -
-
+const Skills = () => ( +
+
+

Skills

+

Technical Skills

+
+ {/* Programming Languages */} +
+
+
+
+ Programming Languages +
+
+ Python + Java + Kotlin + JavaScript + TypeScript + PHP + SQL + HTML/CSS +
+
+
+
+ {/* Web Development */} +
+
+
+
+ Web Development +
+
+ React + Node.js + Express.js + Next.js + Laravel + Django + Spring Boot + Bootstrap + APIs + UI/UX + + Responsive Design + +
+
+
+
+ {/* Databases */} +
+
+
+
+ Databases +
+
+ MySQL + PostgreSQL + MongoDB +
+
+
+
+ {/* Mobile Development */} +
+
+
+
+ Mobile Development +
+
+ Kotlin + Java + React Native +
+
+
+
+ {/* Machine Learning & AI */} +
+
+
+
+ Machine Learning & AI +
+
+ TensorFlow + Scikit-learn + Data Analysis + Deep Learning + + Feature Engineering + + LLM + Generative AI +
+
+
+
+ {/* Embedded Systems */} +
+
+
+
+ Embedded Systems +
+
+ + Microcontroller programming + + C/C++ and Python + Arduino + Raspberry Pi + ESP32 + Sensors + Actuators +
+
+
+
+ {/* Tools & Others */} +
+
+
+
+ Tools & Others +
+
+ Git/GitHub + Linux + NPM + PIP + Figma + Docker + Trello + Jira + Illustrator + Photoshop + Networking +
+
+
+
+
+

Soft Skills

+
+ {/* Core Skills */} +
+
+
+
+ Core Skills +
+
+ Problem-Solving + Teamwork +
+
+
+
+ {/* Interpersonal Skills */} +
+
+
+
+ Interpersonal Skills +
+
+ Adaptability + Time Management
- - {/* Add more skill columns like in your HTML */}
+
+ {/* Others */} +
+
+
+
+ Others +
+
+ Communication + Quick Learner +
+
+
+
+
+
+
+); - {/* Soft Skills */} -

Soft Skills

-
-
-
-
-
Core Skills
-
- - Problem-Solving - - Teamwork -
-
-
-
- {/* Add remaining soft skill cards */} -
-
-
- ); - } - export default Skills; +export default Skills; diff --git a/src/components/certificates/CertificateCard.jsx b/src/components/certificates/CertificateCard.jsx index 633f839..8dbec22 100644 --- a/src/components/certificates/CertificateCard.jsx +++ b/src/components/certificates/CertificateCard.jsx @@ -1,16 +1,22 @@ -function CertificateCard({ title, issuer, date, link }) { - return ( -
-
-
-
{title}
-

Issued by {issuer} - {date}

- - View Certificate - -
+import React from "react"; + +const CertificateCard = ({ certificate }) => ( +
+
+
+
{certificate.title}
+

{certificate.issuer}

+ + View Certificate +
- ); -} -export default CertificateCard; \ No newline at end of file +
+); + +export default CertificateCard; diff --git a/src/components/certificates/Certificates.jsx b/src/components/certificates/Certificates.jsx index d755273..59b8c54 100644 --- a/src/components/certificates/Certificates.jsx +++ b/src/components/certificates/Certificates.jsx @@ -1,32 +1,59 @@ import CertificateCard from "./CertificateCard"; -function Certificates() { - const certificates = [ - { - title: "Python", - issuer: "CISCO", - date: "April 2025", - link: "https://www.credly.com/badges/2dc786ff-1ccc-4d14-9221-229d41cd66f4/public_url", - }, - ]; +const certificates = [ + { + title: "Python", + issuer: "Issued by CISCO - April 2025", + link: "https://www.credly.com/badges/2dc786ff-1ccc-4d14-9221-229d41cd66f4/public_url", + }, + { + title: "Python, AI, Robotics and Embedded Systems", + issuer: "Issued by netLabs!UG - August 2023", + link: "assets/images/netlabsugCertificate.png", + }, + { + title: "Project Management", + issuer: "Issued by Project Management Institute - April 2024", + link: "assets/images/ProjectManagementCertificate.png", + }, + { + title: "Social-Behavioral-Educational (SBE) Comprehensive", + issuer: "Issued by CITI - April 2025", + link: "https://www.citiprogram.org/verify/?w64eacb8b-d6bc-46fd-94d5-b1dea78e5b19-68870613", + }, + { + title: "Anti-Sexual Harassment", + issuer: "Issued by INFECTIOUS DISEASES INSTITUTE - Feb 2025", + link: "https://elearning.idi.co.ug/courses/mod/customcert/view.php?id=4149&downloadown=1", + }, + { + title: "Biomedical Data or Specimens Only Research", + issuer: "Issued by CITI - Feb 2025", + link: "https://www.citiprogram.org/verify/?wfbc376b8-e4af-456a-9993-bef4add2f037-67625164", + }, + { + title: "GCP – Social and Behavioral Research Best Practices", + issuer: "Issued by CITI - Feb 2025", + link: "https://www.citiprogram.org/verify/?wf3a78f01-e117-4699-b07f-a97a08ff699b-67625163", + }, + { + title: "UIPE Member", + issuer: "Issued by Uganda Institution of Professional Engineers UIPE - August 2023", + link: "assets/images/UIPECertificate.png", + }, +]; - return ( -
-
-

Certificates

-
- {certificates.map((cert, index) => ( - - ))} -
+const Certificates = () => ( +
+
+

Certificates

+
+ {certificates.map((certificate, idx) => ( + + ))}
-
- ); -} +
+
+); + export default Certificates; diff --git a/src/components/projects/ProjectCard.jsx b/src/components/projects/ProjectCard.jsx deleted file mode 100644 index 378f401..0000000 --- a/src/components/projects/ProjectCard.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import styles from "./ProjectCard.module.css"; -import Button from "../Button/Button"; - -function ProjectCard({ title, image, description }) { - return ( -
-
- {title} -
-

{title}

-

{description}

-
- -
-
- ); -} -export default ProjectCard; diff --git a/src/components/projects/ProjectCard.module.css b/src/components/projects/ProjectCard.module.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/projects/Projects.jsx b/src/components/projects/Projects.jsx deleted file mode 100644 index a42df46..0000000 --- a/src/components/projects/Projects.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import ProjectCard from "./ProjectCard"; -import irrigation from "../../assets/images/irrigation.jpg"; -import wheelchair from "../../assets/images/wheelchair.jpg"; -import blog from "../../assets/images/blog.jpg"; -import travel from "../../assets/images/trevallo.png"; - -function Projects() { - const projectData = [ - { - title: "Smart Irrigation System", - image: irrigation, - description: "Developed a smart irrigation system integrating IoT & ML.", - }, - { - title: "Wheelchair Tracker", - image: wheelchair, - description: "Created a wheelchair tracking system using GPS and IoT.", - }, - { - title: "Personal Blog", - image: blog, - description: "Developed a personal blog using React and Node.js.", - }, - { - title: "Travel Booking App", - image: travel, - description: "Built a travel booking application with user authentication.", - }, - ]; - - return ( -
-

Projects

- -
- {projectData.map((project, index) => ( - - ))} -
-
- ); -} - -export default Projects; From ac671ecb44053e2e7da044048cff3ca4a9b20623 Mon Sep 17 00:00:00 2001 From: "[vinald]" Date: Tue, 2 Sep 2025 20:06:06 +0300 Subject: [PATCH 3/3] logo --- public/assets/images/white.png | Bin 0 -> 28186 bytes public/index.html | 7 ++----- src/App.jsx | 5 +++-- src/components/Footer.jsx | 2 -- src/components/Hero.jsx | 6 ++---- src/main.jsx | 3 +-- 6 files changed, 8 insertions(+), 15 deletions(-) create mode 100755 public/assets/images/white.png diff --git a/public/assets/images/white.png b/public/assets/images/white.png new file mode 100755 index 0000000000000000000000000000000000000000..40b9dcff45906681a6f4d792e6171e2fa90265d8 GIT binary patch literal 28186 zcmXtfby$?$^Y;RRloBc+!cqn;2F)TVO4mxabO}o?EvYCg-7U2Uf>KMzgCHSGu`#{rd1t(uZ0@JYxyEPW$G1L}2YZm_ z@zI)uq)=Xgo1=+!ZYiK!Uz6VF6EcwPrgUe_3uSs6oJu6bW}EGsRbAy0=NQf2Z1cp47sB579gP-j`T)601BVA3ycY75qk(XDn84vHrYexQaWq;TjYjT<30YsP zj9v}i5hR5|zKEmIYd_-KM@k5g;G--wTH-*0xS|bJGD>>?Wx-X*e(wMV;R_?zDdO{+NFkQ) z3IdP@eHIJ9Bpj#3<1i?Mb^s2CxA;y&p6@m?ut+%{Z$G#ls28L>PMboV3$}c$qC_K6 zNoxMgSw7nNB7ia4fO-3|UuK~4=vyHQAX1d|VEoyPBbn;Nr`*n5cWU(ZurYVamCH}v z;#{&aCx{ge(wcjdOuhbX5AqX7%s%n!Yte;!rnfBw&rrZ1>@k3Wrd=cvSGu9yVE7cy z*i`4!d0d-Si0S3q2o`V3kd!cnj^4`trBExURN_m@6?F#E`-Vhv(G~90UoZZU8!0~k z^8ORgW9Z?mN+}0Kn!y&Sms^knBCg-7sBC?B7Uk{Qnr&9=CNg*rSu9ir19$!s%Z!zi zLb2kxq*lH!NBx3c6Dax78owU|=t;>gmF?<>ic2Jto<_Ekj{-mp3RJ9|Dlow)=h?crb`j@2P%yN%_RX#B)ji`rWiS>KR`a9`r zZYtu5AikI~^jg{YT|YUh92N0uj8su>q2{Hc7rAPuo8u@1f~OWomj7~)KBCRSl0g3c ziNYO(G051vQ#P|&sQiy=WG@h?4cn zwH!M=d;H!+jLs58*k|C?KM;7qnc2-oqMHKABFW>ro4X0X7cz?hBW}j5Og{c}K9HN+ zHXYd2M=S-ole95F)Cke_x#dAk?O^-vg8rqlc;l!SKwljV>ad|mp#c(e=B&r)Z*@QC z9<{3X0Xh}}F~w(lt=UH@$Wo$|7-MzB@x4qbGLFkVEIcb!mThjBBL$z>BQP(W(`esb zZtxu+9yr{lF^nS?f<3fv?wW`J4s;i11Thx_$2${xG+b2!QJq|gAtuP5bRwCtUUQX0V?k46$`b%B~MZ0tohibJzs+g=Oq^hX6*@9_UyB=>YL0$-enZgcPW z-1LEbGBj>}y`xYp4XjNA!H>^J;k;STu81Z>_?NKD?oP!#nBf^>$eCfnS(Z292H3oU zHxj7p=1$9pe`4lbz<06P(bq|6$^;-^dUN}ixU1ddk}kIo%F~O;3 za}bX_whI>?TQ%51o*L*fNu&Pp+jrcRyySPxfJV~Us~=()C!gM1nOnH{9N1%e4Vm0q zA^@qX7Q278&^<8b>97~Z4-Q9;WHKvMtKoAsX|PG3k_$q7Xjx93`Y~znmWQvxW*irU zXkt_m1S!1Fq< zHgh;FSbBAtl})Q*afAVKkl0}_h>%yioqo9*G1x&@ojAq-kr47q?{(8i{De)reEwv6 z^|)cL9)b<2oHQ=ixx@WI4hV4Cum;Z5y*()izFkE^JAhva=0YpOr8Gv|8fa5;_8DaW z9q{Ue;3qhJe4fq6pTzS%|8eOD2Z(8%Ij!5~lrl8S_NF5s`u1`I0a~{h;7maWM~#<4 zg^rU3$7I6c`(05QYY%avx6^=4CQPy$-~+@o5ahSIW`CyLpG|II0`ixK&V@l~q6{U39Z^psl02FMZxg2Kq z|49Mb=5|&!7?x6(*W|$5b|U||B z>AfFCApu$-xusuo1Kz+Y2yuTCSFR*)d^&dKbR$^$@{4{Kvieno0~G}0!|e7W!hr^P z$?x{1KD}~QI?EX#;zwX}J zD(^@I5oZSLU!+r+Tx#3QhGfcy26JYKS$tZSFEalQnXfPU>nMS(9M#+kl>CFgUf#ftBd3ufnbHp z68mH*SwQ0@!zgrsK3~v{YNM&Vou@SwEh$15>2DEz+fwOuE#OYHJ>P*J93b z3$<$7{v5pHp7vjCU4YLKwJJ1zwsMO6j0-gcvM7u6nqyO2NrHK9*Y__;Radq@zkKTT zWd8pwS7?JDHrDm4NCcYG{-6IX&Z+@_(s}9u0t}_$++}=JPV6X00U9NSRTzJ!9q$%( zrHOV?koFVs4vSn4$y@LJy@+x$756(AWCliK9cV<{UJF19ZZFg|I-h4L`xBX?88!=p zsE-;hUJr-BFS+gaydToV7;+Wz&zsA#TZC~G>Mwt(aP`Mxd0s!IfOk1`izM%bL>9-1 zZwf#X7DYmD7$t#l&}tUpgz!~=HsHwwlE%#i&iw!RzrQ0`zVLzf+3i#ih?FbqQYHEq zy^rs~Ga-;!=D)}@6dIi+bukQpXfVC8^-Uk$WnW0^EBRlOb-Rz*2@v*r0~=9c;I-xr z9FxW~pAYozt6n-$bk=nKhrp}AteURfmzq+|NQFWaYQ*vm2Kt~aAd2Mtp7%&>2oVuH z=lPc+2zXLRn!NS_L<74O4!A$HMHbE?l^viSEtAit(;0ToM8O9P>5PXYQf5jdWc;t6 z`%yu(UqsnWxd`v);F*Z9p!qXvxJHXAKWna)N_N`}1XC zNF?A)tWVQfuqz@>JsMd3g}XDG8wf=#F2%#f<*XKxtia-Vbu7i>-fZAs_#Xgoe}z3u zR^l>%w3^9faTlUgU?U zf3Ua$Sa*L)^=8j4z0C>|%)^w|Z#}5)_h(ucdbvyeucQCVjOJo`CD#fx&@jroK;5Db zh{)c9z!_|DZE)FL8vE`M^<^k=ahJ~XdI?SiwQH0JqtXNefCn<_3{6$8#EqPnKEo0K z4z_rE4S&oRQuYUz2+QXDy;PyqCIEr_A}<5Cj~_@THPZse@9u;Lx8@Jwh#~n6rRX)Q z0h;+Ay~bphQkW-s>9}VvY5hJX3g++A4!6rLYC20GW*`R9Mdo^W=oP3s;7p3zEiKvs zMGSBV(3sI0yQESCsLT{N&=AvupqaFu^`P8)^Sd`C4rJ#c z>x%!=)E}wO?>|Vh*dyLuraXBhrI)2j0T8Yoi3dei7vV5o9O#eQ8Y;Bo!vH)=Uk@hz zW)v!WsiJnv;t9`ITU@0FgjO%xS#Sjw$?Ks2bR@6e*XeU-C-qf5C1iJhbop;aL?N?7 z+9N=Tu*qpRx68i+3FaigW8GM);yks1;}Znd3=V*`bEpGqFvdk(PCpaC@sTzml>!k< zs~Vyi(|Nzoil(JsYwlXsOQB(s;O4%eU&>WCjL;)E%W*PD&$pD8T_uf{K@B*3+P7s< z2}l!wxz6mPdr9?0bbm_F0U=tvT|@`y3*YgwzEX_xWJ3Z-+T%H{bGrEuXSD~4FbKq4 z`2?5Ys}@wt<@6*E-~-^_zH9bJ_*gEdJrEx*|Gx&{02_}!2MHhrfu!V>j>HWK%d0)% z{NMNQPaF`wI`GkOZ(S$|3=oij1FHU4pnXsUOhF(zV@m%6!oHdS$Us_01c=|8Nd{hL zu}CKZ3W7jXr!9~00bK)aS{hH}Cqh8Tg+PkY2FxzVkzK^D6&y~JHS0zW<&DxB;-~t_zcJSrNkeJai;sx_* zhM*V?-^JlCNfJmftbgcDUoWdVsX@&ve$nME5hvWE4+E1;%IP+^)ddP;iv!mOFkQrP^{hSt{jcKS6m@C&25h_y}P}u zP6b2O!{EU1d@~_}1pg5rvuwVDFPixp#_s+0llne@1#RZTe>Uln#!klr>q$%c%9Ru2 zis*8m^tLBQkK*^L2VN=Pog|ZqZe12J@#z;Nf-wCUj=JOZm5-=9Gifu_a~c%SlXPDq zq2Cit7MIw&YhZSh{44jS%KRZs-A?Xt40w~n0anY6nTF^DGPb|s{^}v`qM;C(76!+X zXOI12*oK>OuB}dAa`N)@Uj;*MmwT?S$j+Cr$*L6Hx1IcOoyLKk)T7fE943qwT@p(k z5Xc$xw`yy~XTKqnMr_W4rYIr-KG+ZbHl(WA^=x>s>W~3)vkQ4KdV9gHq`B1OZZG)a zHo^qn#d#`ZQhTW+nTzDWk(8y=A~^gkshNG*(N<5V#+Ub^ceh>h;|``y-8wR$=CBdI zNd&=0bMUR)9)qWK4JIP)#C8}&Kt*p$CFPIIu>a$pSulfFknfF?DLH535*V)_2 zMh$Bu1me+k2FI8p$$7r`Ui~J~P2hl=EY1rzRsQ%Qm+RL{8mPWqtrj7HK6u<;dz*7Z z-`f2t1d~#*{>R|t`y!Ki9%kJKYLr}6>##{cBK5;(qrX&cY>XRIZWO^+8*5v0i-B#uL(3rt9`3 z`cBOMQp+t){`~Ar)w6ueFl)vp`On%};b7xp?EGYE#kNreHApHL!~I0+73{!R!Y@$^ z;(>lo85}b0;bFET2q%#w3SrT&Qty@Ohitt6*bQ~2gw;#EFQRcB;xyc$>u?64lbQWr z@8$ys|7ON6;+LXxmZfYwI zuSlWdspWGJ_fjF$pTFu*{u_cASu30BE2=9 zC66+G_}+z{2tTPf(D0`hO;d)YR&(t2@cg~({+YOeEnN;38FLzca`&ivnEyp5_I^M% z4n!hzbVPk>Q2dtdX7iJqW$@uqz>?o~(H0N}ZB8{d+)A~fJxwNAVhx|&E--d&jiG)@ znxphR#K;r{;zma~4+&j`n$ftkV69G&TtkfjA?iRO+Yj-2;W3^CRnW`_b1zp0i42=u zS^lV{UgI;^IsN-0a47qyb_sjcLWKB2}j!lZ4O-TOe0Ie%4V9x2u@A-EuJ|<5tqw&M^P1EM? zB2!_1(+!pA_7ECY*qtuiUcC+@Qb8?QbpzUE(6zFKvWUWRc^eu-@Hm6}xfg!p;z;w3 zMEIUAY$hDz=`6Y?hl&yqge!OEu{0RP(Ptq@+)V0-@TTh4`?U;o9(||pJWW0ti+wBK zd~Sl*A~n6zoVZAX-bNfo?%X?C*nS_V0jW>YIc`zBVuINIuU-%&b6kRyu@0WjH~9VC zAhCOdZU^V%wTTt7;Fu+^j`K0OTX=(HXTi5P65(*DmXR?!VeyXsXbU}BinmN)_S1b5 zYyr#mjVZ37TZd{+!*HNG!HABhKoL8gbCLkpDA(EhKSv2fA_C6sh@Oj1EmS zSw_#@m80?z8KJCHgz*XA;nPIyfBbz-`Zsv@W7B=*B!cU%1)<#aew0 zh9+i+R6@ff5O7W5R&1Go$=ybIT3TXkIC;oh6CHDM4OUVHn^#+Q%DGDS2zXTOt0|@D)H8WisNl8QE4sK!Cfd{~#S3d5w^k)-n?VZm5>A2M;G!UP}X=uZ5vMB>eY&%WF-=rUU&dWa4#ZVjHqFEadqNQT6h{FwxKluE;INpXsi zQ^I~YJsJcTMZS;6Ntk+_;c&C-|9)@xl}$O#V)GNi(?be3`-Tv3N&rh*B@&^nDfM;; z%syqH>slf-kshTAP(NfHrS2ZbARsY&Sr5GOJTG#NuLA;6~=hd2JZf?6zI~^h;UWaY-}- zWMaAd3CZi6Xpv-$xMGm_T>|$K9@k@xGDJ(&KkxzQsYbl2-cBg;x3`Ms!mnz zWv-H7(e>M(DIvb@Xtqz$^5CEvE(Cho;k9}Os}mhiWns|a&&;I3JRp2w@St}2I|@xy zM!Ay1n)QaHP@VSj8n>llxOMXZIIFwvj4)uakUaL>qPcp0+MDmFA&Hc-l2D8Gr&?$! z{)_LD3J4L1q{{rV!QVgDgZ=dcIR%0I>%31VU#AS8ICXhG`?(tXdiHB1uq%>Sg&c-X zc*{d{qVf`Ej)C9X9F}&!&rJmB{xKi8^)Wd#OJLGCaCWbYA61d5u^+z1NzmuNKkK=3 zxHu<=-~Fh~3p1rkU3v6c)AF1G0$H?hb3NY;_B`Yy)MYy8$?GLT3qFkmmL^bU@jRS6 zyrx{`ON0%#bHK-}H+t>4-#K4YDOaFm5zDAkTg zkpQ*|mfjeCP914@g>k^|oOMOV$!(RF;3GEoZlHg)XReEf?;b%D6tFUERU}U$fKglu zYi2fi3B{B~#_9p(T^qrO9E4RC0LYqg@|S$t3&wL0CY;s;1PgS16WoEHL0Zw^&5VZq zo9|ew?5b$`! zdT)A((}DMGq;9yt<09itizps&d9}qFY*#+~F7Y%)p;~D?HFIa!ZUik;j#jUY&IgZx?A%`*E+IjtV~bnYD^-b53eSSEiQXFtS~+RcOMWF zEzg&$ef#W;d$93&rPW!1SL3-#1)cXA>3Lx+a4Lu|xHqG=ofS#;zQ?x6K`0jOWJsoe z3k6p;5Fz16aFCNujL)zgv#VERiBu1cSm_{b~M0b8)k!HRg#Ab>w9uaATqK`&emw6;s2DpcupRibKAO z<44o$(`8{CRzvNIF$~UvK^wbuE-Frl)%>P{p?UgO6fLFs4n*v1gXKRXw7p!D7|f&h z+p+;*HH43*vl62`i|o%^ThQneZ}d)68lLD%MSnB6^|*Ik_!jbMx;9=*4qem(+D;Z+ zmi51e%6I2sJ4UEmBd$ZU7u$rr!ilWw=^K7&y`J_QdD#3^Wt4v39t6TPU~Ndnue?4B z)f}uubq<`u&i(~xR8AzWvAfqCu{3TS9WiA8PLDGkZI(mv_V07IB>-OKXfBJUjs|5o z>qU>b;EXT&+=qG2bcTh=y@q`0z+TVSXlOYoJ6DM(dcdS;<~c*thgB6a6cHrKetcT9 zxnAGi;-@qF`L6O(R|2}$VzfVtl%iADj~s?eRjyVd3_F1PRGGkoRUWobk?`q^0>7`b zBpK)4SvY4GYANfy1ABxxTZP&ey#Q7Nqg!I*`2Jt-R=V@Z_@?;82U!N-_@ z7x$99`7Unb>R)tx(0KKBCO%2@8*26JAa2G_V->|72melB6*c=RR8Z;$?vDK!`?mY7x&*6PgpGdUo4DYKE1DbP~tpUyW>Me-xjr z@lo{sG6DIi?}X`$;ilFFWto2oGwEJOr?-{@cV>RFeH0v`;KAs5RqZ~S4)t_1S@V<~ zjm^IDbmKVSAIHg~nt(`X^n;av>}Tfes2g~aM&+gytpL?F*{8N8Q|{#1Lm%H$%{=WN zTKVU`*x6-;WDBfWH~qjNUnM;XcPWL7mo}ZQUWUgZ71|u$X7V3%pJ5%XJ^D zp00B=)t)CZ$j5$7URm`%(mTmay0IN#rXET9$EH_gdx#jt8(@3Qw^883racP%5wyqp zIqzmW|I_z5Ubn0}B&q-ZvjDrh_d~lXzqXM2_kAaHK3P28FAaPtxmAGadHUa-zm}C> z*6OZnzx|gH(L0SZ8NmGw@D#3$??)4$XBjg^ya`^61%E~TDZFXQhfV{(_$6|%Y74XE zrh(pl>4EP+L;%gcc(=!D^Ct|{Harpy*Nk_BT}7yWb18B`!Yz zdHS8<*@U;B3S2W!AL;A3XwJLl#~-QPQ(k^hOIU2UdNF$#^c;3uh?rJ}?} zyvc~jW~Nv3=xvps!1(QO2yvlHJtS0&l;|}2SU3sA+82%RN^u3R~k zwxE|B>YswYYyV?`J57Q|Fw?lwcQYx?8XQIL3odFrGIx4T2^r{ec>=`&I6lMqU(6yHTZx}Sea$F?YH_R~| zYvo4WAFLJ#CSs7N&yN9!htAjnOVL zZ>Yh9rBHAaCQR(3+locav`%^R!&C*A7wCPeME6+X&8L*|aR>4Xl*UxVp!=R@;OEwboc_M#5J8=-N3l0-! zZmCrdwdJ&@%uH(DHYv&dFh-R_)c{JGe&^{Y&w)OTX`Cq+QrlzQF>f*~ThymM9PqC5 z%)`WQwgUdI71>mK-Ou0(%*7oXzY0zZqcrWryv2Og~gKC1S!zh%Y zzcRCw{ImQM#Qory&7o!YW~&!Ne7RkL3D;3vYg*M6>QwDQF^KxPgAJS?np}siUB%nw z%DN1VmpvkNMO$2uFkwc~FgNIxz}e!et5)HWOKPF1GqIXsz|SaO-6iJ!%)mzP0oiL3 z*zbb=d+D;%R^iZlefvUhoP1)9jQYBAl($I)$U7u5TRH#YVqCNewKEgqhayraWkaMd z*~#pv_x%FOmmFMvSmx=AC-*to;8ZFRJs$E!sECSx+R^5Cfm_wjh@>$hC-~3m8A8sQRve)T0j|M$? zVdnb(TaC9+sx`i+_h681mZBAltHET%_&yY|!E4>B@MH5$vHz@0qcln!DIwql*;f^o z+0B@57qq!i{#U;*puz0;##zOcs6yuyw z{<+{Lzga=h_R7s*$h70+^54J@?ID!_;p@gRz!#NK+^A`->V{PeXZLm#dXJ8d`;)hFobw)JpaHsjY^i{~ablN8@j=c<`j#7}I@Vo^G~@fpReS-Q|AN)4odM80Ik^vXGIGP1GhA4X z#%q7*TVss<`{pPqo;gB=#G$~ss(lE3rSRjt~Ojbqz3-706q z?JC?tBuCH$!=SgdEz!dyEjg54!$JOg{~Jd+PcsDa9&)Pu9yAGTnJpMt?|{yVKUf_w zI6-KcziYu-F~!=-CcawQwFt}iHXC}=$&(#SVq)n3@N97BkhN%Fx}SEy|9T>Ha0RK* z$noxP3Mq5}(6vk9nN;{nh-z*);l%F`UB^Pq%cWTPCoff^QR13So@14dJ^j zT_7`$UfDhj64d_k&p4FF}o3FUhtopVD}pu9~~=H(ju9LYM<{jgtwQOS@^(MHu5+w&&#{ zA#qg{bhFpo%zyEF0yaO+1zS9%q=h+KMDrq{ z7=U4%y^2F@Gz8@Tn^{3F(jyh5ojKAauhk?^(^%Z)gZpex#3u#)c7Afx0ZrNe`e ztyVk^KkKa=f8TZAAL{zh^5E69U1GR;6{thDzRM9JKbUsm!5wlJ+n?o^bB~(oi9<^w zpkG&Q{(41z`?K_{_T+bi>QYld7SxR%4|Au#TYOA!4wZJE-nK=t$ zz}2Yt5m#asn!uz~HCqza%6`H=Rs+=$avRgZ?3kQ1sH{835SmymVuff3si!PX@%PqZ z&e6ru1Y<>KXACvcSrAMg67gC&4ln<$K{-ZX^Y6s=v>-0p5xUM$WuI%x&zhEm;a=3E zrlK0pzTS*ABy%?tlD_UXW!#0MhFdY`nQYt0PF}ybeN=C(TpfuGWvNR2I_ir}F~aZC z9;w{xVSKqI`Fz<|=KI4{Nn5<^n_5y*Hm&CGTr4WLckQ~8%~6v=!{-X%&ihsW)K%)| zv{-EXI>fb&vZe6m+;M-W8^N3s){5)K%? zU#WjYMVPME)i!!TU|{W51GYOYFJ}{vfIgH(DSdb&A9rfSkEt#oJ_jZnn-M;J8 z_lQvZRxpt3?lvY8O!MIl2^Bo!tyZguoK*631>-2#=R3irgrf^n_~-x^JT!qGDRm25 zo+z2CB$@~RmoRbN@_@yo6bzoKF@}7_<{M$mKDbL`I<=~IntCB^YKucl^bD2{SJNt>?gO~^?jckji`*oOm zizfPScQnMopY5%`;MUukyGa{@)9l8D<|}L^%!^i$qwEEnUed2kt8e-iMlN_YAfWil zBq@SU_0|9JM8I-6A;3jDNBAIUqx1aAv>WcvP?$1B3xKR@2 z`RUJ4h*m*95W_7|f{gX3|k^6wxQQEM=Z&EV&yJ?v z`d6S-Rypf9-qBNkg#F}h>rVl#a&N7O6lsPT+_yzQ2U9K{u;rgkBH>O0>)Xda|HVkK zm4EW5#Wa*AFj_y8arHT1&zFFLv9b(GrF(7w2FZJUx&TG&1i&qG|Jr@ z-;Lpjj~jT*y;U6{gA{*$YJJ|ZQywQ8m%VQ!*UtklZok2g(DX^h6J1A7A*pJ zUPl_>Wj*9jtM7Kwlqg_@UMI0wk`ws&vU^qU&INa_Qq}hg1o}(2Z&V4F;NCp~(<=%% zG!Yw0%rq|rqgyUez}(l^WHv9qO88pdzvMi*4z|f3ns=uy6F5$3e~R!rG}P}L9`QQi z?kyOPr&hfETC#J_XoBXf)DdA1-=w=oh^k@l<{@BlaWst2MR)}MMc>@Aw>BSD%(0S9 zjd_un40_&!^Te0y#a+K!a1iiH>Y{3xS4eOr+RO`2j)F!x?HB0n~FK$VlGXCr^ z7(^wRBdT+~(d5uve@_6@I_bPV`vM@LFA{Uyp$s9$MOY2rq3XRUgQe#bCvHh(>97K# z0#_=ZEco31gOwGLo_BIO%~_bFj-8s!UmO@R;?O30e*0JCWk=TpuO2=UpQQ6R5CYgC>3M^kbm^Bp)`W1D-uZdn)K zsm%O*Cw;PNj`tDX9LE{{NXPVO68qN8$q|7u_&OKOfYfb6UjaS5^b?3q2#v}NRYiKd zZl_N?gMQE}_`Z>Y$)loBdVBl#@)I-*6CkK0fWi0ds9dGb`Ho#_>y>qnq*(u~)I8dE z52Tv5aE8_MlJr>Q&KT6&W7K9dqdzT}m85ZvJFEjNphAVd=qo0(v>1b5 zm=8=yUHd=(1Vg(9e<&i`BNNtXb(BWi&2*7M@CSTEU5Y0yIGvuGOMdEiC?eg}BHc_1 zew&ugd_MiqP@LQ4oP%BHCx7;2Tp3kTTca!Z{tLIS?Zz*47@y#)_K#FVU7w2~VyX$U zg{HOxL?4`utf%sh=J*}(bY-1O?yWU3y&qh;t841G|1xfqDtmmRcQH5BXx<4j3cOF?u*5SM@e_?DhnA=hzYVXs%YYj#1cMIGYxoloOMaf zuL`Kds=M8O9Mvs++4j(kSSsO-7AXw+no-QT!;UuQi_5F3-AUAOGWYrZw7crpN_QeO z*3dXc=cnsz;&t)bnv|8@#1#vDt^2d`Tfc@r35~J{vFy28{%pd@E8e(Q?{ZY`|Iu_+ zi?kHVlt;`p&WlnmxXSetG#LBm9_=Kiw{C(i?teOIQRQhQ<_%Mmb^ZEzPoqy04zINg zTaI0fS_75WUsHGczvM+Ur(50+3tC|EyAYsBIs~oH=)BG?)eog7xqUQqSx} zCVAaBP%Z41tzhB;S*>$17SYOz%!*Ksx@974K`(>j?E2_M-jJ1kKy{sQ?UC(|yq?fUw{fJik}9+P z?bo}L50ZSQ_S%J9m;-x?_SFvQFVFRg&eBBVRED2c}w(oMBuhHiBkqL6}9X@H>Oi zeOCv?(O!}brk^6Udp{-bNoJT{*<7k&dP>VYSNdJ|sb-OvbJ>uURAknCUJuFqx8b-* z`q1A?ZdJ?Ptu6^?+ZxtOW_^U2Ehwt{d*I?-g+~M z&$cf6&ucU0HFl|#)*F&R3tC!&8_8kkaenyRw^4R!^><7sZ;~Y31gC`&cN)0s5wPLR zri*m46}4w-FW6Nu@JJ@Ws#y%d$<0`{ZY6(8%Tyk3ku3VTJ{rK&=8 zJ9_B3jr?1|x}djP#==vRQZ;q~$6trQ$cwqs_*TP>Oh5b|Dz>N`FgPh1krY?Soz5;T zuNrc|ke5)s|_x8zt6t)KKFYE(lBqR$&K-;72ie)bdu^KlsCap**RzW4a4@XS<&C#1G`F@ zxOzWPv-b#2PP}w%eyLoz_3? zvU&(6mCc5{Lo2MrVzX=uE>uIj?z)fJ_^kdKzm=;5#clB~Hori6+<5ss;Z00OUapyQ zVd~zf<*TkDG&-;xy|&H6?;x?wHm8ZvgHge{M=i_zO!p?X4x3^wH1R6UQuQ_EjNA_x z1)A9zMeAK3U%)_@Rz98n^u0C|x(|~cANw|ls6TjkF-7r*h&`cDE%UfJ$gLz-DbWSF z7MGV%RWgUg5nB&R{wil^Ky2SX|1w=9WOdu6k=$NB>Kk36PJ!X)Q+-SO@4qSK8yt#< z&ON$MYZkFwaUzV>rF}tcN~3Y{ipRIY+POYXGxeDp6C=o zEm?s|k4V+X{1U2i9hSE*=Q7C(qY^5)80@!n%R8i3DiOg_%H0_(m13~ydT8&xdw*e@ zalGbOvpd|g-(I|}L3q$H6A#>x5JfVDbCg;27o1efYytJGK8WFajcilF^Dw-6} zP4%9+@Br4T!7OF9ZZ?IP}e@p_q?|;mI<)+%CuZKPYMP)Gb9{jm3jZmR0FjORah~?`4||1>sPaym|!P-6KNCQZ(o7NpG zkra*Gs1UMsIG^Z8y2AZu4eX3OILMruao;;Z!^AFQDiV)huvbzzBl8A>jvwa%W{Olg zmg=$-^?kC;fYnS0xpzKNNF9x-vENi(bf~&Kj>s)VuThZl|U+GImWA zHgQu94CmO~TwI=Mm3Vw>Q*P^r6^r=QrvSFEG`ng)H&0HQYQ6)II8NA#^di>q;@x&$ zZv3D6ZOeMbiM#21&)*IF5G zCJ*=S6U@yFje3^I9Q6(5^lvQ{9(zWmCxjSO5PGYvpT**g3Ik!$uQu~CQ5?p?{vu?l zR3c!yj04MFOrEu$!qESb=k%MMlySn!4kAP#23-#7tJ5-`pa@RWi!dm4Zh6l_ujZXq z9SRulC^QpHW=zxFtl;fYw|`eApfg)=U*lnjVQ8U0Ec$6MbHrm;yWgxE1kv29;3rF; zo^TMyDl!S`IaFtF#{?>tQ1|Qx&@Sy24skJzIuq>2XdV2SzSa9XTuy_yki&8$y^;;y zyAK<$3Comtw^Vg*J?ueWixBopT) z8`Yh+E2QNjqe2bi%uMSbC>-~x?N1n%3G9@03h$frBObHWpJ?FQ%5{BZ4wZQxeXO$U zs~nM5w$q*WlyRgIN4!;;@egXPT|+X z@|T0}b{w|RpAH^%^F6Iz|7|%uuSSNlV%vh@I}|%?^R}KQ&!~cAsO!g~ikIE0(x-)o z9c~4Xp>k>DQ0JH+0FE6{B>_q0kA0|5A9p86kAyR4|EOmmhfRe0La{Ur0=hQJAC~(N z1MiI)H?`!ra<8h6!~31G$1BlNXbNy&V|-whOm<>X8_vBQLa#9=6!wWcZz_~kqj>)D zT8RKQxn6U@rmugGCjvUk)S*N9r%oKNM3Ecmkl3N%d+yEx@#B`PR@h14b>T`;{^SF$ zTgAe>%^Pf&pYQuf{=eHy*6uLY%kg4 zmCz>mtGGF#aC6EksIAH0k$WI3lBlJqy-w6KTlENH=zloef=AR$WUzS#YctAv5ruL@f2 z)Xd+dqIk8JHYbT~UxB89MIk^1Unn4q>+9(mS--*XRN`-FnVmBSWgC&R@7IloC&nl~ z$?7Wy^cz>&G2ejW-w&Lt>q#*r^OJeLe~*G3F(TBizMG<8dPWRb1423 zv)n8>*P^c7i@X0-Jm^MKV7<()Zt* zvEC75zv_8QV_e*I4nSIZ@sO?f^GW+%WQW){{;STkOZAwP_iI|>A};!v%@d`@UH=>AL{D@oQ*N~( zYxAn>bXOmNJ25qjol0zIO&VJ2+kL`O5<{{pMl0+OIV@_zG-=NhaoY#qIS~0V!9|f8 z7BjT)E5N6=hT*7JvEODencVStZda{K|I?!gEQz@oop&4Ri3Iwu{mH)=U*?hDS4x{Qr{pr@(|lPE2giElQ2k+0Ih6FvF&?e|Nc~(k z1s;a`Kl_)&KqD{J(mOOcyFd5D;$C0Aq0f_@dKoC%o?i3}ZJER+FI9dtikW)dr5fD)Nh&wnyzJTP>M|XE0&F>xl z{=D~QXJ=<;XZOv{e6G#r>FRM>0VMwNsKcX^-Dc&@eJbGwdh_KYuD}enTm}g&tK)IGCEcK9(vM6311KT zyFP2R=mB|~pLk9p@lol1cTKuuj6i2!;>G-U-0{U3`-Q;~XnOP5AT1ZO#&@Cd{`NFd zmGt{vDW*=)f-{L&h8{|BOY^a2b%>O*3=l_Ql@8nFbx?bT_+-ceB+crrmHDWKf#rc% zBSx#VmsL?6uQ{ixN6+Pl>A*wlLx@KLHG5~_mqpo@8w6vuX|Ir&-HwZsv#(6bR$JIn zE2HXWkN*t7%Cazs7MX-84+GxIL%$oO2|4gPKgxaW7gb)13b?R)FL3q#E=pES_~Oi? zYy%lQ6K{$Y{DFEFb63)z+H&&oZ=sB>xMy7lk{{aM6mp=SioHXl3k|xtVP`8?c3GH> z7V_kPK-hU4a-2yXJA-sfDBJ>h!=3wX6d7CU`(Wf#}|bI66#dSl#(WEO)J)Zu#X(;|2b1w>2p#Nb16aHe9OMO7$roSfpWSnccZ4Rrf*A|68XeaX+?(qX<>^U^MQH6*2gi6!qzY_ zun&Yte)rs`T=i+M|Fcwa=aT?i>eQcSl{IhLB&2kb@4+|kd?@;s&XT3*Zr5wp)fv`K@j!gI`&NOAnXr++m3`6kM) zJ~Ede2BnO!u8#LAlsMJv;1n@jXpP;c%qSkvF8F3?^aXtRam)*siRJ31vDB)0kWz0) zv)_+0no#lTbm3X=5ofJD;15+=WC-jC&`t0UvJuEyiM*?hrG!*swT~YKnuWwY9DCM% zSB}EtF|He(h@^7TA&chDdY(QBDX3D+JURN0W5M(TS=eOUIomAhJK^;8ON9bKU!KY+ z?hb$PjFEv;hoDO7#s1}$} zp+KCfaVcw>oiRDuCGsQ^rb-Olt)|&}5UN^eqR0@qxyB5c-?Mv(ICu~~Xk;uk<#NIi zg=)J4*;p#*O#=#OiGMG(1xe@~!V#g|A*Kc-wX5C;{AWP#mjsVKr`fl-VtTnxUQ*T(Z z_mhuoSjSIg+(K(Vp!vnKaDUCLHn7sV0^IRcfxBsG7ss<#+_LLx|6$DC$WLtvVL6^m zFM@-C(^=#w_@Z`fM`+nQ*`REn&dz!~aI~8$Vw?mhAu!Yl_ierj$w%|C~oV&(pohxpg|Bui?y;ojQ|zQR@rJXOm}R-I_}b zi9b3xT+Wr?__@~-K`pbq8!>$uq_j;6qyQ-;t!IfRt15A&^elFs2fYt%(<~Oku-!yK zr)Pn$NJY+ceDWv>l5-PAmeQm@UAe>@PK#R^Ji|9dDk1R!h75-`0vPyf@|QG_jr_Q$ zw{^fy<(%X(YrG%cZ8wME!?-4mmq%>0JJ#Kb6dUf96u8?Q27Wyg;B$a>a(`&+{c%7r z2aV0VePkW^CU|4V3`i8|)_R57(h80A7`%&P3C+qWYGrYv8`j6aMMJvIq}qwzTS8RQ zH$G`LJ!qj$p=y(bn#n^i;xzh~u%`A=Go z>~?;{q!qZIJsz2i zjOfTnE%}~L5Ty5l8~>}%e)6BzKtcZ2nx}6TpPN9jt109S7yH`V8bDGKkRCIf!0e?& zXJeSF;F6IW0M*1~^mpgHeVZa-rKx5Bajlrisi)v^xpXff(cEmx+UmCrwMiM98H3Qx zB1Z|kJe~bFIm9{@feXj);JD(--W(<9WU)HJS1ous39bFal43F-{jYSj!p<(>%Dz^Z z8S)alypURyU6G+#TJq-~8z!s<3L?QwlL;!rbKseP=BL3@i+(Y(Fnb^YgFQE1<>?2Q zoU7>8z_f=2*J)4dFZsWR#}ksqVm;nD7zyg9BHQr}s+mvp9x(h)F5(69fSr?XdojAZ z@|lbm8z9N1d18QUEfMm?@$U->>}(k%?^1#qOr)C8_So~bO5|FEMX=>fCar=!eXo?M z5)nNvvQ-35T1m`&!W42zr43pQ;UA~6tiRn*plY=W^F;4c*)zoe_G}wj!^Rr`x&yZ*M`3~ zFDG`OMp!l}tKG*PyXCrsn7l_@R*T&uRLP!hvAJ-zbioRabVEWaXVa^yU>Z+rgYZ7Z zon4uk-OmYBe3NFkXF+uC>Q4m1~2bst{p34B0j z*Qz&kzL~ug4}T(}9T-63=~2|rnl8z8*L{yIFsQXKer@g~Pz8f*uYRu5JLh#3*j#ea za?3235~9*pUcb~t^YBYqMT~c!nHKW~5ScDYuDI~P+W$8y)`{1q#~R605^7^DU$c8| zu-N6()9;}vD~&ivl|+hY%P{qea_l5lA$c$^&TCJ|_|jq`53+W`i5E6lChG#lf$Sdy z-o&Ugq$h}OR(Lj0Jg=jrAzz_WpGQTV^Fa7D%=VX-draJOpAH|~S^X^FuU7TxUUCpD zHhK&twe8nGOoKtb95&JhvRH5!RY$G&WSfjNclYZ^QE@O; z{|cIzRcQM#j?eW;b5FOrP3Dm3>mi*!n?P=L!S;(+7-(f;{jY*^T0|O5T*A3VQF9d$ z3KaQIz|+Kblf5UqdDeyu!skrzgpN8-j5>7(4j&j-Fd8DjjxIJH8E;t+ z9(O8y3H___Cq|WbSS=*rRq)1KMa}eyS967V&^#f4O_43EOuBs-J~^O75R&%!l80s^ zg?bO!W#MO9>tt!R{-Ezui^TO%w%-;XFWTBM9`R8cELMhc4)7X2#N8C2X<+ygjQpue?0pOF86Dy9-9VsL0p+&7;uKQx+y6Mbnds?wRUQ$8t8cPwNCQw3 zAW*bzA8M}@s5NW<#1r{%$n#0A#NsGoaYWWXCT_YqLrnBR<*W{301gt4Z5iMei9!{9 z{&l?rfFGU)Zsv<-S6N=mX6{=}A2bJV%rU}EHi&i@z+q`~l-dnazVip~8nmJDosGRs zB&!1v4zvrf2akG|o#RJ4E0Nc5479CzTriBM=kI$)kpC07RREW9FK7CIy$zu6ZD`S` z3@*NiTRvzQxcC1@&WeNmI5alkbqN%>WHCFtgz84bRTc{s0QXe`-g-e=Z$+Y`S{NZxRP3PPmdiGqEk`+Ov`~STs3p zP+z6kP5pIY;8T5Mh!47`o!k*B+M@-4DDqZ*%#zxo<~`i|JS@&i`Bv;!T9l?6#kxirjH=Ok`1;`N_J0TuC^>8CQ|uQ8bkF& z=~WZ&VhXm9RvFk=F&UwP)15#9n|D10NWc0x<}7eC_$)CZneSN^kyhoZvfa?McYqqT zkm5E`05}6f{UngLD)MsD`)~jx(`%uzYt$^YkERM(n0aLKrbO`I%htLGkCi*A&(@Lt z25eDIk+fj6V;w1ZE6A*56=?-7?a1Gf_+oj>ZBi8@x&4(v3f~!(;L%XE0bv4_ZoPGG z2A~^R`TkPP0o5>5Kf;fJTXO|h^Wd>KmZdLa=zdv?KC#o{=EfYQ?OLq8jJUcK^li7U z>?bTEAyDU8Qm49|CU$QTZ-!Zqp3A8ONW=xc3Ikj<7o%E~uxf@|*!FILb#2 z){pjmB^CSDxHyc_B*Gvi6{w1OSpz^18I+9qca=`M1NbO!V)iR(1(*xOkm3oJI{wDF zjYXYlSL|)8wvduTSGU-M61+b#UfW?tpwfzy2!B2g@t5oeA>|CYRW$bQLf!_04G*&V zm$>Vvo2B$o0gvElUe6`R}Unz#{iWJ7-==Bb)0eFm#zmP%*%x0a4eUhL2G z8oGCDS59rvl|BA=1gkw-^Ib*fc2LTtMB9Y7?aA1d`&^Gl@^(eQXN>wpQZ8nd8*Wi= ze}V=7CfmE8ccamJpPXK!P#nO33c0-SoKXk-ay;}PV|;6kf-->N6v#e{JUsrm?DivNlNXiHhN=Q>tUZE96rY-FJ*EJnk<(dh&g)l~ z)`+jpFU{VQ=f`S>VU!uSQ>jp?6dtitQeM!V z{R8yvdgiSc2Zj*3uY2}(%o>FOauwW-YudS|nmGM(ZGd-oW=2gc8?HSn)P z(_ad`w8$g+uR=WgDBp9*Czd`RvGJ=|bg7tSkk-N$UXZ+?b;^hkrrTtxp9WI|sPH50 zDSf#m_Zxm-eiTjS_!Vy0Lp~QBO!*X&g3hhA##bgN;U{+>(#D;v4k^@Jic0-H!$6e> zwQw569ljxQiu&!W+*LM{-gVikGT7$lEekn=4Fu)@eYoovq!f(Jj|lF;-U0Wh+x zzb=!LqRR>;S_eJ(KASrW>5;$fyLhE@pJMfAy{O9uD6w!fLKRA{IJoqB1<%@k?0L}o zLb#!q2Za`GWqYv8l0mWx+z?+vI$yKQV@MNMzAB@nQ%cFp!aidJAJRvVZ%Wm zLvIAP?_H22(E-OR1?hRRjRJz+E z?qMQO%a%m46pz)l&O)_l1dEL7B!;`Re;QGl9^H}U=XoDFVx3rWev%3vNc+~4CJ;#N zK}$V$KpT(&)B~?$TF_`f7aG64fr{)q znEE?QxR(1?xA*Hd6^MPoLe9FB3)Xc@B2&eSbROY;T7a;lWjCOKhzoF&AdBnl48wTO ztT7%heJAgH=epfo0C3*TFc2NGNkMSIa>pa$ zvx~=7w+yxYwF?f-DTB_-?uHQ8?e$VoEmS%l{II?aLXCSS+iHJ*O`b&*SFlQ|zp|Tv z=s(9WE^!TBcmy)s4;U)FW8#x~EH`pu6#_k&{U8O!enUMC*w5$bT@^9^DDleTv4c<%Vy4JZ=sF*h!%9z2yF zeCf7G6)z@6Q||~wJH$@0#cv7QlhT(qx(G=Gm>|cf$FpNM;w-CX&zgFVrGeZvRg>>I z4X(TBgRCO@fr^NxVq_SYg7a{?YCUkWIi^w0a4=xYy!wLw!XRDjD)Dj(Ox z@5Fg(UPm$NVo>fC%>}@75#sz|RkFGJmIH7A%lpNf8$4lIW=7+{fc5NXkt1;(>pC83 zu{ZQR|LX1L+U-Kyl-@C81R|*nf_ZF0Xn>WPm>sL_Rn{%316Hmk$7}xbo2Ao$ zK@V6*>IK{toz#g~B1to?AunP9!Dbh{$L))TI!ifcX*H=+HyGyfGts6dJ3C|9hB@ua z$@7k|0W{P6AHQlr=W~liG|MJ+=k(Ao*b(?WyvEKtYS}MyJ4q5Uo?~hh;{L0;%-G*~ z{w_p1DLDqVvBoa2=4Rpr-IoKxJtmKrr@qZtTpMX!oFYw`r{)>8o>u^oezPsA1r251~<%2g5ikL!lXlqA%71Z(SWciyo| zr>;%l%(O=mXXN+()!w)1gS?L<(Zn-Xseqp~>gj-YaqCc(G>((vt%F0;&!XOyey=5( zzD4mb<5ay9{9Q5yntxwlmijy7n)m(UM^njU0AQ7O^;Py>^K>*BGI?+E@(4P#BX9Q* zk_jZslMtqB4z;0q2;ZTGNcxlpY)jEOpRpR)w7tYpO91jV^#|UjGJ4Fr6WDzDO!&`r zwa6vbVhR|?G#aBmqF3vOfV0wp_;TUui;;r|;C=(uBHhIWY7j};)Ref7yz>LVH|HTt zMwf2|hb|AR^|#E6JgDKC$x_gd9e6LHr@mTIqpH@VF|cl5Ll5dp`>lgNEtXxy04#g7 zLUZwkHqB#O|I}Cg)dP$%H|k9v@FVn}U2$BTc!WiLMU(T8*TQWU3b!hJQ~REmsct_7 zKB@YCSC`34TttzR@rCc{XF3fZ)JJJv~0R9>BkQv_Ltuo152b~Xrb5ECHTuX5JilZqFcfe{{+RP&zODB&c(`q@x zm{#HkTf-57zYB}_=bmQJ#|WZ2GBaxI^OaYh0wS1pGH4hvZ}Pl}?~EW=PWaTbU*q6w zdP?>_oz74u#*mQL3%M!+mn}^}^v>8V(3iwg=QFAb$P;9e={er76^clRR|K4NB3xM4 zu@G7AmGx&GgjOC{@6U6sTn&rPT80dEZ>|*S{FGPS{)}bqd1ViA$^gI}?u?w)?^hUr ztpQ6FSt1`IL*JYHZo*AFJ$QZ<>8mCw#IO&U*h`#6G|Y3E)J1AyeK)^UV&ndN5VZ_& zDWQ`T!okd;$;T%mv*jriNBO4V5pP)WEYx7i4S2JN{_`2OkU0>aH5o-boAql9HyYT# zs#3^(IUsw`E$z&!+5k<7nB*>$kmNt7cO^O{%g9B`n+zqgxPs)XO<6V(y1=RZKkp%n zP)*fi=y~>R%?Jz4vJa``yCBhq*KqHpeOVakzA`dty$vZUB?5n#q(YyY-ff9D*iAn}7L zUJB20!3>%UcwnqQPE}_I+@SN0+x;=}u|liZ6rWOQlu9t>EFySoDpj3U3;5#z@}Ic> z2#EY3UU^=ZUR+lddAr1f@MlBSv2BJCxP%N;i_k|#rqef?qL}h7Z#IICRAK7<83u+6 z8*2hQZ%)r2qFEj^jF^}66At@i~J#aSnnBe}l9-;aaoXnrM z-@|vb_hIFM=%2D$Hbd0Y6fTGOl1;Bu9~U3u-T2TMoz9&~x|OpZjvV+wiq2v} zBNw=v%vas*t8^pnSxrzDP$XdQQ%6x^-#3OOAE#{?XHTJ~R~1{bgr83chJjuCEq-so z{YT%Xcdkt%Pd%!;2}gyjkmb@VD&sRbN+nmwgJl5%rcQLT9Hb;Q7jyXNV%fxOdJ+4& zGH7`|v>^v5<7uBAb6*xCkMe+5eYLExc^C#h5BA5#-c$V6f+uV<=m-+V+4gcRT4rykioS3#OD(axy>; zJl0R;Eo%@fD_NfyPdOGDI3<vB%5UP_8fF|mu?syU3Bd4FSDc| zZd2&PAM;{LV{{c=rR!ochoomd^Q@NkX)RZ0&fBeccNFEtGbf1<^Q3adyk-~|oig9e zp%##A}|oWw-h*oGGlQ# z;+?vh&VFHT()JLXleot+`~#W8M3F{3$CT5&4o9>M;4i1((I%cIo#gJvdn&+s%`T7U zVP$6ct+scaPtXQOdBLvXPxJRD*f?#R=IVcs4>$@a7y7EjKlR!Vx~X?&WD-)q#c?9$e!eKZFqP*40FMA9otv>MYa^eq znygdmn;SK&*XW$YYN7NH$vrm}c^$SrTCDf*hg z(EE*2?Z-o@mzcH>jJYc~7MX79tPc0Zk7NH4c+ZgcK8j)xd+1;gf6bmR@X3cgLJ# zxZumwtc+!=DkZs=&}yHP1U&TVJyB6VE=VaY2>)AVq*M#zrTE12OFkcmikifr(3JD> z=OX-{NG*>L;@(P}de6J4bn^fhbx;U*O!kb1{9yU*e^TLQj(+_oB|OqQ9P^JW;edW~ z4ll(pu*3j*)X*rSnFTpVL_#@l3=W62x4Kiak(Cd+&9spvsFi;GuUW*V| zNC`(ibQryPE%U+RV-m1J0#QmP&eWut*wg-tFX`LGbIkqs+aaM%O@2^q6ZDUuv1(JH zFGs#fPM(MU?H5j-YKUE;sRLlVg3QrUQD)?12%^_{AnZY8aRoI5k!hsa6D${U^h@_;9L&{u7T=vP>Rm zr!Mm5z=FEv2tD9i?CT;e2`H*$fKhbmxpsK_*Qx34T9JVay>Z6*&;k3Xs+1gHYL047 zFX=nG$;biPp^NR|hOq*zaN1fzM!P^IFCO+&ghVj5ME@%4p`;lR25i^-Ih-6@we0A{ z6i%Vu2C{p7K~^7=9r@9)N(tzUdx7g|SVoY^ z0+-vx(wZWkmW4YH05cEu|M;RkQ0(&!GLV%Jy(uJnMurKP@5a5g+J$NfGoj~IAS*qo zeBQ1f+3GlX{T?7BrZ^0UK;pLX{SUL_rygGu->GuFRXko|;e_{U?HS=avm`l%48Zb2 zhCJu7r=B@Gc+z~a$I-tOU_QIky`;cwmL?;6-c?D~tCrseC5l8{OB#q1sAyfXeQi8a z*c%@dnCz)(c+|C*>5A*w>+q#Z^1^8vw2Xi`G*Ba+KVT52h`!{zrqIp0P$qE1l;?442po?`4*8|j}ns``l9R7!S&`9~| zs0Sq_oQPM_05=*)7h&}w<6EQuMsDB05m+$qT#tQF0beUqD3_y zZ=4j)$Oz(OtKa%2KSB-Y%BhJP6$q#$8mB{uHQgf!S1WZ0xmc9N)z|k#4*=g0a@cwI zns=#8g`cjE&Fin<0n68KP?-cXDG=Q#W#M?Q78i9tLyyLXwc?v`T)WDS8FWiEPD%1KE8s6}H}ZZt;O;B>Ez$`wX* z^~PfH^m|`>@@^?RWwGHDB?g|mWx&3DulQC-fP?Lfy2kOFolH*L8>EBr#<&&67?A#{ z2<$dR+e7;pKrti5(P{Vd0lV^jDM5ImVaxm*=UK*mz(QY=0=(o%8-2PW;*;?dVu9Vr z{Oo8>_;p@Z-q7;nzaZ&PO}Pysgs(e+HW7v}t3Re&bBw)ayZbgbLWw zJZ*m*G_Q@Ml=}43ni$uG8NBA**LM^+uY7A5uhDx*w#}JyQI4aQAbHUjKyfdcdXvsJ z@u7P62StcmfudnCl{hWV7xy;2R{4vjerqJYickC906Uv6(TQ0E}114}ID7#4up{aGcVmcpgeNMo~or>i7HT5@iE0Tp;zu4BD&2m2R*c$z0s4@G8_kgS_V|BKJO{{9p63A# z-aZz{!R;LO7{l8w`ucY0Au?EV z<3p1c?y(iDl*htpRbNmo=fQ%KjM^kCoUzAVdQhbwaRN=0Gg>Xc-Zg0G;$|?MkTsUD*z1B4r7hq%zEZf z5YKRfIhz`1zHfQtM|6Xq=AL_el6op~(_BJQK9u35GEOAiuKDep@f;bq2h;2bo`Wyk z3F(gg(Xw(M$I6t4c0%AC|GW|Bq82bUAl5y-6mpQNznzuzWE(At1XRkH8+UahVUMRf Ug`N8l*m6Oy71ZR5WzFCJ4=+@x!~g&Q literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html index 8d20803..0e50fc7 100644 --- a/public/index.html +++ b/public/index.html @@ -2,14 +2,11 @@ - + Okiror Samuel Vinald - -
- - + \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index b92005c..9d785a6 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,6 +1,6 @@ import React from "react"; import Navbar from "./components/Navbar"; -import Intro from "./components/Hero"; +import Hero from "./components/Hero"; import ContactCards from "./components/Contact/ContactCards"; import Experience from "./components/Experience/Experience"; import Education from "./components/Education/Education"; @@ -8,13 +8,14 @@ import Skills from "./components/Skills"; import Projects from "./components/Project/Projects"; import Certificates from "./components/certificates/Certificates"; import Footer from "./components/Footer"; +import 'bootstrap/dist/css/bootstrap.min.css'; function App() { return (
- + diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index ac51856..656fab5 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,5 +1,3 @@ -import React from "react"; - const Footer = () => (