From 51e66fde11299831c751226d2e903ddbcb3c675b Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sun, 9 Feb 2025 23:08:40 +0100 Subject: [PATCH 01/18] Final update --- .gitignore | 24 + eslint.config.js | 38 + index.html | 13 + package-lock.json | 4589 +++++++++++++++++ package.json | 29 + skills.json | 7 + src/App.css | 41 + src/App.jsx | 27 + src/assets/ButtonIcon1.svg | 5 + src/assets/Doc.svg | 5 + src/assets/Read-On-Medium.svg | 5 + src/assets/SocialLinks.svg | 7 + src/assets/TickerTapeContent.svg | 4 + src/assets/Vector 1.svg | 3 + src/assets/View-Code-Button.svg | 5 + src/assets/blog1.svg | 10 + src/assets/blog2.svg | 10 + src/assets/blog3.svg | 10 + src/assets/blog4.svg | 10 + src/assets/card1.svg | 9 + src/assets/card2.svg | 10 + src/assets/card3.svg | 9 + src/assets/card4.svg | 9 + src/assets/card5.svg | 9 + src/assets/card6.svg | 10 + src/assets/card7.svg | 10 + src/assets/card8.svg | 10 + src/assets/github.svg | 5 + src/assets/linkedin.svg | 5 + src/assets/livedemo.svg | 5 + src/assets/path.svg | 3 + src/components/Arrow/Arrow.css | 17 + src/components/Arrow/Arrow.jsx | 14 + src/components/Button/Button.css | 36 + src/components/Button/Button.jsx | 17 + src/components/Card/Card.css | 123 + src/components/Card/Card.jsx | 58 + src/components/Header.css | 0 src/components/Header.jsx | 7 + src/components/Icon/Icon.css | 10 + src/components/Icon/Icon.jsx | 9 + .../ProfilePicture/ProfilePicture.css | 13 + .../ProfilePicture/ProfilePicture.jsx | 8 + src/components/TextBox/TextBox.css | 216 + src/components/TextBox/TextBox.jsx | 32 + src/index.css | 0 src/main.jsx | 6 + src/sections/Blog.jsx | 49 + src/sections/Contact.jsx | 36 + src/sections/Hero.jsx | 30 + src/sections/Projects.jsx | 97 + src/sections/Skills.jsx | 55 + src/sections/Tech.jsx | 12 + src/ui/Grid.css | 49 + src/ui/Grid.jsx | 9 + src/ui/Typography/Typography.css | 3 + src/ui/Typography/Typography.jsx | 3 + vite.config.js | 7 + 58 files changed, 5852 insertions(+) create mode 100644 .gitignore create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 skills.json create mode 100644 src/App.css create mode 100644 src/App.jsx create mode 100644 src/assets/ButtonIcon1.svg create mode 100644 src/assets/Doc.svg create mode 100644 src/assets/Read-On-Medium.svg create mode 100644 src/assets/SocialLinks.svg create mode 100644 src/assets/TickerTapeContent.svg create mode 100644 src/assets/Vector 1.svg create mode 100644 src/assets/View-Code-Button.svg create mode 100644 src/assets/blog1.svg create mode 100644 src/assets/blog2.svg create mode 100644 src/assets/blog3.svg create mode 100644 src/assets/blog4.svg create mode 100644 src/assets/card1.svg create mode 100644 src/assets/card2.svg create mode 100644 src/assets/card3.svg create mode 100644 src/assets/card4.svg create mode 100644 src/assets/card5.svg create mode 100644 src/assets/card6.svg create mode 100644 src/assets/card7.svg create mode 100644 src/assets/card8.svg create mode 100644 src/assets/github.svg create mode 100644 src/assets/linkedin.svg create mode 100644 src/assets/livedemo.svg create mode 100644 src/assets/path.svg create mode 100644 src/components/Arrow/Arrow.css create mode 100644 src/components/Arrow/Arrow.jsx create mode 100644 src/components/Button/Button.css create mode 100644 src/components/Button/Button.jsx create mode 100644 src/components/Card/Card.css create mode 100644 src/components/Card/Card.jsx create mode 100644 src/components/Header.css create mode 100644 src/components/Header.jsx create mode 100644 src/components/Icon/Icon.css create mode 100644 src/components/Icon/Icon.jsx create mode 100644 src/components/ProfilePicture/ProfilePicture.css create mode 100644 src/components/ProfilePicture/ProfilePicture.jsx create mode 100644 src/components/TextBox/TextBox.css create mode 100644 src/components/TextBox/TextBox.jsx create mode 100644 src/index.css create mode 100644 src/main.jsx create mode 100644 src/sections/Blog.jsx create mode 100644 src/sections/Contact.jsx create mode 100644 src/sections/Hero.jsx create mode 100644 src/sections/Projects.jsx create mode 100644 src/sections/Skills.jsx create mode 100644 src/sections/Tech.jsx create mode 100644 src/ui/Grid.css create mode 100644 src/ui/Grid.jsx create mode 100644 src/ui/Typography/Typography.css create mode 100644 src/ui/Typography/Typography.jsx create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..a547bf36d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# 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/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000000..238d2e4e64 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,38 @@ +import js from '@eslint/js' +import globals from 'globals' +import react from 'eslint-plugin-react' +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', + }, + }, + settings: { react: { version: '18.3' } }, + plugins: { + react, + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + ...reactHooks.configs.recommended.rules, + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/index.html b/index.html new file mode 100644 index 0000000000..0c589eccd4 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..ba6a796513 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4589 @@ +{ + "name": "my-react-portfolio", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-react-portfolio", + "version": "0.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "eslint": "^9.13.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "vite": "^5.4.10" + } + }, + "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, + "license": "Apache-2.0", + "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.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz", + "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/traverse": "^7.26.8", + "@babel/types": "^7.26.8", + "@types/gensync": "^1.0.0", + "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.26.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz", + "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.8", + "@babel/types": "^7.26.8", + "@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.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "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.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz", + "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz", + "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.8", + "@babel/types": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", + "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/types": "^7.26.8", + "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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz", + "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "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, + "license": "Apache-2.0", + "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, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "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/core": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", + "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", + "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", + "dev": true, + "license": "MIT", + "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, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "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, + "license": "Apache-2.0", + "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, + "license": "Apache-2.0", + "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, + "license": "Apache-2.0", + "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, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", + "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", + "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", + "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", + "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", + "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", + "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", + "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", + "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", + "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", + "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", + "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", + "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", + "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", + "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", + "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", + "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", + "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", + "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", + "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/gensync": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", + "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", + "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@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.14.2" + }, + "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.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001699", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", + "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "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" + } + ], + "license": "CC-BY-4.0" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.96", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz", + "integrity": "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.0.tgz", + "integrity": "sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.11.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.20.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@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.2.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": { + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", + "dev": true, + "license": "MIT", + "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.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "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, + "license": "Apache-2.0", + "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, + "license": "BSD-2-Clause", + "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, + "license": "BSD-3-Clause", + "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, + "license": "BSD-2-Clause", + "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, + "license": "BSD-2-Clause", + "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, + "license": "BSD-2-Clause", + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz", + "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "ISC", + "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, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "ISC" + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "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" + } + ], + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-icons": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.4.0.tgz", + "integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", + "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.6", + "@rollup/rollup-android-arm64": "4.34.6", + "@rollup/rollup-darwin-arm64": "4.34.6", + "@rollup/rollup-darwin-x64": "4.34.6", + "@rollup/rollup-freebsd-arm64": "4.34.6", + "@rollup/rollup-freebsd-x64": "4.34.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", + "@rollup/rollup-linux-arm-musleabihf": "4.34.6", + "@rollup/rollup-linux-arm64-gnu": "4.34.6", + "@rollup/rollup-linux-arm64-musl": "4.34.6", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", + "@rollup/rollup-linux-riscv64-gnu": "4.34.6", + "@rollup/rollup-linux-s390x-gnu": "4.34.6", + "@rollup/rollup-linux-x64-gnu": "4.34.6", + "@rollup/rollup-linux-x64-musl": "4.34.6", + "@rollup/rollup-win32-arm64-msvc": "4.34.6", + "@rollup/rollup-win32-ia32-msvc": "4.34.6", + "@rollup/rollup-win32-x64-msvc": "4.34.6", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "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" + } + ], + "license": "MIT", + "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, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.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", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "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, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "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, + "license": "ISC" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..32321f8052 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "my-react-portfolio", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "eslint": "^9.13.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "vite": "^5.4.10" + } +} diff --git a/skills.json b/skills.json new file mode 100644 index 0000000000..a209a705c2 --- /dev/null +++ b/skills.json @@ -0,0 +1,7 @@ +[ + "JavaScript", + "React", + "Node.js", + "CSS", + "HTML" +] diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000000..30df0cf137 --- /dev/null +++ b/src/App.css @@ -0,0 +1,41 @@ +* { + box-sizing: border-box; + font-family: "Montserrat"; +} + +:root { + font-family: inter, system-ui, Aveir Arial, Helvetica, sans-serif; + line-height: 1.5; + font-weight: 400; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin: 0; + + /* COLORS */ + --color-primary: #FFC288; + --color-secondary: #FF6701; + --color-neutral: #FCECDD; +} + +/* 🔹 Remove Any Remaining Margins */ +html, body { + margin: 0; + padding: 0; + width: 100vw; /* ✅ Ensures full width */ + height: 100vh; /* ✅ Ensures full height */ + overflow-x: hidden; /* ✅ Prevents unwanted horizontal scrolling */ +} + +/* 🔹 Remove Padding From `main` */ +main { + min-height: 100vh; + padding: 0; /* ✅ Removes extra padding */ +} + +/* 🔹 Ensure Grid Sections Fill the Page */ +.grid-section { + min-height: 100vh; + width: 100%; +} diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000000..38c0f16eb6 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,27 @@ +import React from 'react' +import './App.css' +import { Blog } from "./sections/Blog.jsx" +import { Projects } from "./sections/Projects.jsx" +import Hero from "./sections/Hero.jsx" +import Skills from "./sections/Skills.jsx"; +import Tech from "./sections/Tech.jsx"; +import Contact from './sections/Contact.jsx' + +// App.jsx +const App = () => { + return ( +
+
+ + + + + + +
+ +
+ ); +}; + +export default App; diff --git a/src/assets/ButtonIcon1.svg b/src/assets/ButtonIcon1.svg new file mode 100644 index 0000000000..ca06d6e12d --- /dev/null +++ b/src/assets/ButtonIcon1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/Doc.svg b/src/assets/Doc.svg new file mode 100644 index 0000000000..653b769e32 --- /dev/null +++ b/src/assets/Doc.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/Read-On-Medium.svg b/src/assets/Read-On-Medium.svg new file mode 100644 index 0000000000..34f9e1c12e --- /dev/null +++ b/src/assets/Read-On-Medium.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/SocialLinks.svg b/src/assets/SocialLinks.svg new file mode 100644 index 0000000000..bfeade468a --- /dev/null +++ b/src/assets/SocialLinks.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/TickerTapeContent.svg b/src/assets/TickerTapeContent.svg new file mode 100644 index 0000000000..40ec6d4e7c --- /dev/null +++ b/src/assets/TickerTapeContent.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/Vector 1.svg b/src/assets/Vector 1.svg new file mode 100644 index 0000000000..66163ade21 --- /dev/null +++ b/src/assets/Vector 1.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/View-Code-Button.svg b/src/assets/View-Code-Button.svg new file mode 100644 index 0000000000..479b572483 --- /dev/null +++ b/src/assets/View-Code-Button.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/blog1.svg b/src/assets/blog1.svg new file mode 100644 index 0000000000..2f8f58851a --- /dev/null +++ b/src/assets/blog1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/blog2.svg b/src/assets/blog2.svg new file mode 100644 index 0000000000..3c2220bcd8 --- /dev/null +++ b/src/assets/blog2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/blog3.svg b/src/assets/blog3.svg new file mode 100644 index 0000000000..dd1d39a7fb --- /dev/null +++ b/src/assets/blog3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/blog4.svg b/src/assets/blog4.svg new file mode 100644 index 0000000000..919b10f6e5 --- /dev/null +++ b/src/assets/blog4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/card1.svg b/src/assets/card1.svg new file mode 100644 index 0000000000..b58faa9163 --- /dev/null +++ b/src/assets/card1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/card2.svg b/src/assets/card2.svg new file mode 100644 index 0000000000..e43737e3a4 --- /dev/null +++ b/src/assets/card2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/card3.svg b/src/assets/card3.svg new file mode 100644 index 0000000000..a7a1fa81a1 --- /dev/null +++ b/src/assets/card3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/card4.svg b/src/assets/card4.svg new file mode 100644 index 0000000000..e4bdfc75e0 --- /dev/null +++ b/src/assets/card4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/card5.svg b/src/assets/card5.svg new file mode 100644 index 0000000000..e8b1b6e5c9 --- /dev/null +++ b/src/assets/card5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/card6.svg b/src/assets/card6.svg new file mode 100644 index 0000000000..c8f1784ccf --- /dev/null +++ b/src/assets/card6.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/card7.svg b/src/assets/card7.svg new file mode 100644 index 0000000000..0f0ea05de5 --- /dev/null +++ b/src/assets/card7.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/card8.svg b/src/assets/card8.svg new file mode 100644 index 0000000000..22edb94776 --- /dev/null +++ b/src/assets/card8.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/github.svg b/src/assets/github.svg new file mode 100644 index 0000000000..a1fbece15d --- /dev/null +++ b/src/assets/github.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/linkedin.svg b/src/assets/linkedin.svg new file mode 100644 index 0000000000..6fc5562941 --- /dev/null +++ b/src/assets/linkedin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/livedemo.svg b/src/assets/livedemo.svg new file mode 100644 index 0000000000..46bfb691c6 --- /dev/null +++ b/src/assets/livedemo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/path.svg b/src/assets/path.svg new file mode 100644 index 0000000000..ef3452be91 --- /dev/null +++ b/src/assets/path.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/Arrow/Arrow.css b/src/components/Arrow/Arrow.css new file mode 100644 index 0000000000..b976562dd0 --- /dev/null +++ b/src/components/Arrow/Arrow.css @@ -0,0 +1,17 @@ +.arrow-container { + position: absolute; /* ✅ Anchors arrow inside `.hero-container` */ + bottom: 20px; /* ✅ Positions arrow above the bottom */ + left: 50%; + transform: translateX(-50%); + text-align: center; + z-index: 10; /* ✅ Ensures arrow stays on top */ +} + +/* 🔹 Keep Sharp Edges */ +.arrow-container svg { + width: 80px; + height: 40px; /* ✅ Ensures a long vertical tail */ + fill: none; + stroke: #FF7D29; + stroke-width: 3px; +} \ No newline at end of file diff --git a/src/components/Arrow/Arrow.jsx b/src/components/Arrow/Arrow.jsx new file mode 100644 index 0000000000..f8ea8d85a4 --- /dev/null +++ b/src/components/Arrow/Arrow.jsx @@ -0,0 +1,14 @@ +import React from "react"; +import "./Arrow.css"; + +const Arrow = () => { + return ( +
+ + + +
+ ); +}; + +export default Arrow; \ No newline at end of file diff --git a/src/components/Button/Button.css b/src/components/Button/Button.css new file mode 100644 index 0000000000..d88fbc3778 --- /dev/null +++ b/src/components/Button/Button.css @@ -0,0 +1,36 @@ + +.custom-button { + display: flex; + align-items: center; + background-color: rgba(0, 0, 0, 0.1); /* Light grey */ + color: black; + padding: 2px 24px 2px 0px; /* Adjust size */ + text-decoration: none; + border-radius: 50px; /* Rounded edges */ + font-weight: bold; + transition: background 0.3s ease-in-out; +} + +.custom-button:hover { + background-color: rgba(0, 0, 0, 0.2); /* Darker grey on hover */ +} + +.button-icon { + margin-right: 12px; /* Space between icon and text */ + font-size: 1.5em; +} + +.blog .custom-button { + background-color: white !important; + color: black !important; + padding: 0px 18px 0px 4px; /* Adjust size */ +} + +.blog .custom-button:hover { + background-color: #f4f4f4; +} +.blog .svg-icon { + transform: scale(0.9); /* ✅ Scales the SVG down to 80% */ + display: inline-block; + margin-right: 10px; +} \ No newline at end of file diff --git a/src/components/Button/Button.jsx b/src/components/Button/Button.jsx new file mode 100644 index 0000000000..6dc1a7b97d --- /dev/null +++ b/src/components/Button/Button.jsx @@ -0,0 +1,17 @@ +import React from "react"; +import "./Button.css"; + +const Button = ({ buttons = [] }) => { + return ( + <> + {buttons.map((button, index) => ( + + {button.icon} + {button.text} {/* ✅ Uses `.p` from TextBox.css */} + + ))} + + ); +}; + +export default Button; \ No newline at end of file diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css new file mode 100644 index 0000000000..e825a80b4d --- /dev/null +++ b/src/components/Card/Card.css @@ -0,0 +1,123 @@ + +.card { + display: grid; + gap: 0px; + align-items: center; + width: 100%; + padding: 0; + grid-column: 1 / span 7; /* Ensures each card takes a full row */ + margin-bottom: 88px; +} + +.card-image { + grid-column: 1 / span 3; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; /* ✅ Prevents border misalignment */ +} + +.bordered-image { + max-width: 380px; + object-fit:cover; + display: block; + padding: -10px; + +} + +/* 🔹 Text Content (Right Side) */ +.card-content { + grid-column: 4 / span 4; /* Ensures text spans the last 4 columns */ + display: flex; + flex-direction: column; + text-align: left; + height: 100%; + justify-content: flex-start; /* 🔥 Ensures text starts at the top */ + align-items: flex-start; /* 🔥 Aligns items to the left */ + +} + +.icon-container { + display: flex; + flex-direction: row; + margin: 24px 0 0 24px; + justify-content: flex-start; +} + +.button-container { + display: flex; + flex-direction: row; + gap: 24px; + margin-top: auto; + margin-left: 24px; + justify-content: flex-start; +} + +/* Blog section */ +.blog-container { + grid-column: span 4; + display: contents; +} + +.blog-container .card { + grid-column: span 4; + display: flex; + flex-direction: column; + align-items: flex-start; + width: 100%; + background: transparent; +} + +/* 🔹 Ensure Images Are Uniform */ +.blog-container .card-image { + width: 100%; + height: auto; + object-fit: cover; +} + +.blog-container .bordered-image { + max-width: 100%; + object-fit:cover; + display: block; +} + +.blog-container .card-content { + flex-grow: 1; + max-width: 80%; + display: flex; + flex-direction: column; + text-align: left; + justify-content: flex-start; + align-items: flex-start; + gap: 4px; + +} + +.blog-container .button-container { + display: flex; + flex-direction: row; + gap: 24px; + margin-top: auto; + margin-left: 0px; + justify-content: flex-start; +} + +.date-container { + font-weight: bold; + font-size: 14px; + color: black; + margin-top: 24px; /* ✅ Adds spacing before the title */ + +} + +/* Different border colors */ + +.peach { + border-bottom: 10px solid #FFC288; + border-left: 10px solid #FFC288; +} + +.orange { + border-bottom: 10px solid #FF6701; + border-left: 10px solid #FF6701; +} diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx new file mode 100644 index 0000000000..6b063609a7 --- /dev/null +++ b/src/components/Card/Card.jsx @@ -0,0 +1,58 @@ +import "./Card.css"; +import TextBox from "../TextBox/TextBox"; +import Icon from "../Icon/Icon"; +import livedemoIcon from "../../assets/livedemo.svg"; +import githubIcon from "../../assets/github.svg"; +import docIcon from "../../assets/Doc.svg"; +import Button from "../Button/Button"; + + +export const Card = ({ borderColor, imageSource, cardTitle, cardDescription, sectionType, icons = [], liveDemo, repoLink, date }) => { + return ( +
+ +
+ Project Visual +
+ +
+ {/* 🔹 Move Date Above the Title */} + {date && ( +
{/* ✅ Adds `.p` class to match text style */} + {/* ✅ Ensures text follows `.p` style */} +
+ )} + + + + + {/* 🔹 Tech Icons Below Description */} + {icons.length > 0 && ( +
+ {icons.map((icon, index) => ( + + ))} +
+ )} + + {/* 🔹 Conditional Button Rendering */} +
+ {sectionType === "projects" ? ( +
+
+
+ ); +}; \ No newline at end of file diff --git a/src/components/Header.css b/src/components/Header.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 0000000000..4fb92ce40c --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const Header = ({ text }) => { + return

{text}

; +}; + +export default Header; diff --git a/src/components/Icon/Icon.css b/src/components/Icon/Icon.css new file mode 100644 index 0000000000..c4a69b1500 --- /dev/null +++ b/src/components/Icon/Icon.css @@ -0,0 +1,10 @@ +.icon { + background-color: black; /* 🔥 Black background */ + color: white; /* 🔥 White text */ + padding: 0px 8px 0px 8px; /* ✅ Wider buttons */ + text-align: center; + font-weight:600; + display: inline-block; /* 🔥 Ensures alignment in a row */ + min-width: fit-content; /* 🔥 Ensures width matches text */ + margin-right: 6px; /* ✅ Less space between buttons */ +} \ No newline at end of file diff --git a/src/components/Icon/Icon.jsx b/src/components/Icon/Icon.jsx new file mode 100644 index 0000000000..ee42bd070f --- /dev/null +++ b/src/components/Icon/Icon.jsx @@ -0,0 +1,9 @@ +import "./Icon.css"; + +const Icon = ({ text }) => { + if (!text) return null; // ✅ Prevents rendering empty elements + + return
{text}
; // ✅ Ensures text renders properly +}; + +export default Icon; \ No newline at end of file diff --git a/src/components/ProfilePicture/ProfilePicture.css b/src/components/ProfilePicture/ProfilePicture.css new file mode 100644 index 0000000000..628906bd8b --- /dev/null +++ b/src/components/ProfilePicture/ProfilePicture.css @@ -0,0 +1,13 @@ +.profile-picture { + width: 164px; + height: 164px; + border-radius: 50%; + grid-column: 1; +} + +/* 🔹 Ensure Profile Picture has more spacing ONLY for Contact */ +.contact-info .profile-picture { + border-radius: 50%; + object-fit: cover; + margin-bottom: 40px; /* ✅ Adds more space BELOW profile picture */ +} \ No newline at end of file diff --git a/src/components/ProfilePicture/ProfilePicture.jsx b/src/components/ProfilePicture/ProfilePicture.jsx new file mode 100644 index 0000000000..bd912f2163 --- /dev/null +++ b/src/components/ProfilePicture/ProfilePicture.jsx @@ -0,0 +1,8 @@ +import React from "react"; +import "./ProfilePicture.css"; + +const ProfilePicture = ({ imageUrl, imageType }) => ( + +); + +export default ProfilePicture; \ No newline at end of file diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css new file mode 100644 index 0000000000..5e91cb79f8 --- /dev/null +++ b/src/components/TextBox/TextBox.css @@ -0,0 +1,216 @@ +.h1 { + font-size: 5.2em; + color: blue; + font-family: 'Montserrat', sans-serif; + grid-column: span 8; +} + +.h3 { + grid-column: span 8; + font-size: 2.0em; + font-family: 'Montserrat', sans-serif; + text-align: left; +} + +.p { + font-size: 1.0em; + font-family: 'Hind', sans-serif; + justify-self: center; + text-align: left; +} + +.h1.hero { + margin: 0; + font-weight: bold; +} + +.h3.hero { + margin: 0; +} + +.hero-container { + position: relative; /* ✅ Allows absolute positioning inside */ + min-height: 100vh; /* ✅ Ensures full-page height */ + width: 100%; +} + +/* Paragraph Styling */ +.p.hero { + grid-column: span 7; + max-width: 95%; + margin: auto auto; +} + +/* Tech Section Heading */ +.h1.tech { + grid-column: 1 / span 2; + color: white; + text-align: right; +} + +.h3.tech { + grid-column: 4 / span 4; + color: white; + margin-left: -24px; + text-align: left; + +} + +.h3.projects { + grid-column: span 5; + max-width: 100%; + margin: 0 0 0 24px; + align-self: start; +} + +.p.projects { + grid-column: span 5; + text-align: left; + max-width: 100%; + margin: 0 0 0 24px; + align-self: start; +} + +h3.blog { + margin-top: 4px; + margin-bottom: 6px; +} + +p.blog { + margin-bottom: 24px; +} + +h1.skills { + color: white; +} + +p.skills { + color: white; + margin-top: 0; +} + +.skills-container { + display: grid; + grid-template-columns: repeat(8, 1fr); /* ✅ 8 equal columns */ + gap: 24px; /* ✅ Adjust spacing between columns */ + justify-content: start; /* ✅ Align to grid */ + align-items: start; + width: 100%; + max-width: 1200px; + margin: 32px auto; + padding-left: 72px; +} + +/* 🔹 Ensure Each Column is Placed Correctly in Grid */ +.skills-column:nth-child(1) { grid-column: 1 / span 2; } /* ✅ Code */ +.skills-column:nth-child(2) { grid-column: 3 / span 2; } /* ✅ Toolbox */ +.skills-column:nth-child(3) { grid-column: 5 / span 2; } /* ✅ Upcoming */ +.skills-column:nth-child(4) { grid-column: 7 / span 2; } /* ✅ More */ + +h3.skills-code { + background-color: #D62828; /* 🔥 Red for Code */ + color: white; + font-weight: 600; + padding: 0px 6px; + display: inline-block; +} + +h3.skills-toolbox { + background-color: #0088CC; /* 🔥 Red for Code */ + color: white; + font-weight: 600; + padding: 0px 6px; + display: inline-block; +} + +h3.skills-upcoming { + background-color: #5FCF80; /* 🔥 Red for Code */ + color: white; + font-weight: 600; + padding: 0px 6px; + display: inline-block; +} + +h3.skills-more { + background-color: #FFCC00; /* 🔥 Red for Code */ + color: blue; + font-weight: 600; + padding: 0px 6px; + display: inline-block; +} + +.skills-column { + display: flex; + flex-direction: column; + align-items: flex-start; + text-align: left; + width: 100%; + gap: 0px; +} + +.skills-column p { + font-size: 1em; + color: white; + margin: 2px 0; /* ✅ Keeps spacing minimal */ + line-height: 1.6; +} + +/* 🔹 Center "Let's talk" */ +.h1.contact { + grid-column: 1 / span 8; + text-align: center; + justify-self: center; + align-self: center; + margin-bottom: 40px; /* ✅ Adjust spacing below */ +} + +.h3.contact { + margin-bottom: 0px; /* ✅ Remove excess spacing */ + line-height: 0.2; /* ✅ Tighten line spacing */ + font-weight: 400; +} + +/* 🔹 Profile Section Centering */ +.contact-info { + grid-column: 3 / span 4; /* ✅ Centers in middle columns */ + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 8px; /* ✅ Adjust spacing between text elements */ + margin-top: 24px; /* ✅ Increases space between profile picture & info */ +} + +/* 🔹 Social Links */ +.social-links { + margin-top: 72px; /* ✅ Adds space above social links */ + margin-bottom: 36px; + width: auto; + height: auto; +} + +/* 🔹 Ticker Tape (Static Pink Ribbon) */ +.ticker-tape { + position: absolute; /* ✅ Stays at the bottom */ + bottom: 0; /* ✅ Anchors it to the bottom */ + left: 0; + width: 100%; /* ✅ Spans across full width */ + background-color: #FF6584; /* ✅ Pink background */ + color: white; /* ✅ White text for contrast */ + padding: 24px 12px; /* ✅ Adds spacing for height */ + text-align: left; + overflow: hidden; /* ✅ Hides overflow text */ + white-space: nowrap; /* ✅ Prevents text from wrapping */ +} + +/* 🔹 Ensures Consistent Styling */ +.ticker-tape h3 { + margin: 0; /* ✅ Removes extra space */ + font-size: 1.2em; + font-family: 'Montserrat', sans-serif; + text-transform: uppercase; +} + + + + diff --git a/src/components/TextBox/TextBox.jsx b/src/components/TextBox/TextBox.jsx new file mode 100644 index 0000000000..f185f1ccf0 --- /dev/null +++ b/src/components/TextBox/TextBox.jsx @@ -0,0 +1,32 @@ +import "./TextBox.css"; +import React from 'react'; + +const TextBox = ({ text, textType = "p", sectionType }) => { + const className = `${textType} ${sectionType ? `${sectionType}` : ""}`.trim(); + + if (textType === "h1") { + return

{text}

; + } else if (textType === "h2") { + return

{text}

; + } else if (textType === "h3") { + return

{text}

; + } else if (textType === "list") { + if (Array.isArray(text)) { + return ( + + ); + } else { + console.warn("Expected an array for 'text' prop when 'textType' is 'list'"); + return null; + } + } + + return

{text}

; +}; + +export default TextBox; + diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000000..3e0527e4b8 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,6 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +ReactDOM.createRoot(document.getElementById('root')).render() diff --git a/src/sections/Blog.jsx b/src/sections/Blog.jsx new file mode 100644 index 0000000000..79943e89c2 --- /dev/null +++ b/src/sections/Blog.jsx @@ -0,0 +1,49 @@ +import { Card } from "../components/Card/Card"; +import { Grid } from "../ui/Grid"; +import TextBox from "../components/TextBox/TextBox"; + +export const Blog = () => { + return ( + + + + {/* 🔹 Wrap all Cards inside a Two-Column Grid Container */} +
+ + + + +
+
+ ); +}; + +export default Blog; \ No newline at end of file diff --git a/src/sections/Contact.jsx b/src/sections/Contact.jsx new file mode 100644 index 0000000000..37cac0ea77 --- /dev/null +++ b/src/sections/Contact.jsx @@ -0,0 +1,36 @@ +import { Grid } from "../ui/Grid"; +import TextBox from "../components/TextBox/TextBox"; +import ProfilePicture from "../components/ProfilePicture/ProfilePicture"; +import SocialLinks from "../assets/SocialLinks.svg"; +import TickerTape from "../assets/TickerTapeContent.svg"; + +export const Contact = () => { + return ( + + {/* 🔹 Centered Header */} + + + {/* 🔹 Profile Section */} +
+ + + + + + + {/* 🔹 Social Links SVG */} + Social Links +
+ + {/* 🔹 Ticker Tape Section */} +
+

Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán

+
+
+ ); +}; + +export default Contact; \ No newline at end of file diff --git a/src/sections/Hero.jsx b/src/sections/Hero.jsx new file mode 100644 index 0000000000..f035668d4f --- /dev/null +++ b/src/sections/Hero.jsx @@ -0,0 +1,30 @@ +import React from "react"; +import { Grid } from "../ui/Grid"; +import ProfilePicture from "../components/ProfilePicture/ProfilePicture"; +import TextBox from "../components/TextBox/TextBox"; +import Arrow from "../components/Arrow/Arrow"; + +const Hero = () => ( +
{/* Wrapper to set position */} + + + + + + + + + + {/* Downward Arrow (Only inside Hero section, outside the grid) */} + +
+); + +export default Hero; \ No newline at end of file diff --git a/src/sections/Projects.jsx b/src/sections/Projects.jsx new file mode 100644 index 0000000000..fcd32baa82 --- /dev/null +++ b/src/sections/Projects.jsx @@ -0,0 +1,97 @@ +import { Card } from "../components/Card/Card" +import { Grid } from "../ui/Grid.jsx" +import TextBox from "../components/TextBox/TextBox"; + + +export const Projects = () => { + return ( + + + + + + + + + + + + + + + ); +}; + +export default Projects \ No newline at end of file diff --git a/src/sections/Skills.jsx b/src/sections/Skills.jsx new file mode 100644 index 0000000000..dda7f75354 --- /dev/null +++ b/src/sections/Skills.jsx @@ -0,0 +1,55 @@ +import { Grid } from "../ui/Grid"; +import TextBox from "../components/TextBox/TextBox"; + +export const Skills = () => { + return ( + + + +
+ {/* ✅ Code Column */} +
+ + + + + + + +
+ + {/* ✅ Toolbox Column */} +
+ + + + + + + + +
+ + {/* ✅ Upcoming Column */} +
+ + +
+ + {/* ✅ More Column */} +
+ + + + + + + + +
+
+
+ ); +}; + +export default Skills; \ No newline at end of file diff --git a/src/sections/Tech.jsx b/src/sections/Tech.jsx new file mode 100644 index 0000000000..9b625dd867 --- /dev/null +++ b/src/sections/Tech.jsx @@ -0,0 +1,12 @@ +import TextBox from "../components/TextBox/TextBox" +import React from 'react'; +import { Grid } from "../ui/Grid"; + +export const Tech = () => ( + + + + +) + +export default Tech; diff --git a/src/ui/Grid.css b/src/ui/Grid.css new file mode 100644 index 0000000000..487cb8d5cd --- /dev/null +++ b/src/ui/Grid.css @@ -0,0 +1,49 @@ +.grid-section { + display: grid; + grid-template-columns: repeat(8, 1fr); + gap: 24px; /* Keeping controlled spacing */ + min-height: 100vh; /* Ensure it fills the whole screen */ + position: relative; + padding: 128px 160px; + align-items: center; /* Ensures vertical alignment */ +} + +.grid-section.hero { + gap: 0px; + padding: 33vh 160px; /* 1/3 white space above & below */ + align-items: start; /* Keep elements in grid layout */ +} + +.grid-section.card { + grid-column: 1 / span 8; /* 🔥 Ensures the card spans full width */ + width: 100%; + gap: 0 + padding-left 0; +} + +/* 🔹 Ensure Skills Section Uses Its Own Layout */ +.grid-section.skills { + display: flex; /* ✅ Prevents `display: grid` from breaking layout */ + flex-direction: column; + align-items: center; + justify-content: flex-start; + padding: 96px 160px; +} + +/* Background Colors */ +.blue-background { + background: blue; +} + +.peach-background { + background: var(--color-neutral); +} + +.white-background { + background: white; +} + +.orange-background { + background: #FF7D29; +} + diff --git a/src/ui/Grid.jsx b/src/ui/Grid.jsx new file mode 100644 index 0000000000..8def454663 --- /dev/null +++ b/src/ui/Grid.jsx @@ -0,0 +1,9 @@ +import "./Grid.css"; + +export const Grid = ({ children, background, sectionType }) => { + return ( +
+ {children} +
+ ); +}; \ No newline at end of file diff --git a/src/ui/Typography/Typography.css b/src/ui/Typography/Typography.css new file mode 100644 index 0000000000..bdcefc95b4 --- /dev/null +++ b/src/ui/Typography/Typography.css @@ -0,0 +1,3 @@ +.section-title { + grid-column:span 8; +} diff --git a/src/ui/Typography/Typography.jsx b/src/ui/Typography/Typography.jsx new file mode 100644 index 0000000000..5f0546ce13 --- /dev/null +++ b/src/ui/Typography/Typography.jsx @@ -0,0 +1,3 @@ +import "./typography.css" + +export const SectionTitle = ({ children }) =>

{children}

diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000000..8b0f57b91a --- /dev/null +++ b/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From ef1ea0e3a52e9eaa3e0c8911df030fa4448dbfbf Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sun, 9 Feb 2025 23:22:38 +0100 Subject: [PATCH 02/18] fix relative paths --- src/sections/Blog.jsx | 8 ++++---- src/sections/Projects.jsx | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/sections/Blog.jsx b/src/sections/Blog.jsx index 79943e89c2..ec0da51c86 100644 --- a/src/sections/Blog.jsx +++ b/src/sections/Blog.jsx @@ -10,7 +10,7 @@ export const Blog = () => { {/* 🔹 Wrap all Cards inside a Two-Column Grid Container */}
{ date="July 2023" /> { date="July 2023" /> { date="July 2023" /> { { /> { date="July 2023" /> { date="July 2023" /> { date="July 2023" /> { { /> { return ( From aa2104be2b903059c33b0e9f4a514a24f269b762 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sun, 9 Feb 2025 23:41:26 +0100 Subject: [PATCH 05/18] fix last image hopefully again --- src/components/Card/Card.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 6b063609a7..fc45e909fd 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -1,9 +1,9 @@ import "./Card.css"; import TextBox from "../TextBox/TextBox"; import Icon from "../Icon/Icon"; -import livedemoIcon from "../../assets/livedemo.svg"; -import githubIcon from "../../assets/github.svg"; -import docIcon from "../../assets/Doc.svg"; +import livedemoIcon from "/assets/livedemo.svg"; +import githubIcon from "/assets/github.svg"; +import docIcon from "/assets/Doc.svg"; import Button from "../Button/Button"; From 606e587b1a139c89dfdd869e133ccae25c0b54c5 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sun, 9 Feb 2025 23:58:03 +0100 Subject: [PATCH 06/18] basic responsiveness --- src/App.css | 57 +++++++++++++++++++++++++++ src/components/Card/Card.css | 27 +++++++++++++ src/components/TextBox/TextBox.css | 63 ++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+) diff --git a/src/App.css b/src/App.css index 30df0cf137..f5c065362a 100644 --- a/src/App.css +++ b/src/App.css @@ -39,3 +39,60 @@ main { min-height: 100vh; width: 100%; } + +@media (max-width: 1024px) { /* ✅ Medium Screens (Tablets) */ + .grid-section { + padding: 96px 80px; /* Reduce padding */ + } + + .hero-container { + flex-direction: column; /* Stack elements */ + text-align: center; + } + + .card { + grid-column: span 6; /* Make cards take more space */ + } + + .skills-container { + grid-template-columns: repeat(2, 1fr); /* 2 columns */ + gap: 16px; + } +} + +@media (max-width: 768px) { + .grid-section { + padding: 48px 24px; /* Reduce padding for mobile */ + gap: 16px; + } + + .hero-container { + text-align: center; + flex-direction: column; + align-items: center; + } + + .hero-container .arrow-container { + bottom: 10px; /* Adjust arrow position */ + } + + .card { + grid-column: span 8; + } + + .skills-container { + grid-template-columns: repeat(1, 1fr); /* Stack all skills */ + } + + .contact-info { + grid-column: span 8; + text-align: center; + align-items: center; + padding-bottom: 32px; /* More spacing for readability */ + } + + .ticker-tape { + font-size: 0.9em; /* Reduce text size for smaller screens */ + padding: 6px; + } +} \ No newline at end of file diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index e825a80b4d..f7af2d1f36 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -121,3 +121,30 @@ border-bottom: 10px solid #FF6701; border-left: 10px solid #FF6701; } + + +@media (max-width: 1024px) { /* Tablets */ + .card { + grid-column: span 6; + } + + .blog-container { + grid-template-columns: repeat(1, 1fr); /* Stack blog posts */ + } +} + +@media (max-width: 768px) { /* Mobile */ + .card { + grid-column: span 8; + } + + .blog-container { + grid-template-columns: repeat(1, 1fr); /* Full width */ + } + + .button-container { + flex-direction: column; /* Stack buttons */ + align-items: center; + gap: 12px; + } +} \ No newline at end of file diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 5e91cb79f8..c411b4c883 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -212,5 +212,68 @@ h3.skills-more { } +@media (max-width: 1024px) { + .skills-container { + grid-template-columns: repeat(2, 1fr); /* 2 columns */ + gap: 16px; + } + + .contact-info { + grid-column: span 6; + } +} +@media (max-width: 768px) { + .hero-container { + text-align: center; + flex-direction: column; + align-items: center; + padding: 40px 20px; + } + + .hero-container .arrow-container { + bottom: 10px; + } + + .profile-picture { + width: 120px; /* Reduce profile picture size */ + height: 120px; + } + + + .skills-container { + grid-template-columns: repeat(1, 1fr); /* Stack each skill box */ + } + + .skills-column { + text-align: center; + align-items: center; + padding: 16px; + } + + .skills-column h3 { + padding: 6px 10px; + font-size: 1.5em; + text-align: center; + } + + + .contact-info { + grid-column: span 8; + text-align: center; + } + + .contact-info h3 { + font-size: 1.2em; + } + + .social-links { + width: 80%; + } + + .ticker-tape { + font-size: 0.9em; + padding: 6px; + } +} From cacb44e1c170d53dbcc37fd8380b19dc6f7f762c Mon Sep 17 00:00:00 2001 From: Estefanny Moran Date: Thu, 20 Feb 2025 21:34:34 +0100 Subject: [PATCH 07/18] Try to make PR work --- README.md | 51 +-------------------------------------------------- 1 file changed, 1 insertion(+), 50 deletions(-) diff --git a/README.md b/README.md index c05b94b348..0d5dcdaa10 100644 --- a/README.md +++ b/README.md @@ -1,50 +1 @@ -

- - Project Banner Image - -

- -# Technigo - React Portfolio Project - -Congratulations on completing Sprint 2 of the boot camp! For the final phase, we will now take your skills in React to the next level by building your very own portfolio website using the concepts learned in class - -## Instructions -[Check this projects instructions here](https://github.com/Technigo/project-portfolio/blob/main/instructions.md) - -## Set up your own version of your portfolio - -We will use [Vite](https://vitejs.dev/guide/) to setup our project 😉 - -```bash - npm create vite@latest my-react-portfolio --template -``` - -#### Follow this GIF to setup your project - -![Alt Text](https://res.cloudinary.com/dfkxydgqg/image/upload/v1691073155/WEB/Sprint-2/week-8/vite-react_vjp0ep.gif) - -## Installation - -Use the `cd` command to move into the folder - -```bash - cd my-react-portfolio -``` - -Install the dependencies - -```bash - npm i -``` - -Open the project in a separate VS Code editor - -```bash - code . -``` - -Open up a terminal inside VS code and lets run the project in a local environment - -```bash - npm run dev -``` +Changing to try to re-commit \ No newline at end of file From f619ec690778710784af43b7fa3afd9b1fd8d384 Mon Sep 17 00:00:00 2001 From: Estefanny Moran Date: Thu, 6 Mar 2025 23:47:19 +0100 Subject: [PATCH 08/18] start adjusting hero page --- src/components/Arrow/Arrow.css | 6 ++-- .../ProfilePicture/ProfilePicture.css | 4 ++- src/components/TextBox/TextBox.css | 34 +++++++++++++------ src/sections/Hero.jsx | 4 +-- src/ui/Grid.css | 9 ++--- 5 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/components/Arrow/Arrow.css b/src/components/Arrow/Arrow.css index b976562dd0..94128945f9 100644 --- a/src/components/Arrow/Arrow.css +++ b/src/components/Arrow/Arrow.css @@ -1,6 +1,6 @@ .arrow-container { position: absolute; /* ✅ Anchors arrow inside `.hero-container` */ - bottom: 20px; /* ✅ Positions arrow above the bottom */ + bottom: 63px; /* ✅ Positions arrow above the bottom */ left: 50%; transform: translateX(-50%); text-align: center; @@ -9,8 +9,8 @@ /* 🔹 Keep Sharp Edges */ .arrow-container svg { - width: 80px; - height: 40px; /* ✅ Ensures a long vertical tail */ + width: 27px; + height: 68px; /* ✅ Ensures a long vertical tail */ fill: none; stroke: #FF7D29; stroke-width: 3px; diff --git a/src/components/ProfilePicture/ProfilePicture.css b/src/components/ProfilePicture/ProfilePicture.css index 628906bd8b..a206f462f6 100644 --- a/src/components/ProfilePicture/ProfilePicture.css +++ b/src/components/ProfilePicture/ProfilePicture.css @@ -3,11 +3,13 @@ height: 164px; border-radius: 50%; grid-column: 1; + margin-right: 22px; + margin-top: 16px; + border-alignment: inside; } /* 🔹 Ensure Profile Picture has more spacing ONLY for Contact */ .contact-info .profile-picture { border-radius: 50%; object-fit: cover; - margin-bottom: 40px; /* ✅ Adds more space BELOW profile picture */ } \ No newline at end of file diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index c411b4c883..e977142db8 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -1,44 +1,58 @@ .h1 { - font-size: 5.2em; + font-size: 80px; color: blue; font-family: 'Montserrat', sans-serif; grid-column: span 8; + + font-weight: 700; + line-height: 98px; } .h3 { grid-column: span 8; - font-size: 2.0em; + font-size: 32px; font-family: 'Montserrat', sans-serif; text-align: left; + font-weight: 600; + font-style: normal; + line-height: 39px; + padding:0; } .p { - font-size: 1.0em; + font-size: 18px; font-family: 'Hind', sans-serif; justify-self: center; text-align: left; + + font-weight: 400; + line-height: 29px; } .h1.hero { + width: 1044px; + height: auto; margin: 0; - font-weight: bold; } .h3.hero { - margin: 0; + width: 1044px; + height: auto; + margin: 0px; } .hero-container { - position: relative; /* ✅ Allows absolute positioning inside */ - min-height: 100vh; /* ✅ Ensures full-page height */ - width: 100%; + position: relative; /* already set */ + } /* Paragraph Styling */ .p.hero { grid-column: span 7; - max-width: 95%; - margin: auto auto; + width: 858px; + height:auto; + justify-self: left; + margin: 0; } /* Tech Section Heading */ diff --git a/src/sections/Hero.jsx b/src/sections/Hero.jsx index f035668d4f..f2acae50e8 100644 --- a/src/sections/Hero.jsx +++ b/src/sections/Hero.jsx @@ -7,7 +7,7 @@ import Arrow from "../components/Arrow/Arrow"; const Hero = () => (
{/* Wrapper to set position */} - + ( /> diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 487cb8d5cd..635438fcb6 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -1,17 +1,14 @@ .grid-section { display: grid; grid-template-columns: repeat(8, 1fr); - gap: 24px; /* Keeping controlled spacing */ - min-height: 100vh; /* Ensure it fills the whole screen */ + width: 1512px; + height: 980px; /* Ensure it fills the whole screen */ position: relative; - padding: 128px 160px; align-items: center; /* Ensures vertical alignment */ } .grid-section.hero { - gap: 0px; - padding: 33vh 160px; /* 1/3 white space above & below */ - align-items: start; /* Keep elements in grid layout */ + padding: 332px 234px 331px 234px; } .grid-section.card { From 2b3000708de7628129bb0ddef15da374781eeaba Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sat, 15 Mar 2025 20:12:10 +0100 Subject: [PATCH 09/18] fix large window layout --- package-lock.json | 440 +++++++++--------- public/assets/arrow_down.svg | 5 + public/assets/arrow_up.svg | 5 + public/assets/github_1.svg | 5 + public/assets/github_2.svg | 5 + public/assets/instagram_1.svg | 5 + public/assets/instagram_2.svg | 5 + public/assets/linkedin_1.svg | 5 + public/assets/linkedin_2.svg | 5 + public/assets/so_1.svg | 5 + public/assets/so_2.svg | 5 + public/assets/twitter_1.svg | 5 + public/assets/twitter_2.svg | 5 + src/App.css | 65 +-- src/App.jsx | 6 +- src/components/Arrow/Arrow.css | 14 +- src/components/Arrow/Arrow.jsx | 16 +- src/components/Button/Button.css | 61 ++- src/components/Button/Button.jsx | 4 +- src/components/Card/Card.css | 84 ++-- src/components/Card/Card.jsx | 15 +- src/components/Icon/Icon.css | 9 +- src/components/Icon/Icon.jsx | 4 +- src/components/ImageIcon/ImageIcon.css | 18 + src/components/ImageIcon/ImageIcon.jsx | 12 + .../ProfilePicture/ProfilePicture.css | 6 +- src/components/Separator/Separator.css | 29 ++ src/components/Separator/Separator.jsx | 22 + src/components/TextBox/TextBox.css | 213 ++++----- src/sections/Blog.jsx | 2 +- src/sections/Contact.jsx | 12 +- src/sections/Projects.jsx | 4 +- src/ui/Grid.css | 30 +- src/ui/Grid.jsx | 6 +- 34 files changed, 604 insertions(+), 528 deletions(-) create mode 100644 public/assets/arrow_down.svg create mode 100644 public/assets/arrow_up.svg create mode 100644 public/assets/github_1.svg create mode 100644 public/assets/github_2.svg create mode 100644 public/assets/instagram_1.svg create mode 100644 public/assets/instagram_2.svg create mode 100644 public/assets/linkedin_1.svg create mode 100644 public/assets/linkedin_2.svg create mode 100644 public/assets/so_1.svg create mode 100644 public/assets/so_2.svg create mode 100644 public/assets/twitter_1.svg create mode 100644 public/assets/twitter_2.svg create mode 100644 src/components/ImageIcon/ImageIcon.css create mode 100644 src/components/ImageIcon/ImageIcon.jsx create mode 100644 src/components/Separator/Separator.css create mode 100644 src/components/Separator/Separator.jsx diff --git a/package-lock.json b/package-lock.json index ba6a796513..d2f67b86ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,23 +65,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz", - "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", + "@babel/generator": "^7.26.9", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.7", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/traverse": "^7.26.8", - "@babel/types": "^7.26.8", - "@types/gensync": "^1.0.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -97,14 +96,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz", - "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -203,27 +202,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz", - "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.8" + "@babel/types": "^7.26.9" }, "bin": { "parser": "bin/babel-parser.js" @@ -265,32 +264,32 @@ } }, "node_modules/@babel/template": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz", - "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8" + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz", - "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.8", - "@babel/parser": "^7.26.8", - "@babel/template": "^7.26.8", - "@babel/types": "^7.26.8", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -309,9 +308,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz", - "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "dev": true, "license": "MIT", "dependencies": { @@ -770,10 +769,20 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", + "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", - "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -784,9 +793,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", + "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -821,9 +830,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", - "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", + "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", "dev": true, "license": "MIT", "engines": { @@ -841,32 +850,19 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", - "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.10.0", + "@eslint/core": "^0.12.0", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", - "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "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", @@ -920,9 +916,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -987,9 +983,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", - "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", + "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", "cpu": [ "arm" ], @@ -1001,9 +997,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", - "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", + "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", "cpu": [ "arm64" ], @@ -1015,9 +1011,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", - "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", + "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", "cpu": [ "arm64" ], @@ -1029,9 +1025,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", - "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", + "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", "cpu": [ "x64" ], @@ -1043,9 +1039,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", - "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", + "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", "cpu": [ "arm64" ], @@ -1057,9 +1053,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", - "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", + "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", "cpu": [ "x64" ], @@ -1071,9 +1067,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", - "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", + "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", "cpu": [ "arm" ], @@ -1085,9 +1081,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", - "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", + "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", "cpu": [ "arm" ], @@ -1099,9 +1095,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", - "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", + "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", "cpu": [ "arm64" ], @@ -1113,9 +1109,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", - "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", + "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", "cpu": [ "arm64" ], @@ -1127,9 +1123,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", - "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", + "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", "cpu": [ "loong64" ], @@ -1141,9 +1137,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", - "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", + "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", "cpu": [ "ppc64" ], @@ -1155,9 +1151,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", - "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", + "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", "cpu": [ "riscv64" ], @@ -1169,9 +1165,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", - "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", + "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", "cpu": [ "s390x" ], @@ -1183,9 +1179,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", - "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", + "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", "cpu": [ "x64" ], @@ -1197,9 +1193,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", - "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", + "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", "cpu": [ "x64" ], @@ -1211,9 +1207,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", - "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", + "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", "cpu": [ "arm64" ], @@ -1225,9 +1221,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", - "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", + "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", "cpu": [ "ia32" ], @@ -1239,9 +1235,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", - "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", + "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", "cpu": [ "x64" ], @@ -1304,13 +1300,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/gensync": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz", - "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1367,9 +1356,9 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -1662,9 +1651,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1676,14 +1665,14 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -1703,9 +1692,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "version": "1.0.30001702", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", + "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", "dev": true, "funding": [ { @@ -1940,9 +1929,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz", - "integrity": "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==", + "version": "1.5.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz", + "integrity": "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==", "dev": true, "license": "ISC" }, @@ -2090,13 +2079,16 @@ } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { @@ -2180,22 +2172,23 @@ } }, "node_modules/eslint": { - "version": "9.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.0.tgz", - "integrity": "sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", + "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.11.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.20.0", - "@eslint/plugin-kit": "^0.2.5", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.1.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "9.22.0", + "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", + "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -2203,7 +2196,7 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", + "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", @@ -2273,9 +2266,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", - "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", + "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, "license": "MIT", "engines": { @@ -2296,9 +2289,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "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, "license": "BSD-2-Clause", "dependencies": { @@ -2455,16 +2448,16 @@ } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "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, "license": "ISC" }, "node_modules/for-each": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz", - "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -2544,18 +2537,18 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -2614,9 +2607,9 @@ } }, "node_modules/globals": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", - "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -3384,9 +3377,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", + "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", "dev": true, "funding": [ { @@ -3649,9 +3642,9 @@ } }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -3735,9 +3728,9 @@ } }, "node_modules/react-icons": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.4.0.tgz", - "integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", "license": "MIT", "peerDependencies": { "react": "*" @@ -3833,9 +3826,9 @@ } }, "node_modules/rollup": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", - "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", + "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", "dev": true, "license": "MIT", "dependencies": { @@ -3849,25 +3842,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.6", - "@rollup/rollup-android-arm64": "4.34.6", - "@rollup/rollup-darwin-arm64": "4.34.6", - "@rollup/rollup-darwin-x64": "4.34.6", - "@rollup/rollup-freebsd-arm64": "4.34.6", - "@rollup/rollup-freebsd-x64": "4.34.6", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", - "@rollup/rollup-linux-arm-musleabihf": "4.34.6", - "@rollup/rollup-linux-arm64-gnu": "4.34.6", - "@rollup/rollup-linux-arm64-musl": "4.34.6", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", - "@rollup/rollup-linux-riscv64-gnu": "4.34.6", - "@rollup/rollup-linux-s390x-gnu": "4.34.6", - "@rollup/rollup-linux-x64-gnu": "4.34.6", - "@rollup/rollup-linux-x64-musl": "4.34.6", - "@rollup/rollup-win32-arm64-msvc": "4.34.6", - "@rollup/rollup-win32-ia32-msvc": "4.34.6", - "@rollup/rollup-win32-x64-msvc": "4.34.6", + "@rollup/rollup-android-arm-eabi": "4.35.0", + "@rollup/rollup-android-arm64": "4.35.0", + "@rollup/rollup-darwin-arm64": "4.35.0", + "@rollup/rollup-darwin-x64": "4.35.0", + "@rollup/rollup-freebsd-arm64": "4.35.0", + "@rollup/rollup-freebsd-x64": "4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "4.35.0", + "@rollup/rollup-linux-arm64-gnu": "4.35.0", + "@rollup/rollup-linux-arm64-musl": "4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "4.35.0", + "@rollup/rollup-linux-s390x-gnu": "4.35.0", + "@rollup/rollup-linux-x64-gnu": "4.35.0", + "@rollup/rollup-linux-x64-musl": "4.35.0", + "@rollup/rollup-win32-arm64-msvc": "4.35.0", + "@rollup/rollup-win32-ia32-msvc": "4.35.0", + "@rollup/rollup-win32-x64-msvc": "4.35.0", "fsevents": "~2.3.2" } }, @@ -4351,9 +4344,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "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": [ { @@ -4535,16 +4528,17 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, diff --git a/public/assets/arrow_down.svg b/public/assets/arrow_down.svg new file mode 100644 index 0000000000..47d79faba8 --- /dev/null +++ b/public/assets/arrow_down.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/arrow_up.svg b/public/assets/arrow_up.svg new file mode 100644 index 0000000000..3f88ba1339 --- /dev/null +++ b/public/assets/arrow_up.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/github_1.svg b/public/assets/github_1.svg new file mode 100644 index 0000000000..ce93edf299 --- /dev/null +++ b/public/assets/github_1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/github_2.svg b/public/assets/github_2.svg new file mode 100644 index 0000000000..8d667ea3c3 --- /dev/null +++ b/public/assets/github_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/instagram_1.svg b/public/assets/instagram_1.svg new file mode 100644 index 0000000000..a67abeebb5 --- /dev/null +++ b/public/assets/instagram_1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/instagram_2.svg b/public/assets/instagram_2.svg new file mode 100644 index 0000000000..2973dee406 --- /dev/null +++ b/public/assets/instagram_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/linkedin_1.svg b/public/assets/linkedin_1.svg new file mode 100644 index 0000000000..11d291e55a --- /dev/null +++ b/public/assets/linkedin_1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/linkedin_2.svg b/public/assets/linkedin_2.svg new file mode 100644 index 0000000000..a7c16ce3d6 --- /dev/null +++ b/public/assets/linkedin_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/so_1.svg b/public/assets/so_1.svg new file mode 100644 index 0000000000..d3021bb2df --- /dev/null +++ b/public/assets/so_1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/so_2.svg b/public/assets/so_2.svg new file mode 100644 index 0000000000..c622b942d0 --- /dev/null +++ b/public/assets/so_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/twitter_1.svg b/public/assets/twitter_1.svg new file mode 100644 index 0000000000..4b7ea12f91 --- /dev/null +++ b/public/assets/twitter_1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/assets/twitter_2.svg b/public/assets/twitter_2.svg new file mode 100644 index 0000000000..47f82e4f67 --- /dev/null +++ b/public/assets/twitter_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/App.css b/src/App.css index f5c065362a..75c5681f08 100644 --- a/src/App.css +++ b/src/App.css @@ -19,6 +19,8 @@ --color-neutral: #FCECDD; } + + /* 🔹 Remove Any Remaining Margins */ html, body { margin: 0; @@ -33,66 +35,3 @@ main { min-height: 100vh; padding: 0; /* ✅ Removes extra padding */ } - -/* 🔹 Ensure Grid Sections Fill the Page */ -.grid-section { - min-height: 100vh; - width: 100%; -} - -@media (max-width: 1024px) { /* ✅ Medium Screens (Tablets) */ - .grid-section { - padding: 96px 80px; /* Reduce padding */ - } - - .hero-container { - flex-direction: column; /* Stack elements */ - text-align: center; - } - - .card { - grid-column: span 6; /* Make cards take more space */ - } - - .skills-container { - grid-template-columns: repeat(2, 1fr); /* 2 columns */ - gap: 16px; - } -} - -@media (max-width: 768px) { - .grid-section { - padding: 48px 24px; /* Reduce padding for mobile */ - gap: 16px; - } - - .hero-container { - text-align: center; - flex-direction: column; - align-items: center; - } - - .hero-container .arrow-container { - bottom: 10px; /* Adjust arrow position */ - } - - .card { - grid-column: span 8; - } - - .skills-container { - grid-template-columns: repeat(1, 1fr); /* Stack all skills */ - } - - .contact-info { - grid-column: span 8; - text-align: center; - align-items: center; - padding-bottom: 32px; /* More spacing for readability */ - } - - .ticker-tape { - font-size: 0.9em; /* Reduce text size for smaller screens */ - padding: 6px; - } -} \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index 38c0f16eb6..3421a3cd97 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -6,8 +6,8 @@ import Hero from "./sections/Hero.jsx" import Skills from "./sections/Skills.jsx"; import Tech from "./sections/Tech.jsx"; import Contact from './sections/Contact.jsx' +import Separator from './components/Separator/Separator'; // Import Separator -// App.jsx const App = () => { return (
@@ -15,13 +15,13 @@ const App = () => { + {/* Add the separator here */} -
); }; -export default App; +export default App; \ No newline at end of file diff --git a/src/components/Arrow/Arrow.css b/src/components/Arrow/Arrow.css index 94128945f9..d857f0ffee 100644 --- a/src/components/Arrow/Arrow.css +++ b/src/components/Arrow/Arrow.css @@ -1,17 +1,13 @@ .arrow-container { - position: absolute; /* ✅ Anchors arrow inside `.hero-container` */ - bottom: 63px; /* ✅ Positions arrow above the bottom */ - left: 50%; + position: absolute; /* Anchors arrow inside `.hero-container` */ + top: 849px; /* Positions arrow above the bottom */ + left: 50%; /* Center horizontally within its containing block */ transform: translateX(-50%); - text-align: center; - z-index: 10; /* ✅ Ensures arrow stays on top */ + z-index: 10; /* Ensures arrow stays on top */ } /* 🔹 Keep Sharp Edges */ .arrow-container svg { width: 27px; - height: 68px; /* ✅ Ensures a long vertical tail */ - fill: none; - stroke: #FF7D29; - stroke-width: 3px; + height: 68px; } \ No newline at end of file diff --git a/src/components/Arrow/Arrow.jsx b/src/components/Arrow/Arrow.jsx index f8ea8d85a4..96c291e8e8 100644 --- a/src/components/Arrow/Arrow.jsx +++ b/src/components/Arrow/Arrow.jsx @@ -1,12 +1,18 @@ -import React from "react"; +import React, { useState } from "react"; import "./Arrow.css"; +import arrowUp from "/assets/arrow_up.svg"; +import arrowDown from "/assets/arrow_down.svg"; const Arrow = () => { + const [isHovered, setIsHovered] = useState(false); + return ( -
- - - +
setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + > + Arrow
); }; diff --git a/src/components/Button/Button.css b/src/components/Button/Button.css index d88fbc3778..92c65c9cc8 100644 --- a/src/components/Button/Button.css +++ b/src/components/Button/Button.css @@ -1,36 +1,67 @@ +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap'); .custom-button { display: flex; align-items: center; - background-color: rgba(0, 0, 0, 0.1); /* Light grey */ + background-color: rgba(0, 0, 0, 0.1); color: black; - padding: 2px 24px 2px 0px; /* Adjust size */ - text-decoration: none; - border-radius: 50px; /* Rounded edges */ - font-weight: bold; + padding-right: 16px; + border-radius: 40px; /* Rounded edges */ + font-family: 'Montserrat', sans-serif; + font-size: 20px; + line-height: 24px; + font-weight: 600; + font-style: normal; + letter-spacing: 0px; transition: background 0.3s ease-in-out; } +.custom-button .svg-icon { + margin-right: 7px; /* Adjusted spacing */ +} + +.custom-button:hover .svg-icon { + filter: brightness(0) invert(1); /* Inverts colors, turning black to white */ +} + .custom-button:hover { - background-color: rgba(0, 0, 0, 0.2); /* Darker grey on hover */ + background-color: #0b24f5 !important; + color: white !important; } -.button-icon { - margin-right: 12px; /* Space between icon and text */ - font-size: 1.5em; + + +.blog .custom-button a { + text-decoration: none !important; } .blog .custom-button { background-color: white !important; color: black !important; - padding: 0px 18px 0px 4px; /* Adjust size */ } .blog .custom-button:hover { - background-color: #f4f4f4; + background-color: #ffd338 !important; + color: rgb(0, 0, 0) !important; +} + +.blog .custom-button:hover .svg-icon { + filter: none; /* Inverts colors, turning black to white */ +} + +/* Default state */ +.custom-button-code { + background-color: rgba(0, 0, 0, 0.1); + color: black; } -.blog .svg-icon { - transform: scale(0.9); /* ✅ Scales the SVG down to 80% */ - display: inline-block; - margin-right: 10px; + +/* Hover effect for "View the Code" button */ +.custom-button-code:hover { + background-color: #EB5577 !important; + color: white !important; +} + +/* Ensure the SVG icon also turns white */ +.custom-button-code:hover .svg-icon { + filter: brightness(0) invert(1); } \ No newline at end of file diff --git a/src/components/Button/Button.jsx b/src/components/Button/Button.jsx index 6dc1a7b97d..2101b9b026 100644 --- a/src/components/Button/Button.jsx +++ b/src/components/Button/Button.jsx @@ -5,9 +5,9 @@ const Button = ({ buttons = [] }) => { return ( <> {buttons.map((button, index) => ( - + {button.icon} - {button.text} {/* ✅ Uses `.p` from TextBox.css */} + {button.text} ))} diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index f7af2d1f36..d4e3c00f7a 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -3,10 +3,11 @@ display: grid; gap: 0px; align-items: center; - width: 100%; + width: 1044px; + height: 280px; padding: 0; + margin: 128px 234px 0px 234px; grid-column: 1 / span 7; /* Ensures each card takes a full row */ - margin-bottom: 88px; } .card-image { @@ -18,11 +19,11 @@ } .bordered-image { - max-width: 380px; + width: 408px; + height: 280px; + margin-right: 16px; object-fit:cover; - display: block; - padding: -10px; - + display: block; } /* 🔹 Text Content (Right Side) */ @@ -40,111 +41,90 @@ .icon-container { display: flex; flex-direction: row; - margin: 24px 0 0 24px; justify-content: flex-start; } .button-container { display: flex; flex-direction: row; - gap: 24px; + gap: 32px; margin-top: auto; - margin-left: 24px; justify-content: flex-start; } /* Blog section */ .blog-container { - grid-column: span 4; - display: contents; -} + display: grid; + grid-template-columns: repeat(2, 1fr); /* Two columns */ + margin: 0 234px 124px 234px; /* Apply desired padding */ + gap: 64px; + } + .blog-container .card { - grid-column: span 4; + grid-column: auto; display: flex; flex-direction: column; align-items: flex-start; - width: 100%; + margin: 0; + padding: 0; + width: 490px; + height: 739px; background: transparent; } /* 🔹 Ensure Images Are Uniform */ .blog-container .card-image { - width: 100%; + width: 490px; height: auto; + margin: 0; object-fit: cover; } .blog-container .bordered-image { - max-width: 100%; - object-fit:cover; + width: 490px; + height: 340px; + margin: 0; + object-fit: cover; display: block; } .blog-container .card-content { flex-grow: 1; - max-width: 80%; + margin: 0px; display: flex; flex-direction: column; text-align: left; justify-content: flex-start; align-items: flex-start; - gap: 4px; } .blog-container .button-container { display: flex; flex-direction: row; - gap: 24px; - margin-top: auto; - margin-left: 0px; justify-content: flex-start; + margin-top: 32px; } .date-container { font-weight: bold; font-size: 14px; color: black; - margin-top: 24px; /* ✅ Adds spacing before the title */ + margin-top: 32px; } /* Different border colors */ .peach { - border-bottom: 10px solid #FFC288; - border-left: 10px solid #FFC288; + border-bottom: 20px solid #FFC288; + border-left: 20px solid #FFC288; } .orange { - border-bottom: 10px solid #FF6701; - border-left: 10px solid #FF6701; + border-bottom: 20px solid #FF6701; + border-left: 20px solid #FF6701; } -@media (max-width: 1024px) { /* Tablets */ - .card { - grid-column: span 6; - } - - .blog-container { - grid-template-columns: repeat(1, 1fr); /* Stack blog posts */ - } -} - -@media (max-width: 768px) { /* Mobile */ - .card { - grid-column: span 8; - } - - .blog-container { - grid-template-columns: repeat(1, 1fr); /* Full width */ - } - - .button-container { - flex-direction: column; /* Stack buttons */ - align-items: center; - gap: 12px; - } -} \ No newline at end of file diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index fc45e909fd..814fa51d6d 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -40,14 +40,23 @@ export const Card = ({ borderColor, imageSource, cardTitle, cardDescription, sec {sectionType === "projects" ? (
); diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 2cbef8aeb1..012b07c0bf 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -5,15 +5,16 @@ .grid-section { display: grid; grid-template-columns: repeat(8, 1fr); - width: 1512px; - min-height: 980px; /* Allows it to expand beyond 980px */ + width: 100%; /* Fill available space */ + max-width: 1512px; /* But no more than 1512px */ + min-height: 980px; position: relative; - align-items: center; /* Align content to the top */ + align-items: center; margin: 0 auto; } .grid-section.hero { - padding: 332px 234px 331px 234px; + padding: 332px 0 331px 0; } .grid-section.card { @@ -62,3 +63,41 @@ background: #FF7D29; } +/* ------------------------------ + Responsive Breakpoints +------------------------------ */ + +/* For screens between 1280px and 1511px */ +@media screen and (max-width: 1511px) and (min-width: 1280px) { + + + .grid-section.hero { + padding: 332px 0 331px 0; + } + + } + + /* For screens between 744px and 1279px */ + @media screen and (max-width: 1279px) and (min-width: 744px) { + .grid-section { + min-height: 627px; + } + + .grid-section.hero { + padding: 128px 0 208px 0; + } + + } + + /* For screens between 375px and 743px */ + @media screen and (max-width: 743px) { + .grid-section { + min-height: 720px; + } + + .grid-section.hero { + + padding: 64px 0 132px 0; + } + } + From c454ded8ea1fc07e00e41ee0aecb7e486f69c848 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Wed, 19 Mar 2025 23:19:39 +0100 Subject: [PATCH 11/18] fixed responsiveness for tech page --- src/components/TextBox/TextBox.css | 56 ++++++++++++++++++++++++++---- src/sections/Tech.jsx | 4 +-- src/ui/Grid.css | 27 ++++++++++++-- 3 files changed, 77 insertions(+), 10 deletions(-) diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 7da5ed30be..b341ba0d02 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -58,22 +58,22 @@ /* Tech Section Heading */ .h1.tech { - grid-column: 1 / span 2; + grid-column: 1 ; color: white; - height: 98px; - width: 192px; - margin: 0 0 0 234px; + height: auto; + width: auto; + margin: 0; text-align: center; } .h3.tech { - grid-column: 3 / span 4; + grid-column: 2 ; color: white; width: 722px; height: auto; font-family: 'Hind', sans-serif; text-align: left; - margin: 0 0 0 124px; + margin: 0; align-self: center; } @@ -252,6 +252,14 @@ h3.skills-more { .hero-container { width: 958px; } + + .h1.tech { + margin: 0px; + } + + .h3.tech { + width: 636px; + } } @@ -277,6 +285,24 @@ h3.skills-more { margin: 0 0 32px 0 !important; } + .h1.tech { + grid-column: 4 /span 2 ; + width: 680px; + height: 68px; + padding: 0; + margin-bottom: 64px; + } + + .h3.tech { + grid-column: 4 /span 2 ; + margin:0; + line-height: 38px; + width: 680px; + height: auto; + margin: 0 auto; + text-align: center; + } + } /* For screens between 375px and 743px */ @@ -315,5 +341,23 @@ h3.skills-more { grid-column: span 8; } + .h1.tech { + grid-column: 4 /span 2 ; + width: auto; + height: 68px; + margin: 0 0 64px 0; + + padding: 0px; + } + + .h3.tech { + grid-column: 4 /span 2 ; + margin: 0; + width: 343px; + height: auto; + text-align: left; + font-size: 24px; + line-height: 38px; + } } diff --git a/src/sections/Tech.jsx b/src/sections/Tech.jsx index 9b625dd867..5d903d005a 100644 --- a/src/sections/Tech.jsx +++ b/src/sections/Tech.jsx @@ -3,9 +3,9 @@ import React from 'react'; import { Grid } from "../ui/Grid"; export const Tech = () => ( - + - + ) diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 012b07c0bf..0131fb00ca 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -17,6 +17,11 @@ padding: 332px 0 331px 0; } +.grid-section.tech { + gap: 124px; + padding: 0px 234px; /* Remove direct padding to avoid uneven shrink */ + } + .grid-section.card { grid-column: 1 / span 8; width: 100%; @@ -74,6 +79,12 @@ .grid-section.hero { padding: 332px 0 331px 0; } + + .grid-section.tech { + width: 1280px; + padding: 0 191px; + } + } @@ -86,7 +97,13 @@ .grid-section.hero { padding: 128px 0 208px 0; } - + + .grid-section.tech { + min-width: 745px; + height: 796px; + gap: 0; + padding: 256px 32px; + } } /* For screens between 375px and 743px */ @@ -96,8 +113,14 @@ } .grid-section.hero { - padding: 64px 0 132px 0; } + + .grid-section.tech { + min-width: 345px; + min-height: 360px !important; + gap: 0; + padding: 128px 16px; + } } From f82854e9e41a763218f9440f0a7e3338e9ca7234 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Thu, 20 Mar 2025 21:12:12 +0100 Subject: [PATCH 12/18] fixed responsiveness for projects page --- src/components/Button/Button.css | 3 +- src/components/Card/Card.css | 104 ++++++++++++++++++++++++- src/components/Separator/Separator.css | 13 ++++ src/components/TextBox/TextBox.css | 30 ++++++- src/sections/Projects.jsx | 2 +- src/ui/Grid.css | 22 ++++++ 6 files changed, 166 insertions(+), 8 deletions(-) diff --git a/src/components/Button/Button.css b/src/components/Button/Button.css index 92c65c9cc8..bb141605a3 100644 --- a/src/components/Button/Button.css +++ b/src/components/Button/Button.css @@ -13,6 +13,7 @@ font-weight: 600; font-style: normal; letter-spacing: 0px; + width: fit-content; transition: background 0.3s ease-in-out; } @@ -29,8 +30,6 @@ color: white !important; } - - .blog .custom-button a { text-decoration: none !important; } diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index d4e3c00f7a..7e16be38ef 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -1,13 +1,13 @@ .card { display: grid; - gap: 0px; align-items: center; width: 1044px; height: 280px; + gap: 16px; padding: 0; - margin: 128px 234px 0px 234px; - grid-column: 1 / span 7; /* Ensures each card takes a full row */ + margin: 0; + grid-column: 1 / span 8; /* Ensures each card takes a full row */ } .card-image { @@ -21,7 +21,6 @@ .bordered-image { width: 408px; height: 280px; - margin-right: 16px; object-fit:cover; display: block; } @@ -128,3 +127,100 @@ } +/* ------------------------------ + Responsive Breakpoints +------------------------------ */ + +/* For screens between 1280px and 1511px */ +@media screen and (max-width: 1511px) and (min-width: 1280px) { + .card { + width: 958px; + } + +} + +/* For screens between 744px and 1279px */ +@media screen and (max-width: 1279px) and (min-width: 744px) { + .card { + width: 680px; + gap: 37px; + margin: 0 auto; + } + + .card-image { + grid-column: 1 / span 3; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; /* ✅ Prevents border misalignment */ + } + + .bordered-image { + width: 200px; + } + + .peach { + border-bottom: 10px solid #FFC288; + border-left: 10px solid #FFC288; + } + + .orange { + border-bottom: 10px solid #FF6701; + border-left: 10px solid #FF6701; + } + +} + +/* For screens between 375px and 743px */ +@media screen and (max-width: 743px) { + .card { + width: 343px; + height: 590px; + display: flex; + flex-direction: column; /* 🔥 Stack items */ + align-items: center; + gap: 24px; /* Adjust spacing */ + margin: 0 auto; + } + + .card-image { + width: 100%; + display: flex; + justify-content: center; + } + + .bordered-image { + width: 100%; /* Makes sure image is responsive */ + height: 200px; /* Maintain aspect ratio */ + } + + .card-content { + width: 100%; + margin-bottom: 0; /* Remove extra space */ + text-align: center; /* Center content */ + align-items: center; + } + + .icon-container { + width: 100%; + } + + .button-container { + display: flex; + flex-direction: column; + gap: 16px; + margin-top: auto; + justify-content: flex-start; + width: 100%; + } + + .peach { + border-bottom: 10px solid #FFC288; + border-left: 10px solid #FFC288; + } + + .orange { + border-bottom: 10px solid #FF6701; + border-left: 10px solid #FF6701; + } +} \ No newline at end of file diff --git a/src/components/Separator/Separator.css b/src/components/Separator/Separator.css index 3ea6dff6ed..6942ef0b0e 100644 --- a/src/components/Separator/Separator.css +++ b/src/components/Separator/Separator.css @@ -26,4 +26,17 @@ margin-left: -15px; margin-bottom: -8px; flex-shrink: 0; +} + +@media screen and (max-width: 1279px) and (min-width: 744px) { + .separator-img { + margin-top: 128px; + } + +} + +@media screen and (max-width: 743px) { + .separator-img { + margin-top: 128px; + } } \ No newline at end of file diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index b341ba0d02..c36e2c9b0e 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -81,7 +81,7 @@ .h1.projects { width: 745px; height: 98px; - margin: 128px 0 0px 234px; + margin: 0; } .h3.projects { @@ -303,6 +303,13 @@ h3.skills-more { text-align: center; } + .h1.projects { + grid-column: 1 / span 8; + width: 680px; + height: 66px; + margin: 0 auto; + } + } /* For screens between 375px and 743px */ @@ -359,5 +366,26 @@ h3.skills-more { font-size: 24px; line-height: 38px; } + + .h1.projects { + font-size: 56px; + line-height: 66px; + width: 343px; + height: auto; + text-align: center; + margin: 0 auto; + padding: 0; + + } + + .h3.projects { + font-size: 24px; + line-height: 29px; + } + + .p.projects { + font-size: 16px; + line-height: 29px; + } } diff --git a/src/sections/Projects.jsx b/src/sections/Projects.jsx index 54175b323b..8e74333fa8 100644 --- a/src/sections/Projects.jsx +++ b/src/sections/Projects.jsx @@ -6,7 +6,7 @@ import TextBox from "../components/TextBox/TextBox"; export const Projects = () => { return ( - + Date: Thu, 20 Mar 2025 21:30:08 +0100 Subject: [PATCH 13/18] fixed responsiveness for tech page again --- src/components/TextBox/TextBox.css | 17 +++++++++-------- src/ui/Grid.css | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index c36e2c9b0e..83a32866ca 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -286,15 +286,17 @@ h3.skills-more { } .h1.tech { - grid-column: 4 /span 2 ; + grid-column: 1 /span 8 ; width: 680px; height: 68px; padding: 0; - margin-bottom: 64px; + margin: 0 auto 64px auto; + text-align: center; + align-items: center; } .h3.tech { - grid-column: 4 /span 2 ; + grid-column: 1 /span 8 ; margin:0; line-height: 38px; width: 680px; @@ -349,17 +351,16 @@ h3.skills-more { } .h1.tech { - grid-column: 4 /span 2 ; + grid-column: 1 /span 8 ; width: auto; height: 68px; - margin: 0 0 64px 0; - + margin: 0 auto 64px auto; padding: 0px; } .h3.tech { - grid-column: 4 /span 2 ; - margin: 0; + grid-column: 1 /span 8 ; + margin: 0 auto; width: 343px; height: auto; text-align: left; diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 66475c4a89..7cbbff5b6f 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -112,7 +112,7 @@ min-width: 745px; height: 796px; gap: 0; - padding: 256px 32px; + padding: 256px 4.297%; } .grid-section.projects { @@ -136,7 +136,7 @@ min-width: 345px; min-height: 360px !important; gap: 0; - padding: 128px 16px; + padding: 128px 4.27%; } .grid-section.projects { From d9354de160b18b96b572e0f0cc99a8049427eff6 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Fri, 21 Mar 2025 00:24:12 +0100 Subject: [PATCH 14/18] fixed responsiveness for blog page --- src/components/Card/Card.css | 92 ++++++++++++++++++++++++++++-- src/components/TextBox/TextBox.css | 29 +++++++++- src/sections/Blog.jsx | 4 +- src/ui/Grid.css | 20 ++++++- 4 files changed, 135 insertions(+), 10 deletions(-) diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index 7e16be38ef..d607928c74 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -55,8 +55,8 @@ .blog-container { display: grid; grid-template-columns: repeat(2, 1fr); /* Two columns */ - margin: 0 234px 124px 234px; /* Apply desired padding */ - gap: 64px; + margin: 0 auto 124px auto0; /* Apply desired padding */ + gap: 64px !important; } @@ -67,6 +67,7 @@ align-items: flex-start; margin: 0; padding: 0; + gap: 0; width: 490px; height: 739px; background: transparent; @@ -75,7 +76,7 @@ /* 🔹 Ensure Images Are Uniform */ .blog-container .card-image { width: 490px; - height: auto; + height: 340px; margin: 0; object-fit: cover; } @@ -85,12 +86,13 @@ height: 340px; margin: 0; object-fit: cover; + align-self: stretch; display: block; } .blog-container .card-content { flex-grow: 1; - margin: 0px; + margin: 0; display: flex; flex-direction: column; text-align: left; @@ -110,7 +112,7 @@ font-weight: bold; font-size: 14px; color: black; - margin-top: 32px; + margin: 32px 0 0 0; } @@ -135,8 +137,27 @@ @media screen and (max-width: 1511px) and (min-width: 1280px) { .card { width: 958px; - } + } + + .blog-container { + width: 958px; + } + .blog-container .card-content { + width: 447px; + } + + .blog-container .card { + width: 447px; + } + + .blog-container .bordered-image { + width: 447px; + } + .blog-container .card-image { + width: 447px; + } + } /* For screens between 744px and 1279px */ @@ -168,6 +189,30 @@ border-bottom: 10px solid #FF6701; border-left: 10px solid #FF6701; } + + .blog-container { + display: grid; + width: 680px; + grid-template-columns: repeat(1, 1fr); /* Two columns */ + margin: 0; /* Apply desired padding */ + gap: 64px !important; + } + + .blog-container .card-content { + width: 680px; + } + + .blog-container .card { + width: 680px; + height: 661px; + } + + .blog-container .bordered-image { + width: 680px; + } + .blog-container .card-image { + width: 680px; + } } @@ -223,4 +268,39 @@ border-bottom: 10px solid #FF6701; border-left: 10px solid #FF6701; } + + .blog-container { + display: grid; + width: 343px; + grid-template-columns: repeat(1, 1fr); /* Two columns */ + margin: 0; + gap: 64px !important; + } + + .blog-container .card-content { + width: 343px; + } + + .blog-container .card { + width: 680px; + height: 584px; + } + + .blog-container .bordered-image { + width: 343px; + height: 200px; + } + .blog-container .card-image { + width: 343px; + height: 200px; + } + + .date-container { + margin: 24px 0 0 0; + + } + + .blog-container .button-container { + margin-top: 24px; + } } \ No newline at end of file diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 83a32866ca..71b19b3ba7 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -100,8 +100,10 @@ } h1.blog { + grid-column: 1 / span 8; z-index: 1; - margin: 124px 234px 132px 234px; + text-align: left; + margin: 0; } h3.blog { @@ -261,6 +263,10 @@ h3.skills-more { width: 636px; } + .h1.blog { + width: 956px; + } + } /* For screens between 744px and 1279px */ @@ -312,6 +318,14 @@ h3.skills-more { margin: 0 auto; } + .h1.blog { + width: 680px; + } + + .h3.blog { + width: 332px; + } + } /* For screens between 375px and 743px */ @@ -389,4 +403,17 @@ h3.skills-more { line-height: 29px; } + .h1.blog { + font-size: 56px; + text-align: center; + line-height: 68px; + width: 343px; + } + + .h3.blog { + font-size: 24px; + line-height: 29px; + margin: 8px 0 24px 0; + } + } diff --git a/src/sections/Blog.jsx b/src/sections/Blog.jsx index 20f081005c..d6c065b64f 100644 --- a/src/sections/Blog.jsx +++ b/src/sections/Blog.jsx @@ -4,11 +4,11 @@ import TextBox from "../components/TextBox/TextBox"; export const Blog = () => { return ( - + {/* 🔹 Wrap all Cards inside a Two-Column Grid Container */} -
+
Date: Fri, 21 Mar 2025 21:01:00 +0100 Subject: [PATCH 15/18] fixed responsiveness for skills page and some on blog and projects fixes --- src/components/Card/Card.css | 12 ++-- src/components/TextBox/TextBox.css | 99 ++++++++++++++++++++++++++++++ src/ui/Grid.css | 13 ++-- 3 files changed, 116 insertions(+), 8 deletions(-) diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index d607928c74..cd213c93a6 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -219,7 +219,8 @@ /* For screens between 375px and 743px */ @media screen and (max-width: 743px) { .card { - width: 343px; + width: 100%; /* ✅ Full width of its container */ + max-width: 343px; /* ✅ Optional cap */ height: 590px; display: flex; flex-direction: column; /* 🔥 Stack items */ @@ -241,6 +242,7 @@ .card-content { width: 100%; + max-width: 343px; margin-bottom: 0; /* Remove extra space */ text-align: center; /* Center content */ align-items: center; @@ -271,7 +273,8 @@ .blog-container { display: grid; - width: 343px; + width: 100%; + max-width: 375px; grid-template-columns: repeat(1, 1fr); /* Two columns */ margin: 0; gap: 64px !important; @@ -282,8 +285,9 @@ } .blog-container .card { - width: 680px; - height: 584px; + width: 100%; /* ✅ Full width of its container */ + max-width: 343px; /* ✅ Optional cap */ + height: auto; } .blog-container .bordered-image { diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 71b19b3ba7..313b6086db 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -267,6 +267,11 @@ h3.skills-more { width: 956px; } + .skills-container { + width: 958px; + margin: 0 161px 128px 161px; + } + } /* For screens between 744px and 1279px */ @@ -326,6 +331,53 @@ h3.skills-more { width: 332px; } + .h1.skills { + margin: 128px 32px 64px 32px; + } + + .skills-container { + display: grid; + grid-template-columns: auto auto; /* Allows independent column sizing */ + gap: 64px; + justify-content: center; + width: 680px; + margin: 0 auto 148px auto; + } + + .skills-column { + width: auto; /* Allows each column to expand naturally */ + display: flex; + flex-direction: column; + align-items: flex-start; + text-align: left; + } + + /* First row */ + .skills-column:nth-child(1) { + grid-column: 1; + grid-row: 1; + } + + .skills-column:nth-child(2) { + grid-column: 2; + grid-row: 1; + } + + /* Second row */ + .skills-column:nth-child(3) { + grid-column: 1; + grid-row: 2; /* Moves this column to the second row */ + margin-left: -7px; + } + + .skills-column:nth-child(4) { + grid-column: 2; + grid-row: 2; /* Moves this column to the second row */ + margin-left: -23px; + } + + + } /* For screens between 375px and 743px */ @@ -416,4 +468,51 @@ h3.skills-more { margin: 8px 0 24px 0; } + .skills-container { + display: flex; + flex-direction: column; + gap: 64px; /* Matches your Figma spacing */ + align-items: center; /* Centers all content */ + justify-content: center; + width: 100%; + max-width: 343px; /* Ensures proper width */ + margin: 0 auto 157px auto; + } + + .skills-column { + width: 100%; + max-width: 343px; /* Ensure it matches container */ + text-align: center; /* Centers text */ + display: flex; + flex-direction: column; + align-items: center; /* Centers inside */ + } + + .h1.skills { + font-size: 56px; + line-height: 68px; + margin: 128px 16px 64px 16px; + } + + h3.skills-code { + font-size: 24px; + line-height: 29px; + } + + h3.toolbox{ + font-size: 24px; + line-height: 29px; + } + + h3.upcomming { + font-size: 24px; + line-height: 29px; + } + + h3.more { + font-size: 24px; + line-height: 29px; + } + + } diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 15fcb94900..78e905e529 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -152,15 +152,20 @@ } .grid-section.projects { - min-width: 375px; - padding: 128px 4.27% 0 4.27%; + width: 100%; + padding: 124px 16px 0 16px; /* exact version of 4.27% */ + box-sizing: border-box; /* 🔥 critical */ + margin: 0 auto; /* center the whole section */ gap: 64px; } .grid-section.blog{ - width: 375px; + width: 100%; + max-width: 375px; + padding: 124px 16px 128px 16px; /* exact version of 4.27% */ + box-sizing: border-box; /* 🔥 critical */ + margin: 0 auto; /* center the whole section */ gap: 64px; - padding: 124px 4.27% ; } } From c362d0253314610255272ed58a38031f824c3386 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Fri, 21 Mar 2025 23:42:16 +0100 Subject: [PATCH 16/18] fixed responsiveness for contact page --- src/components/ImageIcon/ImageIcon.css | 3 +-- src/components/TextBox/TextBox.css | 28 ++++++++++++++++++++----- src/sections/Hero.jsx | 4 ++-- src/sections/Tech.jsx | 2 +- src/ui/Grid.css | 29 +++++++++++++++++++++++--- 5 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/components/ImageIcon/ImageIcon.css b/src/components/ImageIcon/ImageIcon.css index e5c8552aa4..a6fd1f134f 100644 --- a/src/components/ImageIcon/ImageIcon.css +++ b/src/components/ImageIcon/ImageIcon.css @@ -3,7 +3,6 @@ justify-content: center; /* Centers the icons horizontally */ align-items: center; /* Centers vertically (if needed) */ gap: 32px; /* Adds spacing between each icon */ - margin: 64px 0 128px 0; /* Optional: Adjust top margin if needed */ } .image-icon { @@ -15,4 +14,4 @@ .image-icon:hover { filter: brightness(0); /* Turns black on hover */ -} \ No newline at end of file +} diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 313b6086db..2bc7f82bf8 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -195,7 +195,7 @@ h3.skills-more { text-align: center; justify-self: center; align-self: center; - margin: 128px 234px; + margin: 0 auto 0 auto; } .h3.contact { @@ -205,17 +205,22 @@ h3.skills-more { /* 🔹 Profile Section Centering */ .contact-info { - grid-column: 3 / span 4; display: flex; flex-direction: column; align-items: center; text-align: center; - margin: 0 0 128px 0; + width: 100%; + max-width: 680px; + height: auto; + margin: 0 auto; } -/* 🔹 Social Links */ .social-links { - margin: 56px 0 128px 0; + display: flex; + flex-direction: row; + gap: 32px; + justify-content: center; + margin: 56px 0 0 0 ; } @@ -272,6 +277,10 @@ h3.skills-more { margin: 0 161px 128px 161px; } + .ticker-tape { + margin-bottom: 4px; + } + } /* For screens between 744px and 1279px */ @@ -514,5 +523,14 @@ h3.skills-more { line-height: 29px; } + .h1.contact { + font-size: 56px; + line-height: 68px; + } + + .h3.contact { + font-size: 24px; + line-height: 29px; + } } diff --git a/src/sections/Hero.jsx b/src/sections/Hero.jsx index f03ef6382f..3fd87bf9f4 100644 --- a/src/sections/Hero.jsx +++ b/src/sections/Hero.jsx @@ -7,7 +7,7 @@ import Arrow from "../components/Arrow/Arrow"; const Hero = () => (
{/* Wrapper to set position */} - + ( /> diff --git a/src/sections/Tech.jsx b/src/sections/Tech.jsx index 5d903d005a..3476ad07e3 100644 --- a/src/sections/Tech.jsx +++ b/src/sections/Tech.jsx @@ -5,7 +5,7 @@ import { Grid } from "../ui/Grid"; export const Tech = () => ( - + ) diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 78e905e529..2736255d63 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -53,10 +53,16 @@ } .grid-section.contact { - - height: 1053px !important; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + min-height: 1053px !important; + box-sizing: border-box; /* ✅ Ensure consistent spacing */ + padding: 128px 234px; /* Standard padding */ + margin: 0 auto; + gap: 128px; } - /* Background Colors */ .blue-background { background: blue; @@ -100,6 +106,11 @@ width: 1280px; padding: 124px 12.569%; } + + .grid-section.contact { + padding: 128px 161px 128px 162px; + min-height: 1057px !important; + } } @@ -132,6 +143,12 @@ gap: 64px; } + .grid-section.contact { + padding: 128px 32px; + min-height: 929px !important; + gap: 64px; + } + } /* For screens between 375px and 743px */ @@ -167,5 +184,11 @@ margin: 0 auto; /* center the whole section */ gap: 64px; } + + .grid-section.contact { + padding: 128px 16px; + gap: 64px; + min-height: 1043px !important; + } } From 122fe78597438b52fea664c66df345b148997d9d Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sat, 22 Mar 2025 18:12:56 +0100 Subject: [PATCH 17/18] fixed final fixes --- src/components/Card/Card.css | 9 +++-- src/components/TextBox/TextBox.css | 14 +++++-- src/ui/Grid.css | 62 ++++++++++++++++++------------ 3 files changed, 52 insertions(+), 33 deletions(-) diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index cd213c93a6..fa983af57f 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -2,11 +2,12 @@ .card { display: grid; align-items: center; - width: 1044px; + width: 100%; + max-width: 1044px; height: 280px; gap: 16px; padding: 0; - margin: 0; + margin: 0 auto; grid-column: 1 / span 8; /* Ensures each card takes a full row */ } @@ -55,7 +56,7 @@ .blog-container { display: grid; grid-template-columns: repeat(2, 1fr); /* Two columns */ - margin: 0 auto 124px auto0; /* Apply desired padding */ + margin: 0 auto 124px auto; /* Apply desired padding */ gap: 64px !important; } @@ -136,7 +137,7 @@ /* For screens between 1280px and 1511px */ @media screen and (max-width: 1511px) and (min-width: 1280px) { .card { - width: 958px; + max-width: 958px; } .blog-container { diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 2bc7f82bf8..979f2159fc 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -79,9 +79,10 @@ } .h1.projects { - width: 745px; - height: 98px; - margin: 0; + width: 100%; /* ✅ Full width of its grid column */ + max-width: 1044px; /* ✅ Matches the card container */ + margin: 0 auto 0 auto; /* ✅ Centers it properly */ + text-align: left; /* ✅ Ensures text starts from the correct position */ } .h3.projects { @@ -267,6 +268,10 @@ h3.skills-more { .h3.tech { width: 636px; } + + .h1.projects { + max-width: 956px; + } .h1.blog { width: 956px; @@ -446,7 +451,8 @@ h3.skills-more { .h1.projects { font-size: 56px; line-height: 66px; - width: 343px; + width: 100%; + max-width: 343px; height: auto; text-align: center; margin: 0 auto; diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 2736255d63..27e4af2621 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -5,8 +5,8 @@ .grid-section { display: grid; grid-template-columns: repeat(8, 1fr); - width: 100%; /* Fill available space */ - max-width: 1512px; /* But no more than 1512px */ + width: 100%; + max-width: 1512px; min-height: 980px; position: relative; align-items: center; @@ -19,33 +19,40 @@ .grid-section.tech { gap: 124px; - padding: 0px 234px; /* Remove direct padding to avoid uneven shrink */ + padding: 0px 234px; } .grid-section.projects { + width: 100%; + max-width: 1512px; + box-sizing: border-box; padding: 128px 234px 0 234px; + margin: 0 auto; gap: 128px; } .grid-section.card { grid-column: 1 / span 8; width: 100%; - height: auto; /* Allow it to expand */ + height: auto; display: flex; - flex-wrap: wrap; /* Ensures cards flow properly */ - gap: 16px; /* Space between cards */ + flex-wrap: wrap; + gap: 16px; padding-left: 0; - overflow: visible; /* Ensures no hidden content */ + overflow: visible; } .grid-section.blog { - padding: 124px 234px; /* ✅ Keeps everything contained */ + width: 100%; + max-width: 1512px; + box-sizing: border-box; + padding: 124px 234px 128px 234px; + margin: 0 auto; gap: 132px; } -/* 🔹 Ensure Skills Section Uses Its Own Layout */ .grid-section.skills { - display: flex; /* ✅ Prevents `display: grid` from breaking layout */ + display: flex; flex-direction: column; align-items: center; justify-content: flex-start; @@ -58,8 +65,8 @@ align-items: center; justify-content: flex-start; min-height: 1053px !important; - box-sizing: border-box; /* ✅ Ensure consistent spacing */ - padding: 128px 234px; /* Standard padding */ + box-sizing: border-box; + padding: 128px 234px; margin: 0 auto; gap: 128px; } @@ -98,13 +105,14 @@ } .grid-section.projects { - min-width: 745px; - padding: 128px 12.569% 0 12.569%; + padding: 128px 161px 0 161px; + box-sizing: border-box; } .grid-section.blog{ width: 1280px; - padding: 124px 12.569%; + padding: 124px 161px 128px 161px; + box-sizing: border-box; } .grid-section.contact { @@ -132,14 +140,14 @@ } .grid-section.projects { - min-width: 745px; - padding: 128px 4.297% 0 4.297%; + padding: 128px 32px 0 32px; + box-sizing: border-box; gap: 64px; } .grid-section.blog{ width: 745px; - padding: 124px 4.297% ; + padding: 128px 32px; gap: 64px; } @@ -169,19 +177,23 @@ } .grid-section.projects { + display: flex; + flex-direction: column; + align-items: center; width: 100%; - padding: 124px 16px 0 16px; /* exact version of 4.27% */ - box-sizing: border-box; /* 🔥 critical */ - margin: 0 auto; /* center the whole section */ + min-width: 375px; + margin: 0 auto; + padding: 124px 16px 0 16px; + box-sizing: border-box; gap: 64px; - } + } .grid-section.blog{ width: 100%; max-width: 375px; - padding: 124px 16px 128px 16px; /* exact version of 4.27% */ - box-sizing: border-box; /* 🔥 critical */ - margin: 0 auto; /* center the whole section */ + padding: 128px 16px; + box-sizing: border-box; + margin: 0 auto; gap: 64px; } From 31e59442ed69afd4637941de43bc64c97a9ce289 Mon Sep 17 00:00:00 2001 From: FannyEste Date: Sat, 22 Mar 2025 18:26:09 +0100 Subject: [PATCH 18/18] cleaned up code --- README.md | 2 +- custom-images.md | 6 +- eslint.config.js | 34 +- instructions.md | 24 +- package-lock.json | 17 + package.json | 4 +- projects.json | 13 +- pull_request_template.md | 1 + skills.json | 8 +- src/App.css | 52 +- src/App.jsx | 42 +- src/components/Arrow/Arrow.css | 30 +- src/components/Arrow/Arrow.jsx | 18 +- src/components/Button/Button.css | 62 +-- src/components/Button/Button.jsx | 28 +- src/components/Card/Card.css | 487 +++++++++--------- src/components/Card/Card.jsx | 152 +++--- src/components/Header.jsx | 2 +- src/components/Icon/Icon.css | 26 +- src/components/Icon/Icon.jsx | 6 +- src/components/ImageIcon/ImageIcon.css | 18 +- src/components/ImageIcon/ImageIcon.jsx | 8 +- .../ProfilePicture/ProfilePicture.css | 25 +- .../ProfilePicture/ProfilePicture.jsx | 6 +- src/components/Separator/Separator.css | 51 +- src/components/Separator/Separator.jsx | 32 +- src/components/TextBox/TextBox.css | 117 ++--- src/components/TextBox/TextBox.jsx | 7 +- src/main.jsx | 10 +- src/sections/Blog.jsx | 86 ++-- src/sections/Contact.jsx | 71 +-- src/sections/Hero.jsx | 28 +- src/sections/Projects.jsx | 149 +++--- src/sections/Skills.jsx | 102 ++-- src/sections/Tech.jsx | 18 +- src/ui/Grid.css | 319 ++++++------ src/ui/Grid.jsx | 16 +- src/ui/Typography/Typography.css | 2 +- src/ui/Typography/Typography.jsx | 6 +- vite.config.js | 6 +- 40 files changed, 1076 insertions(+), 1015 deletions(-) diff --git a/README.md b/README.md index 0d5dcdaa10..dabdb9a44f 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Changing to try to re-commit \ No newline at end of file +Changing to try to re-commit diff --git a/custom-images.md b/custom-images.md index 21b4109f98..63ea4760a2 100644 --- a/custom-images.md +++ b/custom-images.md @@ -44,7 +44,9 @@ export const GithubRepos = () => { useEffect(() => { const fetchRepos = async () => { try { - const response = await fetch("https://api.github.com/users/YourGithubProfile/repos"); + const response = await fetch( + "https://api.github.com/users/YourGithubProfile/repos", + ); if (!response.ok) { throw new Error("Network response was not ok" + response.statusText); } @@ -53,7 +55,7 @@ useEffect(() => { } catch (error) { console.error( "There has been a problem with your fetch operation:", - error + error, ); } }; diff --git a/eslint.config.js b/eslint.config.js index 238d2e4e64..2cf9713fca 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,38 +1,38 @@ -import js from '@eslint/js' -import globals from 'globals' -import react from 'eslint-plugin-react' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' +import js from "@eslint/js"; +import globals from "globals"; +import react from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; export default [ - { ignores: ['dist'] }, + { ignores: ["dist"] }, { - files: ['**/*.{js,jsx}'], + files: ["**/*.{js,jsx}"], languageOptions: { ecmaVersion: 2020, globals: globals.browser, parserOptions: { - ecmaVersion: 'latest', + ecmaVersion: "latest", ecmaFeatures: { jsx: true }, - sourceType: 'module', + sourceType: "module", }, }, - settings: { react: { version: '18.3' } }, + settings: { react: { version: "18.3" } }, plugins: { react, - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, + "react-hooks": reactHooks, + "react-refresh": reactRefresh, }, rules: { ...js.configs.recommended.rules, ...react.configs.recommended.rules, - ...react.configs['jsx-runtime'].rules, + ...react.configs["jsx-runtime"].rules, ...reactHooks.configs.recommended.rules, - 'react/jsx-no-target-blank': 'off', - 'react-refresh/only-export-components': [ - 'warn', + "react/jsx-no-target-blank": "off", + "react-refresh/only-export-components": [ + "warn", { allowConstantExport: true }, ], }, }, -] +]; diff --git a/instructions.md b/instructions.md index a5036a5343..720092287f 100644 --- a/instructions.md +++ b/instructions.md @@ -18,7 +18,7 @@ If you work as a designer and really dislike our designs, you could pitch to us ### **Top section** -This is where you sell in your new self. You're happy to combine your previous experience with your new Frontend skills or use this area to describe yourself and how you see your future role. Either you do something like "Web dev + design" or more of a sentence like; "Web developer with a background in communications". Or if you don't see yourself as a Frontend Developer in the future, maybe you want to write something like; "Project manager with coding skills". It's your portfolio. Add a photo of yourself and summarise what you have been doing in the past and what you want to do in the future. This gives the reader an idea of who you are. Keep it short and personal. +This is where you sell in your new self. You're happy to combine your previous experience with your new Frontend skills or use this area to describe yourself and how you see your future role. Either you do something like "Web dev + design" or more of a sentence like; "Web developer with a background in communications". Or if you don't see yourself as a Frontend Developer in the future, maybe you want to write something like; "Project manager with coding skills". It's your portfolio. Add a photo of yourself and summarise what you have been doing in the past and what you want to do in the future. This gives the reader an idea of who you are. Keep it short and personal. ### **Tech section** @@ -36,11 +36,11 @@ During the career program, you will be asked to post reflections on LinkedIn con ### **Skills** -Place ALL your skills here. Feel free to add tech skills that are not in the course but things you have knowledge of from before. In the other columns, place everything that you think will be useful for a tech job. Softwares that you know, methodologies, leadership frameworks and basically whatever. +Place ALL your skills here. Feel free to add tech skills that are not in the course but things you have knowledge of from before. In the other columns, place everything that you think will be useful for a tech job. Softwares that you know, methodologies, leadership frameworks and basically whatever. ### **Time to talk** -Make it super clear how a person can contact you. Again, add the social media links that *you* are using. +Make it super clear how a person can contact you. Again, add the social media links that _you_ are using. ## Tips on how to work with this project @@ -60,17 +60,17 @@ To use the icons from the design, simply mark the icon you want to export and sa - Your portfolio should have components and props - Your portfolio should contain: - - A picture of you. - - A presentation of your tech skills. - - A presentation of your projects linking to GitHub and Netlify. - - A presentation of some thoughts that you have around code. - - A clear way to get in contact with you. + - A picture of you. + - A presentation of your tech skills. + - A presentation of your projects linking to GitHub and Netlify. + - A presentation of some thoughts that you have around code. + - A clear way to get in contact with you. - Your portfolio should follow the design as closely as possible - Your portfolio should be responsive (it should look good on devices from 320px width up to 1600px) - Your portfolio should be following accessibility guidelines to ensure your website is usable by a diverse range of users: - - You should have a score of at least 95 in [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview) - - All images should have alt attributes and proper sizes - - All contrasts should be OK + - You should have a score of at least 95 in [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview) + - All images should have alt attributes and proper sizes + - All contrasts should be OK - Follow the guidelines on how to write clean code ## Stretch goals @@ -85,4 +85,4 @@ To use the icons from the design, simply mark the icon you want to export and sa - Give your portfolio a custom domain and connect to your deployed site. [Read more](https://docs.netlify.com/domains-https/custom-domains/). - Utilise the GitHub API to fetch your public projects from your GitHub account, ensuring your portfolio stays up-to-date with your latest work. - - Use the following URL link [**https://api.github.com/users/YourGitHubProfile/repos**] as an example. Replace "YourGitHubProfile" with your actual GitHub profile name to fetch your repository data. Example: [Technigo GitHub profile](https://api.github.com/users/Technigo/repos) + - Use the following URL link [**https://api.github.com/users/YourGitHubProfile/repos**] as an example. Replace "YourGitHubProfile" with your actual GitHub profile name to fetch your repository data. Example: [Technigo GitHub profile](https://api.github.com/users/Technigo/repos) diff --git a/package-lock.json b/package-lock.json index d2f67b86ed..a3ca5eed23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.14", "globals": "^15.11.0", + "prettier": "^3.5.3", "vite": "^5.4.10" } }, @@ -3680,6 +3681,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", diff --git a/package.json b/package.json index 32321f8052..ea5a986e0a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "vite build", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview", + "format": "prettier --write ." }, "dependencies": { "react": "^18.3.1", @@ -24,6 +25,7 @@ "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.14", "globals": "^15.11.0", + "prettier": "^3.5.3", "vite": "^5.4.10" } } diff --git a/projects.json b/projects.json index 993edfcaa6..201205c51a 100644 --- a/projects.json +++ b/projects.json @@ -3,23 +3,14 @@ { "name": "Chatbot", "image": "https://images.unsplash.com/photo-1557008075-7f2c5efa4cfd?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2497&q=80", - "tags": [ - "HTML5", - "CSS3", - "JavaScript" - ], + "tags": ["HTML5", "CSS3", "JavaScript"], "netlify": "link", "github": "link" }, { "name": "Weather app", "image": "https://images.unsplash.com/photo-1520792532857-293bd046307a?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2370&q=80", - "tags": [ - "HTML5", - "CSS3", - "JavaScript", - "APIs" - ], + "tags": ["HTML5", "CSS3", "JavaScript", "APIs"], "netlify": "link", "github": "link" } diff --git a/pull_request_template.md b/pull_request_template.md index 70fa177f7a..6344a733ef 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -1,3 +1,4 @@ ## Netlify link + Add your Netlify link here. PS. Don't forget to add it in your readme as well. diff --git a/skills.json b/skills.json index a209a705c2..285368b86a 100644 --- a/skills.json +++ b/skills.json @@ -1,7 +1 @@ -[ - "JavaScript", - "React", - "Node.js", - "CSS", - "HTML" -] +["JavaScript", "React", "Node.js", "CSS", "HTML"] diff --git a/src/App.css b/src/App.css index 75c5681f08..9090ef23ff 100644 --- a/src/App.css +++ b/src/App.css @@ -1,37 +1,41 @@ * { - box-sizing: border-box; - font-family: "Montserrat"; + box-sizing: border-box; + font-family: "Montserrat"; } :root { - font-family: inter, system-ui, Aveir Arial, Helvetica, sans-serif; - line-height: 1.5; - font-weight: 400; - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - margin: 0; + font-family: + inter, + system-ui, + Aveir Arial, + Helvetica, + sans-serif; + line-height: 1.5; + font-weight: 400; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin: 0; - /* COLORS */ - --color-primary: #FFC288; - --color-secondary: #FF6701; - --color-neutral: #FCECDD; + /* COLORS */ + --color-primary: #ffc288; + --color-secondary: #ff6701; + --color-neutral: #fcecdd; } - - /* 🔹 Remove Any Remaining Margins */ -html, body { - margin: 0; - padding: 0; - width: 100vw; /* ✅ Ensures full width */ - height: 100vh; /* ✅ Ensures full height */ - overflow-x: hidden; /* ✅ Prevents unwanted horizontal scrolling */ +html, +body { + margin: 0; + padding: 0; + width: 100vw; /* ✅ Ensures full width */ + height: 100vh; /* ✅ Ensures full height */ + overflow-x: hidden; /* ✅ Prevents unwanted horizontal scrolling */ } /* 🔹 Remove Padding From `main` */ main { - min-height: 100vh; - padding: 0; /* ✅ Removes extra padding */ + min-height: 100vh; + padding: 0; /* ✅ Removes extra padding */ } diff --git a/src/App.jsx b/src/App.jsx index 3421a3cd97..dca217421e 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,27 +1,27 @@ -import React from 'react' -import './App.css' -import { Blog } from "./sections/Blog.jsx" -import { Projects } from "./sections/Projects.jsx" -import Hero from "./sections/Hero.jsx" +import React from "react"; +import "./App.css"; +import { Blog } from "./sections/Blog.jsx"; +import { Projects } from "./sections/Projects.jsx"; +import Hero from "./sections/Hero.jsx"; import Skills from "./sections/Skills.jsx"; import Tech from "./sections/Tech.jsx"; -import Contact from './sections/Contact.jsx' -import Separator from './components/Separator/Separator'; // Import Separator +import Contact from "./sections/Contact.jsx"; +import Separator from "./components/Separator/Separator"; // Import Separator const App = () => { - return ( -
-
- - - - {/* Add the separator here */} - - - -
-
- ); + return ( +
+
+ + + + {/* Add the separator here */} + + + +
+
+ ); }; -export default App; \ No newline at end of file +export default App; diff --git a/src/components/Arrow/Arrow.css b/src/components/Arrow/Arrow.css index dc81bed17f..9e1c23baa0 100644 --- a/src/components/Arrow/Arrow.css +++ b/src/components/Arrow/Arrow.css @@ -1,27 +1,25 @@ .arrow-container { - position: absolute; /* Anchors arrow inside `.hero-container` */ - top: 849px; /* Positions arrow above the bottom */ - left: 50%; /* Center horizontally within its containing block */ - transform: translateX(-50%); - z-index: 10; /* Ensures arrow stays on top */ - + position: absolute; /* Anchors arrow inside `.hero-container` */ + top: 849px; /* Positions arrow above the bottom */ + left: 50%; /* Center horizontally within its containing block */ + transform: translateX(-50%); + z-index: 10; /* Ensures arrow stays on top */ } /* 🔹 Keep Sharp Edges */ .arrow-container svg { - width: 27px; - height: 68px; + width: 27px; + height: 68px; } - @media screen and (max-width: 1279px) and (min-width: 744px) { - .arrow-container { - top: 559px; - } + .arrow-container { + top: 559px; + } } @media screen and (max-width: 743px) { - .arrow-container { - top: 588px; - } - } \ No newline at end of file + .arrow-container { + top: 588px; + } +} diff --git a/src/components/Arrow/Arrow.jsx b/src/components/Arrow/Arrow.jsx index 96c291e8e8..fcbcd67664 100644 --- a/src/components/Arrow/Arrow.jsx +++ b/src/components/Arrow/Arrow.jsx @@ -1,20 +1,24 @@ import React, { useState } from "react"; import "./Arrow.css"; -import arrowUp from "/assets/arrow_up.svg"; -import arrowDown from "/assets/arrow_down.svg"; +import arrowUp from "/assets/arrow_up.svg"; +import arrowDown from "/assets/arrow_down.svg"; const Arrow = () => { const [isHovered, setIsHovered] = useState(false); return ( -
setIsHovered(true)} - onMouseLeave={() => setIsHovered(false)} + onMouseEnter={() => setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} > - Arrow + Arrow
); }; -export default Arrow; \ No newline at end of file +export default Arrow; diff --git a/src/components/Button/Button.css b/src/components/Button/Button.css index bb141605a3..d45ae04de7 100644 --- a/src/components/Button/Button.css +++ b/src/components/Button/Button.css @@ -1,66 +1,66 @@ -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap'); +@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap"); .custom-button { - display: flex; - align-items: center; - background-color: rgba(0, 0, 0, 0.1); - color: black; - padding-right: 16px; - border-radius: 40px; /* Rounded edges */ - font-family: 'Montserrat', sans-serif; - font-size: 20px; - line-height: 24px; - font-weight: 600; - font-style: normal; - letter-spacing: 0px; - width: fit-content; - transition: background 0.3s ease-in-out; + display: flex; + align-items: center; + background-color: rgba(0, 0, 0, 0.1); + color: black; + padding-right: 16px; + border-radius: 40px; /* Rounded edges */ + font-family: "Montserrat", sans-serif; + font-size: 20px; + line-height: 24px; + font-weight: 600; + font-style: normal; + letter-spacing: 0px; + width: fit-content; + transition: background 0.3s ease-in-out; } .custom-button .svg-icon { - margin-right: 7px; /* Adjusted spacing */ + margin-right: 7px; /* Adjusted spacing */ } .custom-button:hover .svg-icon { - filter: brightness(0) invert(1); /* Inverts colors, turning black to white */ + filter: brightness(0) invert(1); /* Inverts colors, turning black to white */ } .custom-button:hover { - background-color: #0b24f5 !important; - color: white !important; + background-color: #0b24f5 !important; + color: white !important; } .blog .custom-button a { - text-decoration: none !important; + text-decoration: none !important; } .blog .custom-button { - background-color: white !important; - color: black !important; + background-color: white !important; + color: black !important; } .blog .custom-button:hover { - background-color: #ffd338 !important; - color: rgb(0, 0, 0) !important; + background-color: #ffd338 !important; + color: rgb(0, 0, 0) !important; } .blog .custom-button:hover .svg-icon { - filter: none; /* Inverts colors, turning black to white */ + filter: none; /* Inverts colors, turning black to white */ } /* Default state */ .custom-button-code { - background-color: rgba(0, 0, 0, 0.1); - color: black; + background-color: rgba(0, 0, 0, 0.1); + color: black; } /* Hover effect for "View the Code" button */ .custom-button-code:hover { - background-color: #EB5577 !important; - color: white !important; + background-color: #eb5577 !important; + color: white !important; } /* Ensure the SVG icon also turns white */ .custom-button-code:hover .svg-icon { - filter: brightness(0) invert(1); -} \ No newline at end of file + filter: brightness(0) invert(1); +} diff --git a/src/components/Button/Button.jsx b/src/components/Button/Button.jsx index 2101b9b026..af766a5494 100644 --- a/src/components/Button/Button.jsx +++ b/src/components/Button/Button.jsx @@ -2,16 +2,22 @@ import React from "react"; import "./Button.css"; const Button = ({ buttons = [] }) => { - return ( - <> - {buttons.map((button, index) => ( - - {button.icon} - {button.text} - - ))} - - ); + return ( + <> + {buttons.map((button, index) => ( + + {button.icon} + {button.text} + + ))} + + ); }; -export default Button; \ No newline at end of file +export default Button; diff --git a/src/components/Card/Card.css b/src/components/Card/Card.css index fa983af57f..5c6ed17c1c 100644 --- a/src/components/Card/Card.css +++ b/src/components/Card/Card.css @@ -1,311 +1,302 @@ - .card { - display: grid; - align-items: center; - width: 100%; - max-width: 1044px; - height: 280px; - gap: 16px; - padding: 0; - margin: 0 auto; - grid-column: 1 / span 8; /* Ensures each card takes a full row */ + display: grid; + align-items: center; + width: 100%; + max-width: 1044px; + height: 280px; + gap: 16px; + padding: 0; + margin: 0 auto; + grid-column: 1 / span 8; /* Ensures each card takes a full row */ } .card-image { - grid-column: 1 / span 3; - display: flex; - justify-content: flex-start; - align-items: center; - box-sizing: border-box; /* ✅ Prevents border misalignment */ + grid-column: 1 / span 3; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; /* ✅ Prevents border misalignment */ } .bordered-image { - width: 408px; - height: 280px; - object-fit:cover; - display: block; + width: 408px; + height: 280px; + object-fit: cover; + display: block; } /* 🔹 Text Content (Right Side) */ .card-content { - grid-column: 4 / span 4; /* Ensures text spans the last 4 columns */ - display: flex; - flex-direction: column; - text-align: left; - height: 100%; - justify-content: flex-start; /* 🔥 Ensures text starts at the top */ - align-items: flex-start; /* 🔥 Aligns items to the left */ - + grid-column: 4 / span 4; /* Ensures text spans the last 4 columns */ + display: flex; + flex-direction: column; + text-align: left; + height: 100%; + justify-content: flex-start; /* 🔥 Ensures text starts at the top */ + align-items: flex-start; /* 🔥 Aligns items to the left */ } .icon-container { - display: flex; - flex-direction: row; - justify-content: flex-start; + display: flex; + flex-direction: row; + justify-content: flex-start; } .button-container { - display: flex; - flex-direction: row; - gap: 32px; - margin-top: auto; - justify-content: flex-start; + display: flex; + flex-direction: row; + gap: 32px; + margin-top: auto; + justify-content: flex-start; } /* Blog section */ .blog-container { - display: grid; - grid-template-columns: repeat(2, 1fr); /* Two columns */ - margin: 0 auto 124px auto; /* Apply desired padding */ - gap: 64px !important; - } - + display: grid; + grid-template-columns: repeat(2, 1fr); /* Two columns */ + margin: 0 auto 124px auto; /* Apply desired padding */ + gap: 64px !important; +} .blog-container .card { - grid-column: auto; - display: flex; - flex-direction: column; - align-items: flex-start; - margin: 0; - padding: 0; - gap: 0; - width: 490px; - height: 739px; - background: transparent; + grid-column: auto; + display: flex; + flex-direction: column; + align-items: flex-start; + margin: 0; + padding: 0; + gap: 0; + width: 490px; + height: 739px; + background: transparent; } /* 🔹 Ensure Images Are Uniform */ .blog-container .card-image { - width: 490px; - height: 340px; - margin: 0; - object-fit: cover; + width: 490px; + height: 340px; + margin: 0; + object-fit: cover; } .blog-container .bordered-image { - width: 490px; - height: 340px; - margin: 0; - object-fit: cover; - align-self: stretch; - display: block; + width: 490px; + height: 340px; + margin: 0; + object-fit: cover; + align-self: stretch; + display: block; } .blog-container .card-content { - flex-grow: 1; - margin: 0; - display: flex; - flex-direction: column; - text-align: left; - justify-content: flex-start; - align-items: flex-start; - + flex-grow: 1; + margin: 0; + display: flex; + flex-direction: column; + text-align: left; + justify-content: flex-start; + align-items: flex-start; } .blog-container .button-container { - display: flex; - flex-direction: row; - justify-content: flex-start; - margin-top: 32px; + display: flex; + flex-direction: row; + justify-content: flex-start; + margin-top: 32px; } .date-container { - font-weight: bold; - font-size: 14px; - color: black; - margin: 32px 0 0 0; - + font-weight: bold; + font-size: 14px; + color: black; + margin: 32px 0 0 0; } /* Different border colors */ .peach { - border-bottom: 20px solid #FFC288; - border-left: 20px solid #FFC288; + border-bottom: 20px solid #ffc288; + border-left: 20px solid #ffc288; } .orange { - border-bottom: 20px solid #FF6701; - border-left: 20px solid #FF6701; + border-bottom: 20px solid #ff6701; + border-left: 20px solid #ff6701; } - /* ------------------------------ Responsive Breakpoints ------------------------------ */ /* For screens between 1280px and 1511px */ @media screen and (max-width: 1511px) and (min-width: 1280px) { - .card { - max-width: 958px; - } - - .blog-container { - width: 958px; - } - - .blog-container .card-content { - width: 447px; - } - - .blog-container .card { - width: 447px; - } - - .blog-container .bordered-image { - width: 447px; - } - .blog-container .card-image { - width: 447px; - } + .card { + max-width: 958px; + } + + .blog-container { + width: 958px; + } + + .blog-container .card-content { + width: 447px; + } + + .blog-container .card { + width: 447px; + } + .blog-container .bordered-image { + width: 447px; + } + .blog-container .card-image { + width: 447px; + } } /* For screens between 744px and 1279px */ @media screen and (max-width: 1279px) and (min-width: 744px) { - .card { - width: 680px; - gap: 37px; - margin: 0 auto; - } - - .card-image { - grid-column: 1 / span 3; - display: flex; - justify-content: flex-start; - align-items: center; - box-sizing: border-box; /* ✅ Prevents border misalignment */ - } - - .bordered-image { - width: 200px; - } - - .peach { - border-bottom: 10px solid #FFC288; - border-left: 10px solid #FFC288; - } - - .orange { - border-bottom: 10px solid #FF6701; - border-left: 10px solid #FF6701; - } - - .blog-container { - display: grid; - width: 680px; - grid-template-columns: repeat(1, 1fr); /* Two columns */ - margin: 0; /* Apply desired padding */ - gap: 64px !important; - } - - .blog-container .card-content { - width: 680px; - } - - .blog-container .card { - width: 680px; - height: 661px; - } - - .blog-container .bordered-image { - width: 680px; - } - .blog-container .card-image { - width: 680px; - } - + .card { + width: 680px; + gap: 37px; + margin: 0 auto; + } + + .card-image { + grid-column: 1 / span 3; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; /* ✅ Prevents border misalignment */ + } + + .bordered-image { + width: 200px; + } + + .peach { + border-bottom: 10px solid #ffc288; + border-left: 10px solid #ffc288; + } + + .orange { + border-bottom: 10px solid #ff6701; + border-left: 10px solid #ff6701; + } + + .blog-container { + display: grid; + width: 680px; + grid-template-columns: repeat(1, 1fr); /* Two columns */ + margin: 0; /* Apply desired padding */ + gap: 64px !important; + } + + .blog-container .card-content { + width: 680px; + } + + .blog-container .card { + width: 680px; + height: 661px; + } + + .blog-container .bordered-image { + width: 680px; + } + .blog-container .card-image { + width: 680px; + } } - + /* For screens between 375px and 743px */ @media screen and (max-width: 743px) { - .card { - width: 100%; /* ✅ Full width of its container */ - max-width: 343px; /* ✅ Optional cap */ - height: 590px; - display: flex; - flex-direction: column; /* 🔥 Stack items */ - align-items: center; - gap: 24px; /* Adjust spacing */ - margin: 0 auto; - } - - .card-image { - width: 100%; - display: flex; - justify-content: center; - } - - .bordered-image { - width: 100%; /* Makes sure image is responsive */ - height: 200px; /* Maintain aspect ratio */ - } - - .card-content { - width: 100%; - max-width: 343px; - margin-bottom: 0; /* Remove extra space */ - text-align: center; /* Center content */ - align-items: center; - } - - .icon-container { - width: 100%; - } - - .button-container { - display: flex; - flex-direction: column; - gap: 16px; - margin-top: auto; - justify-content: flex-start; - width: 100%; - } - - .peach { - border-bottom: 10px solid #FFC288; - border-left: 10px solid #FFC288; - } - - .orange { - border-bottom: 10px solid #FF6701; - border-left: 10px solid #FF6701; - } - - .blog-container { - display: grid; - width: 100%; - max-width: 375px; - grid-template-columns: repeat(1, 1fr); /* Two columns */ - margin: 0; - gap: 64px !important; - } - - .blog-container .card-content { - width: 343px; - } - - .blog-container .card { - width: 100%; /* ✅ Full width of its container */ - max-width: 343px; /* ✅ Optional cap */ - height: auto; - } - - .blog-container .bordered-image { - width: 343px; - height: 200px; - } - .blog-container .card-image { - width: 343px; - height: 200px; - } - - .date-container { - margin: 24px 0 0 0; - - } - - .blog-container .button-container { - margin-top: 24px; - } -} \ No newline at end of file + .card { + width: 100%; /* ✅ Full width of its container */ + max-width: 343px; /* ✅ Optional cap */ + height: 590px; + display: flex; + flex-direction: column; /* 🔥 Stack items */ + align-items: center; + gap: 24px; /* Adjust spacing */ + margin: 0 auto; + } + + .card-image { + width: 100%; + display: flex; + justify-content: center; + } + + .bordered-image { + width: 100%; /* Makes sure image is responsive */ + height: 200px; /* Maintain aspect ratio */ + } + + .card-content { + width: 100%; + max-width: 343px; + margin-bottom: 0; /* Remove extra space */ + text-align: center; /* Center content */ + align-items: center; + } + + .icon-container { + width: 100%; + } + + .button-container { + display: flex; + flex-direction: column; + gap: 16px; + margin-top: auto; + justify-content: flex-start; + width: 100%; + } + + .peach { + border-bottom: 10px solid #ffc288; + border-left: 10px solid #ffc288; + } + + .orange { + border-bottom: 10px solid #ff6701; + border-left: 10px solid #ff6701; + } + + .blog-container { + display: grid; + width: 100%; + max-width: 375px; + grid-template-columns: repeat(1, 1fr); /* Two columns */ + margin: 0; + gap: 64px !important; + } + + .blog-container .card-content { + width: 343px; + } + + .blog-container .card { + width: 100%; /* ✅ Full width of its container */ + max-width: 343px; /* ✅ Optional cap */ + height: auto; + } + + .blog-container .bordered-image { + width: 343px; + height: 200px; + } + .blog-container .card-image { + width: 343px; + height: 200px; + } + + .date-container { + margin: 24px 0 0 0; + } + + .blog-container .button-container { + margin-top: 24px; + } +} diff --git a/src/components/Card/Card.jsx b/src/components/Card/Card.jsx index 814fa51d6d..326efa531e 100644 --- a/src/components/Card/Card.jsx +++ b/src/components/Card/Card.jsx @@ -1,67 +1,103 @@ import "./Card.css"; -import TextBox from "../TextBox/TextBox"; -import Icon from "../Icon/Icon"; -import livedemoIcon from "/assets/livedemo.svg"; +import TextBox from "../TextBox/TextBox"; +import Icon from "../Icon/Icon"; +import livedemoIcon from "/assets/livedemo.svg"; import githubIcon from "/assets/github.svg"; import docIcon from "/assets/Doc.svg"; import Button from "../Button/Button"; +export const Card = ({ + borderColor, + imageSource, + cardTitle, + cardDescription, + sectionType, + icons = [], + liveDemo, + repoLink, + date, +}) => { + return ( +
+
+ Project Visual +
-export const Card = ({ borderColor, imageSource, cardTitle, cardDescription, sectionType, icons = [], liveDemo, repoLink, date }) => { - return ( -
- -
- Project Visual -
+
+ {/* 🔹 Move Date Above the Title */} + {date && ( +
+ {" "} + {/* ✅ Adds `.p` class to match text style */} + {" "} + {/* ✅ Ensures text follows `.p` style */} +
+ )} -
- {/* 🔹 Move Date Above the Title */} - {date && ( -
{/* ✅ Adds `.p` class to match text style */} - {/* ✅ Ensures text follows `.p` style */} -
- )} + + - - + {/* 🔹 Tech Icons Below Description */} + {icons.length > 0 && ( +
+ {icons.map((icon, index) => ( + + ))} +
+ )} - {/* 🔹 Tech Icons Below Description */} - {icons.length > 0 && ( -
- {icons.map((icon, index) => ( - - ))} -
- )} - - {/* 🔹 Conditional Button Rendering */} -
- {sectionType === "projects" ? ( -
-
-
- ); -}; \ No newline at end of file + {/* 🔹 Conditional Button Rendering */} +
+ {sectionType === "projects" ? ( +
+
+ + ); +}; diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 4fb92ce40c..1fc75076d5 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React from "react"; const Header = ({ text }) => { return

{text}

; diff --git a/src/components/Icon/Icon.css b/src/components/Icon/Icon.css index c388954f3d..3169b81bc5 100644 --- a/src/components/Icon/Icon.css +++ b/src/components/Icon/Icon.css @@ -1,15 +1,15 @@ -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap'); +@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap"); .icon { - background-color: black; /* 🔥 Black background */ - color: white; /* 🔥 White text */ - padding: 2px 6px; /* ✅ Wider buttons */ - text-align: center; - font-family: 'Montserrat', sans-serif; - font-size: 16px; - line-height: 20px; - font-weight:600; - display: inline-block; /* 🔥 Ensures alignment in a row */ - min-width: fit-content; /* 🔥 Ensures width matches text */ - margin-right: 4px; /* ✅ Less space between buttons */ -} \ No newline at end of file + background-color: black; /* 🔥 Black background */ + color: white; /* 🔥 White text */ + padding: 2px 6px; /* ✅ Wider buttons */ + text-align: center; + font-family: "Montserrat", sans-serif; + font-size: 16px; + line-height: 20px; + font-weight: 600; + display: inline-block; /* 🔥 Ensures alignment in a row */ + min-width: fit-content; /* 🔥 Ensures width matches text */ + margin-right: 4px; /* ✅ Less space between buttons */ +} diff --git a/src/components/Icon/Icon.jsx b/src/components/Icon/Icon.jsx index ffa0e1bcf9..68b4e8f701 100644 --- a/src/components/Icon/Icon.jsx +++ b/src/components/Icon/Icon.jsx @@ -1,9 +1,9 @@ import "./Icon.css"; const Icon = ({ text }) => { - if (!text) return null; + if (!text) return null; - return
{text}
; + return
{text}
; }; -export default Icon; \ No newline at end of file +export default Icon; diff --git a/src/components/ImageIcon/ImageIcon.css b/src/components/ImageIcon/ImageIcon.css index a6fd1f134f..f178bcd7d3 100644 --- a/src/components/ImageIcon/ImageIcon.css +++ b/src/components/ImageIcon/ImageIcon.css @@ -1,17 +1,17 @@ .social-links { - display: flex; /* Enables flexible row layout */ - justify-content: center; /* Centers the icons horizontally */ - align-items: center; /* Centers vertically (if needed) */ - gap: 32px; /* Adds spacing between each icon */ + display: flex; /* Enables flexible row layout */ + justify-content: center; /* Centers the icons horizontally */ + align-items: center; /* Centers vertically (if needed) */ + gap: 32px; /* Adds spacing between each icon */ } .image-icon { - width: 32px; - height: 32px; - cursor: pointer; - transition: filter 0.3s ease-in-out; + width: 32px; + height: 32px; + cursor: pointer; + transition: filter 0.3s ease-in-out; } .image-icon:hover { - filter: brightness(0); /* Turns black on hover */ + filter: brightness(0); /* Turns black on hover */ } diff --git a/src/components/ImageIcon/ImageIcon.jsx b/src/components/ImageIcon/ImageIcon.jsx index 70cfd91cbb..185b5c5754 100644 --- a/src/components/ImageIcon/ImageIcon.jsx +++ b/src/components/ImageIcon/ImageIcon.jsx @@ -2,11 +2,9 @@ import React from "react"; import "./ImageIcon.css"; // Add styling as needed const ImageIcon = ({ imageUrl, altText }) => { - if (!imageUrl) return null; // Prevent rendering if no image is provided + if (!imageUrl) return null; // Prevent rendering if no image is provided - return ( - {altText - ); + return {altText; }; -export default ImageIcon; \ No newline at end of file +export default ImageIcon; diff --git a/src/components/ProfilePicture/ProfilePicture.css b/src/components/ProfilePicture/ProfilePicture.css index 16a0d94e7e..77151bd90c 100644 --- a/src/components/ProfilePicture/ProfilePicture.css +++ b/src/components/ProfilePicture/ProfilePicture.css @@ -1,24 +1,19 @@ .profile-picture { - width: 164px; - height: 164px; - border-radius: 50%; - grid-column: 1; - + width: 164px; + height: 164px; + border-radius: 50%; + grid-column: 1; } /* 🔹 Ensure Profile Picture has more spacing ONLY for Contact */ .contact-info .profile-picture { - border-radius: 50%; - margin: 0 0 64px 0; + border-radius: 50%; + margin: 0 0 64px 0; } - @media screen and (max-width: 743px) { - .profile-picture { - order: -1; /* Moves it to the top */ - grid-column: 4 /span 2; - - } + .profile-picture { + order: -1; /* Moves it to the top */ + grid-column: 4 / span 2; } - - \ No newline at end of file +} diff --git a/src/components/ProfilePicture/ProfilePicture.jsx b/src/components/ProfilePicture/ProfilePicture.jsx index bd912f2163..5f1026d338 100644 --- a/src/components/ProfilePicture/ProfilePicture.jsx +++ b/src/components/ProfilePicture/ProfilePicture.jsx @@ -1,8 +1,8 @@ import React from "react"; -import "./ProfilePicture.css"; +import "./ProfilePicture.css"; const ProfilePicture = ({ imageUrl, imageType }) => ( -); +); -export default ProfilePicture; \ No newline at end of file +export default ProfilePicture; diff --git a/src/components/Separator/Separator.css b/src/components/Separator/Separator.css index 6942ef0b0e..7d3aa59ada 100644 --- a/src/components/Separator/Separator.css +++ b/src/components/Separator/Separator.css @@ -1,42 +1,41 @@ .separator-wrapper { - width: 100%; - position: relative; /* ✅ Keeps it inside the normal flow */ - display: flex; - justify-content: center; - align-items: center; - z-index: 10; - overflow: visible; /* ✅ Prevents cutting */ + width: 100%; + position: relative; /* ✅ Keeps it inside the normal flow */ + display: flex; + justify-content: center; + align-items: center; + z-index: 10; + overflow: visible; /* ✅ Prevents cutting */ } /* 🔹 Container for repeating SVGs */ .separator-wrapper, .separator-container { - display: flex; - width: 100vw; - justify-content: center; - align-items: center; - flex-wrap: nowrap; + display: flex; + width: 100vw; + justify-content: center; + align-items: center; + flex-wrap: nowrap; } /* 🔹 Individual separator images */ .separator-img { - width: 171.82px; - height: auto; - margin-top: 124px; - margin-left: -15px; - margin-bottom: -8px; - flex-shrink: 0; + width: 171.82px; + height: auto; + margin-top: 124px; + margin-left: -15px; + margin-bottom: -8px; + flex-shrink: 0; } @media screen and (max-width: 1279px) and (min-width: 744px) { - .separator-img { - margin-top: 128px; - } - + .separator-img { + margin-top: 128px; + } } @media screen and (max-width: 743px) { - .separator-img { - margin-top: 128px; - } -} \ No newline at end of file + .separator-img { + margin-top: 128px; + } +} diff --git a/src/components/Separator/Separator.jsx b/src/components/Separator/Separator.jsx index 4086c5aae1..22d25111b4 100644 --- a/src/components/Separator/Separator.jsx +++ b/src/components/Separator/Separator.jsx @@ -2,21 +2,21 @@ import React from "react"; import "./Separator.css"; const Separator = () => { - return ( -
- {/* Repeat the separator to fill the width */} -
- {[...Array(50)].map((_, index) => ( - Section Separator - ))} -
-
- ); + return ( +
+ {/* Repeat the separator to fill the width */} +
+ {[...Array(50)].map((_, index) => ( + Section Separator + ))} +
+
+ ); }; -export default Separator; \ No newline at end of file +export default Separator; diff --git a/src/components/TextBox/TextBox.css b/src/components/TextBox/TextBox.css index 979f2159fc..7f70c3a24e 100644 --- a/src/components/TextBox/TextBox.css +++ b/src/components/TextBox/TextBox.css @@ -1,10 +1,10 @@ -@import url('https://fonts.googleapis.com/css2?family=Hind:wght@300;400;500;600;700&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap'); +@import url("https://fonts.googleapis.com/css2?family=Hind:wght@300;400;500;600;700&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap"); .h1 { font-size: 80px; color: blue; - font-family: 'Montserrat', sans-serif; + font-family: "Montserrat", sans-serif; grid-column: span 8; font-weight: 700; line-height: 98px; @@ -13,7 +13,7 @@ .h3 { grid-column: span 8; font-size: 32px; - font-family: 'Montserrat', sans-serif; + font-family: "Montserrat", sans-serif; text-align: left; font-weight: 600; font-style: normal; @@ -23,7 +23,7 @@ .p { font-size: 18px; - font-family: 'Hind', sans-serif; + font-family: "Hind", sans-serif; justify-self: center; text-align: left; font-weight: 400; @@ -31,8 +31,8 @@ } .h1.hero { - width: 100%; - margin: 0 0 16px 0; + width: 100%; + margin: 0 0 16px 0; } .h3.hero { @@ -48,8 +48,8 @@ /* Paragraph Styling */ .p.hero { - grid-column: span 7; - width: 100%; + grid-column: span 7; + width: 100%; height: auto; justify-self: left; margin: 0; @@ -58,7 +58,7 @@ /* Tech Section Heading */ .h1.tech { - grid-column: 1 ; + grid-column: 1; color: white; height: auto; width: auto; @@ -67,15 +67,14 @@ } .h3.tech { - grid-column: 2 ; + grid-column: 2; color: white; width: 722px; height: auto; - font-family: 'Hind', sans-serif; + font-family: "Hind", sans-serif; text-align: left; margin: 0; align-self: center; - } .h1.projects { @@ -114,16 +113,16 @@ h3.blog { } p.blog { - margin: 0px; + margin: 0px; } h1.skills { margin: 128px 234px 128px 234px; - color: white; + color: white; } p.skills { - color: white; + color: white; margin: 0; width: auto; height: auto; @@ -138,13 +137,21 @@ p.skills { } /* 🔹 Ensure Each Column is Placed Correctly in Grid */ -.skills-column:nth-child(1) { grid-column: 1 ; } -.skills-column:nth-child(2) { grid-column: 3 ; } -.skills-column:nth-child(3) { grid-column: 5 ; } -.skills-column:nth-child(4) { grid-column: 7 ; } +.skills-column:nth-child(1) { + grid-column: 1; +} +.skills-column:nth-child(2) { + grid-column: 3; +} +.skills-column:nth-child(3) { + grid-column: 5; +} +.skills-column:nth-child(4) { + grid-column: 7; +} h3.skills-code { - background-color: #EB5577; + background-color: #eb5577; color: white; padding: 2px; margin: 0 0 16px 0; @@ -152,7 +159,7 @@ h3.skills-code { } h3.skills-toolbox { - background-color: #2483E0; + background-color: #2483e0; color: white; padding: 2px; margin: 0 0 16px 0; @@ -160,7 +167,7 @@ h3.skills-toolbox { } h3.skills-upcoming { - background-color: #6DB486; + background-color: #6db486; color: white; font-weight: 600; padding: 2px; @@ -169,7 +176,7 @@ h3.skills-upcoming { } h3.skills-more { - background-color: #FFDE30; + background-color: #ffde30; color: blue; font-weight: 600; padding: 2px; @@ -192,7 +199,7 @@ h3.skills-more { /* 🔹 Center "Let's talk" */ .h1.contact { grid-column: 1 / span 8; - font-family: 'Montserrat', sans-serif; + font-family: "Montserrat", sans-serif; text-align: center; justify-self: center; align-self: center; @@ -200,8 +207,7 @@ h3.skills-more { } .h3.contact { - margin: 0 0 8px 0; - + margin: 0 0 8px 0; } /* 🔹 Profile Section Centering */ @@ -217,22 +223,21 @@ h3.skills-more { } .social-links { - display: flex; - flex-direction: row; - gap: 32px; - justify-content: center; - margin: 56px 0 0 0 ; + display: flex; + flex-direction: row; + gap: 32px; + justify-content: center; + margin: 56px 0 0 0; } - .ticker-tape { position: absolute; bottom: 0; left: 50%; - width: 100vw; /* Force full viewport width */ - margin-left: -50vw; /* Pull it back to align with the viewport */ + width: 100vw; /* Force full viewport width */ + margin-left: -50vw; /* Pull it back to align with the viewport */ height: 114px; - background-color: #FF6584; + background-color: #ff6584; color: white; padding: 41px 0 35px 13px; text-align: left; @@ -247,7 +252,7 @@ h3.skills-more { font-size: 26px; line-height: 38px; font-weight: 600; - font-family: 'Montserrat', sans-serif; + font-family: "Montserrat", sans-serif; } /* ------------------------------ @@ -256,7 +261,6 @@ h3.skills-more { /* For screens between 1280px and 1511px */ @media screen and (max-width: 1511px) and (min-width: 1280px) { - .hero-container { width: 958px; } @@ -272,7 +276,7 @@ h3.skills-more { .h1.projects { max-width: 956px; } - + .h1.blog { width: 956px; } @@ -285,7 +289,6 @@ h3.skills-more { .ticker-tape { margin-bottom: 4px; } - } /* For screens between 744px and 1279px */ @@ -293,9 +296,8 @@ h3.skills-more { .h1 { font-size: 56px; line-height: 68px; - } - + .h3 { font-size: 24px; line-height: 29px; @@ -311,7 +313,7 @@ h3.skills-more { } .h1.tech { - grid-column: 1 /span 8 ; + grid-column: 1 / span 8; width: 680px; height: 68px; padding: 0; @@ -321,12 +323,12 @@ h3.skills-more { } .h3.tech { - grid-column: 1 /span 8 ; - margin:0; + grid-column: 1 / span 8; + margin: 0; line-height: 38px; width: 680px; height: auto; - margin: 0 auto; + margin: 0 auto; text-align: center; } @@ -389,14 +391,10 @@ h3.skills-more { grid-row: 2; /* Moves this column to the second row */ margin-left: -23px; } - - - } /* For screens between 375px and 743px */ @media screen and (max-width: 743px) { - .hero-container { width: 343px; height: 720px; @@ -406,9 +404,8 @@ h3.skills-more { .h1 { font-size: 32px; line-height: 39px; - } - + .h3 { font-size: 18px; line-height: 22px; @@ -427,11 +424,11 @@ h3.skills-more { .p.hero { padding: 0; margin-bottom: 32px; - grid-column: span 8; + grid-column: span 8; } - + .h1.tech { - grid-column: 1 /span 8 ; + grid-column: 1 / span 8; width: auto; height: 68px; margin: 0 auto 64px auto; @@ -439,7 +436,7 @@ h3.skills-more { } .h3.tech { - grid-column: 1 /span 8 ; + grid-column: 1 / span 8; margin: 0 auto; width: 343px; height: auto; @@ -457,7 +454,6 @@ h3.skills-more { text-align: center; margin: 0 auto; padding: 0; - } .h3.projects { @@ -469,7 +465,7 @@ h3.skills-more { font-size: 16px; line-height: 29px; } - + .h1.blog { font-size: 56px; text-align: center; @@ -514,7 +510,7 @@ h3.skills-more { line-height: 29px; } - h3.toolbox{ + h3.toolbox { font-size: 24px; line-height: 29px; } @@ -528,7 +524,7 @@ h3.skills-more { font-size: 24px; line-height: 29px; } - + .h1.contact { font-size: 56px; line-height: 68px; @@ -538,5 +534,4 @@ h3.skills-more { font-size: 24px; line-height: 29px; } - } diff --git a/src/components/TextBox/TextBox.jsx b/src/components/TextBox/TextBox.jsx index f185f1ccf0..b3703a08d9 100644 --- a/src/components/TextBox/TextBox.jsx +++ b/src/components/TextBox/TextBox.jsx @@ -1,5 +1,5 @@ import "./TextBox.css"; -import React from 'react'; +import React from "react"; const TextBox = ({ text, textType = "p", sectionType }) => { const className = `${textType} ${sectionType ? `${sectionType}` : ""}`.trim(); @@ -20,7 +20,9 @@ const TextBox = ({ text, textType = "p", sectionType }) => { ); } else { - console.warn("Expected an array for 'text' prop when 'textType' is 'list'"); + console.warn( + "Expected an array for 'text' prop when 'textType' is 'list'", + ); return null; } } @@ -29,4 +31,3 @@ const TextBox = ({ text, textType = "p", sectionType }) => { }; export default TextBox; - diff --git a/src/main.jsx b/src/main.jsx index 3e0527e4b8..36160dd122 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,6 +1,6 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import './index.css' -import App from './App.jsx' +import React from "react"; +import ReactDOM from "react-dom/client"; +import "./index.css"; +import App from "./App.jsx"; -ReactDOM.createRoot(document.getElementById('root')).render() +ReactDOM.createRoot(document.getElementById("root")).render(); diff --git a/src/sections/Blog.jsx b/src/sections/Blog.jsx index d6c065b64f..1f86cd7282 100644 --- a/src/sections/Blog.jsx +++ b/src/sections/Blog.jsx @@ -1,49 +1,49 @@ import { Card } from "../components/Card/Card"; -import { Grid } from "../ui/Grid"; +import { Grid } from "../ui/Grid"; import TextBox from "../components/TextBox/TextBox"; export const Blog = () => { - return ( - - - - {/* 🔹 Wrap all Cards inside a Two-Column Grid Container */} -
- - - - -
-
- ); + return ( + + + + {/* 🔹 Wrap all Cards inside a Two-Column Grid Container */} +
+ + + + +
+
+ ); }; -export default Blog; \ No newline at end of file +export default Blog; diff --git a/src/sections/Contact.jsx b/src/sections/Contact.jsx index 22cf250d92..7fd7e114fb 100644 --- a/src/sections/Contact.jsx +++ b/src/sections/Contact.jsx @@ -1,41 +1,54 @@ import { Grid } from "../ui/Grid"; import TextBox from "../components/TextBox/TextBox"; import ProfilePicture from "../components/ProfilePicture/ProfilePicture"; -import SocialLinks from "/assets/SocialLinks.svg"; +import SocialLinks from "/assets/SocialLinks.svg"; import ImageIcon from "../components/ImageIcon/ImageIcon"; export const Contact = () => { - return ( - - {/* 🔹 Centered Header */} - + return ( + + {/* 🔹 Centered Header */} + - {/* 🔹 Profile Section */} -
- + {/* 🔹 Profile Section */} +
+ - - - + + + -
- - - - - -
-
+
+ + + + + +
+
- {/* 🔹 Ticker Tape Section */} -
-

Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán

-
-
- ); + {/* 🔹 Ticker Tape Section */} +
+

+ Estefanny Morán • Fullstack Developer • Estefanny Morán • Fullstack + Developer • Estefanny Morán • Fullstack Developer • Estefanny Morán • + Fullstack Developer • Estefanny Morán • Fullstack Developer • + Estefanny Morán • Fullstack Developer • Estefanny Morán +

+
+
+ ); }; -export default Contact; \ No newline at end of file +export default Contact; diff --git a/src/sections/Hero.jsx b/src/sections/Hero.jsx index 3fd87bf9f4..961219a751 100644 --- a/src/sections/Hero.jsx +++ b/src/sections/Hero.jsx @@ -5,28 +5,32 @@ import TextBox from "../components/TextBox/TextBox"; import Arrow from "../components/Arrow/Arrow"; const Hero = () => ( -
{/* Wrapper to set position */} +
+ {" "} + {/* Wrapper to set position */} - + - - - {/* Downward Arrow (Only inside Hero section, outside the grid) */} -
); -export default Hero; \ No newline at end of file +export default Hero; diff --git a/src/sections/Projects.jsx b/src/sections/Projects.jsx index 8e74333fa8..ee1142b674 100644 --- a/src/sections/Projects.jsx +++ b/src/sections/Projects.jsx @@ -1,97 +1,94 @@ -import { Card } from "../components/Card/Card" -import { Grid } from "../ui/Grid.jsx" +import { Card } from "../components/Card/Card"; +import { Grid } from "../ui/Grid.jsx"; import TextBox from "../components/TextBox/TextBox"; +export const Projects = () => { + return ( + + + -export const Projects = () => { - return ( - - - - - - - + - + - + - + - + - + - - ); + sectionType="projects" + icons={["HTML5", "CSS3", "React", "Node"]} + /> + + ); }; -export default Projects \ No newline at end of file +export default Projects; diff --git a/src/sections/Skills.jsx b/src/sections/Skills.jsx index dda7f75354..fada8bf9f2 100644 --- a/src/sections/Skills.jsx +++ b/src/sections/Skills.jsx @@ -2,54 +2,66 @@ import { Grid } from "../ui/Grid"; import TextBox from "../components/TextBox/TextBox"; export const Skills = () => { - return ( - - + return ( + + -
- {/* ✅ Code Column */} -
- - - - - - - -
+
+ {/* ✅ Code Column */} +
+ + + + + + + +
- {/* ✅ Toolbox Column */} -
- - - - - - - - -
+ {/* ✅ Toolbox Column */} +
+ + + + + + + + +
- {/* ✅ Upcoming Column */} -
- - -
+ {/* ✅ Upcoming Column */} +
+ + +
- {/* ✅ More Column */} -
- - - - - - - - -
-
- - ); + {/* ✅ More Column */} +
+ + + + + + + + +
+
+
+ ); }; -export default Skills; \ No newline at end of file +export default Skills; diff --git a/src/sections/Tech.jsx b/src/sections/Tech.jsx index 3476ad07e3..7cbdc6a95e 100644 --- a/src/sections/Tech.jsx +++ b/src/sections/Tech.jsx @@ -1,12 +1,16 @@ -import TextBox from "../components/TextBox/TextBox" -import React from 'react'; +import TextBox from "../components/TextBox/TextBox"; +import React from "react"; import { Grid } from "../ui/Grid"; export const Tech = () => ( - - - - -) + + + + +); export default Tech; diff --git a/src/ui/Grid.css b/src/ui/Grid.css index 27e4af2621..4a0f20ece4 100644 --- a/src/ui/Grid.css +++ b/src/ui/Grid.css @@ -1,90 +1,90 @@ .section-wrapper { - width: 100%; + width: 100%; } .grid-section { - display: grid; - grid-template-columns: repeat(8, 1fr); - width: 100%; - max-width: 1512px; - min-height: 980px; - position: relative; - align-items: center; - margin: 0 auto; + display: grid; + grid-template-columns: repeat(8, 1fr); + width: 100%; + max-width: 1512px; + min-height: 980px; + position: relative; + align-items: center; + margin: 0 auto; } .grid-section.hero { - padding: 332px 0 331px 0; + padding: 332px 0 331px 0; } .grid-section.tech { - gap: 124px; - padding: 0px 234px; - } + gap: 124px; + padding: 0px 234px; +} .grid-section.projects { - width: 100%; - max-width: 1512px; - box-sizing: border-box; - padding: 128px 234px 0 234px; - margin: 0 auto; - gap: 128px; + width: 100%; + max-width: 1512px; + box-sizing: border-box; + padding: 128px 234px 0 234px; + margin: 0 auto; + gap: 128px; } .grid-section.card { - grid-column: 1 / span 8; - width: 100%; - height: auto; - display: flex; - flex-wrap: wrap; - gap: 16px; - padding-left: 0; - overflow: visible; + grid-column: 1 / span 8; + width: 100%; + height: auto; + display: flex; + flex-wrap: wrap; + gap: 16px; + padding-left: 0; + overflow: visible; } .grid-section.blog { - width: 100%; - max-width: 1512px; - box-sizing: border-box; - padding: 124px 234px 128px 234px; - margin: 0 auto; - gap: 132px; + width: 100%; + max-width: 1512px; + box-sizing: border-box; + padding: 124px 234px 128px 234px; + margin: 0 auto; + gap: 132px; } .grid-section.skills { - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - min-height: auto !important; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + min-height: auto !important; } .grid-section.contact { - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - min-height: 1053px !important; - box-sizing: border-box; - padding: 128px 234px; - margin: 0 auto; - gap: 128px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + min-height: 1053px !important; + box-sizing: border-box; + padding: 128px 234px; + margin: 0 auto; + gap: 128px; } /* Background Colors */ .blue-background { - background: blue; + background: blue; } .peach-background { - background: var(--color-neutral); + background: var(--color-neutral); } .white-background { - background: white; + background: white; } .orange-background { - background: #FF7D29; + background: #ff7d29; } /* ------------------------------ @@ -93,114 +93,109 @@ /* For screens between 1280px and 1511px */ @media screen and (max-width: 1511px) and (min-width: 1280px) { - - - .grid-section.hero { - padding: 332px 0 331px 0; - } - - .grid-section.tech { - width: 1280px; - padding: 0 191px; - } - - .grid-section.projects { - padding: 128px 161px 0 161px; - box-sizing: border-box; - } - - .grid-section.blog{ - width: 1280px; - padding: 124px 161px 128px 161px; - box-sizing: border-box; - } - - .grid-section.contact { - padding: 128px 161px 128px 162px; - min-height: 1057px !important; - } - - } - - /* For screens between 744px and 1279px */ - @media screen and (max-width: 1279px) and (min-width: 744px) { - .grid-section { - min-height: 627px; - } - - .grid-section.hero { - padding: 128px 0 208px 0; - } - - .grid-section.tech { - min-width: 745px; - height: 796px; - gap: 0; - padding: 256px 4.297%; - } - - .grid-section.projects { - padding: 128px 32px 0 32px; - box-sizing: border-box; - gap: 64px; - } - - .grid-section.blog{ - width: 745px; - padding: 128px 32px; - gap: 64px; - } - - .grid-section.contact { - padding: 128px 32px; - min-height: 929px !important; - gap: 64px; - } - - } - - /* For screens between 375px and 743px */ - @media screen and (max-width: 743px) { - .grid-section { - min-height: 720px; - } - - .grid-section.hero { - padding: 64px 0 132px 0; - } - - .grid-section.tech { - min-width: 345px; - min-height: 360px !important; - gap: 0; - padding: 128px 4.27%; - } - - .grid-section.projects { - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - min-width: 375px; - margin: 0 auto; - padding: 124px 16px 0 16px; - box-sizing: border-box; - gap: 64px; - } - - .grid-section.blog{ - width: 100%; - max-width: 375px; - padding: 128px 16px; - box-sizing: border-box; - margin: 0 auto; - gap: 64px; - } - - .grid-section.contact { - padding: 128px 16px; - gap: 64px; - min-height: 1043px !important; - } - } - + .grid-section.hero { + padding: 332px 0 331px 0; + } + + .grid-section.tech { + width: 1280px; + padding: 0 191px; + } + + .grid-section.projects { + padding: 128px 161px 0 161px; + box-sizing: border-box; + } + + .grid-section.blog { + width: 1280px; + padding: 124px 161px 128px 161px; + box-sizing: border-box; + } + + .grid-section.contact { + padding: 128px 161px 128px 162px; + min-height: 1057px !important; + } +} + +/* For screens between 744px and 1279px */ +@media screen and (max-width: 1279px) and (min-width: 744px) { + .grid-section { + min-height: 627px; + } + + .grid-section.hero { + padding: 128px 0 208px 0; + } + + .grid-section.tech { + min-width: 745px; + height: 796px; + gap: 0; + padding: 256px 4.297%; + } + + .grid-section.projects { + padding: 128px 32px 0 32px; + box-sizing: border-box; + gap: 64px; + } + + .grid-section.blog { + width: 745px; + padding: 128px 32px; + gap: 64px; + } + + .grid-section.contact { + padding: 128px 32px; + min-height: 929px !important; + gap: 64px; + } +} + +/* For screens between 375px and 743px */ +@media screen and (max-width: 743px) { + .grid-section { + min-height: 720px; + } + + .grid-section.hero { + padding: 64px 0 132px 0; + } + + .grid-section.tech { + min-width: 345px; + min-height: 360px !important; + gap: 0; + padding: 128px 4.27%; + } + + .grid-section.projects { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + min-width: 375px; + margin: 0 auto; + padding: 124px 16px 0 16px; + box-sizing: border-box; + gap: 64px; + } + + .grid-section.blog { + width: 100%; + max-width: 375px; + padding: 128px 16px; + box-sizing: border-box; + margin: 0 auto; + gap: 64px; + } + + .grid-section.contact { + padding: 128px 16px; + gap: 64px; + min-height: 1043px !important; + } +} diff --git a/src/ui/Grid.jsx b/src/ui/Grid.jsx index 3f99f3e8a0..6c44fb8f51 100644 --- a/src/ui/Grid.jsx +++ b/src/ui/Grid.jsx @@ -1,11 +1,11 @@ import "./Grid.css"; export const Grid = ({ children, background, sectionType }) => { - return ( -
-
- {children} -
-
- ); -}; \ No newline at end of file + return ( +
+
+ {children} +
+
+ ); +}; diff --git a/src/ui/Typography/Typography.css b/src/ui/Typography/Typography.css index bdcefc95b4..ce81da6305 100644 --- a/src/ui/Typography/Typography.css +++ b/src/ui/Typography/Typography.css @@ -1,3 +1,3 @@ .section-title { - grid-column:span 8; + grid-column: span 8; } diff --git a/src/ui/Typography/Typography.jsx b/src/ui/Typography/Typography.jsx index 5f0546ce13..5083c61cc1 100644 --- a/src/ui/Typography/Typography.jsx +++ b/src/ui/Typography/Typography.jsx @@ -1,3 +1,5 @@ -import "./typography.css" +import "./typography.css"; -export const SectionTitle = ({ children }) =>

{children}

+export const SectionTitle = ({ children }) => ( +

{children}

+); diff --git a/vite.config.js b/vite.config.js index 8b0f57b91a..0e43ae8def 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,7 +1,7 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; // https://vite.dev/config/ export default defineConfig({ plugins: [react()], -}) +});