diff --git a/uniro_frontend/package-lock.json b/uniro_frontend/package-lock.json index 748dffb..d657c01 100644 --- a/uniro_frontend/package-lock.json +++ b/uniro_frontend/package-lock.json @@ -31,7 +31,8 @@ "prettier": "^3.4.2", "typescript": "~5.6.2", "typescript-eslint": "^8.18.2", - "vite": "^6.0.5" + "vite": "^6.0.5", + "vite-plugin-svgr": "^4.3.0" } }, "node_modules/@ampproject/remapping": { @@ -1047,6 +1048,42 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.0.tgz", @@ -1294,6 +1331,231 @@ "win32" ] }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, "node_modules/@tailwindcss/node": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.0.tgz", @@ -2205,6 +2467,19 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001695", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", @@ -2277,6 +2552,31 @@ "dev": true, "license": "MIT" }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } "node_modules/cookie": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", @@ -2448,6 +2748,17 @@ "node": ">=0.10.0" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2483,6 +2794,29 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.23.9", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", @@ -2961,6 +3295,13 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3474,6 +3815,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", @@ -3914,6 +4262,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "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", @@ -4209,6 +4564,13 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4244,6 +4606,16 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4333,6 +4705,17 @@ "dev": true, "license": "MIT" }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-releases": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", @@ -4528,6 +4911,25 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4555,6 +4957,16 @@ "dev": true, "license": "MIT" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5133,6 +5545,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5279,6 +5702,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true, + "license": "MIT" + }, "node_modules/synckit": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", @@ -5609,6 +6039,21 @@ } } }, + "node_modules/vite-plugin-svgr": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.3.0.tgz", + "integrity": "sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.3", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": ">=2.6.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/uniro_frontend/package.json b/uniro_frontend/package.json index d51f7e8..62918c5 100644 --- a/uniro_frontend/package.json +++ b/uniro_frontend/package.json @@ -33,6 +33,7 @@ "prettier": "^3.4.2", "typescript": "~5.6.2", "typescript-eslint": "^8.18.2", - "vite": "^6.0.5" + "vite": "^6.0.5", + "vite-plugin-svgr": "^4.3.0" } } diff --git a/uniro_frontend/public/fonts/AppleSDGothicNeoB/AppleSDGothicNeoB.woff b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoB.woff similarity index 100% rename from uniro_frontend/public/fonts/AppleSDGothicNeoB/AppleSDGothicNeoB.woff rename to uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoB.woff diff --git a/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoM.woff b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoM.woff new file mode 100644 index 0000000..1d8feb9 Binary files /dev/null and b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoM.woff differ diff --git a/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoR.woff b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoR.woff new file mode 100644 index 0000000..e1e9b19 Binary files /dev/null and b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoR.woff differ diff --git a/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoSB.woff b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoSB.woff new file mode 100644 index 0000000..2517813 Binary files /dev/null and b/uniro_frontend/public/fonts/AppleSDGothicNeo/AppleSDGothicNeoSB.woff differ diff --git a/uniro_frontend/public/icons/chevron-left.svg b/uniro_frontend/public/icons/chevron-left.svg new file mode 100644 index 0000000..0b40930 --- /dev/null +++ b/uniro_frontend/public/icons/chevron-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/uniro_frontend/public/icons/chevron-right.svg b/uniro_frontend/public/icons/chevron-right.svg new file mode 100644 index 0000000..6c18014 --- /dev/null +++ b/uniro_frontend/public/icons/chevron-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/uniro_frontend/public/icons/close-circle.svg b/uniro_frontend/public/icons/close-circle.svg new file mode 100644 index 0000000..7561362 --- /dev/null +++ b/uniro_frontend/public/icons/close-circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/uniro_frontend/public/icons/mic.svg b/uniro_frontend/public/icons/mic.svg new file mode 100644 index 0000000..dd41882 --- /dev/null +++ b/uniro_frontend/public/icons/mic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/uniro_frontend/public/icons/search.svg b/uniro_frontend/public/icons/search.svg new file mode 100644 index 0000000..bae015e --- /dev/null +++ b/uniro_frontend/public/icons/search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/uniro_frontend/src/App.tsx b/uniro_frontend/src/App.tsx index 0d0c1e2..4077067 100644 --- a/uniro_frontend/src/App.tsx +++ b/uniro_frontend/src/App.tsx @@ -1,28 +1,54 @@ -import { useState } from "react"; -import reactLogo from "./assets/react.svg"; -import viteLogo from "/vite.svg"; import "./App.css"; +import Button from "./components/customButton"; +import Input from "./components/customInput"; +import LandingButton from "./components/landingButton"; +import useModal from "./hooks/useModal"; import Map from "./component/Map"; function App() { - const [count, setCount] = useState(0); + const [FailModal, isFailOpen, openFail, closeFail] = useModal(); + const [SuccessModal, isSuccessOpen, openSuccess, closeSuccess] = useModal(); return ( <>
- - Vite logo - - - React logo - -
-

Vite + React

-
- -

한글 English

-

한글

-

English

+
+ + + + + +
+ +
+ { }} + onLengthChange={(e: string) => { + console.log(e); + }} + /> +
+ +

불편한 길 제보가 완료되었습니다!

+
+

제보해주셔서 감사합니다.

+

+ 관리자 검토 후 반영되니 조금만 기다려주세요. +

+
+
+ +

경로를 찾을 수 없습니다

+
+

+ 해당 경로에는 배리어프리한 길이 없습니다. +

+

다른 건물을 시도해주세요.

+
+
diff --git a/uniro_frontend/src/components/customButton.tsx b/uniro_frontend/src/components/customButton.tsx new file mode 100644 index 0000000..3f00198 --- /dev/null +++ b/uniro_frontend/src/components/customButton.tsx @@ -0,0 +1,35 @@ +import { ButtonHTMLAttributes, ReactNode } from "react"; + +interface CustopmButtonProps extends ButtonHTMLAttributes { + children: ReactNode; + variant?: "primary" | "secondary" | "disabled"; +} + +export default function Button({ children, variant = "primary", ...rest }: CustopmButtonProps) { + let buttonStyle: string; + + switch (variant) { + case "primary": + buttonStyle = "cursor-pointer bg-primary-500 text-gray-100 active:bg-primary-600"; + break; + case "secondary": + buttonStyle = "cursor-pointer bg-gray-100 text-primary-500 border border-gray-400 active:bg-gray-200"; + break; + case "disabled": + buttonStyle = "bg-gray-300 text-gray-700"; + break; + default: + buttonStyle = "cursor-pointer bg-primary-500 text-gray-100 active:bg-primary-600"; + break; + } + + return ( + + ); +} diff --git a/uniro_frontend/src/components/customInput.tsx b/uniro_frontend/src/components/customInput.tsx new file mode 100644 index 0000000..24c440c --- /dev/null +++ b/uniro_frontend/src/components/customInput.tsx @@ -0,0 +1,60 @@ +import { ChangeEvent, InputHTMLAttributes, useCallback, useState } from "react"; +import Search from "../../public/icons/search.svg?react"; +import ChevronLeft from "../../public/icons/chevron-left.svg?react"; +import Mic from "../../public/icons/mic.svg?react"; +import Close from "../../public/icons/close-circle.svg?react"; + +interface CustomInputProps extends InputHTMLAttributes { + onLengthChange: (e: string) => void; + placeholder: string; + handleVoiceInput: () => void; +} + +export default function Input({ onLengthChange, placeholder, handleVoiceInput, ...rest }: CustomInputProps) { + const [isFocus, setIsFocus] = useState(false); + const [tempValue, setTempValue] = useState(""); + const [currentValue, setCurrentValue] = useState(""); + + const onFoucs = () => setIsFocus(true); + const onBlur = () => setIsFocus(false); + + const resetInput = () => { + setCurrentValue(""); + setTempValue(""); + }; + + const handleChange = (e: ChangeEvent) => { + const currentInput: string = e.target.value; + setTempValue(currentInput); + if (currentValue.length !== currentInput.length) { + setCurrentValue(currentInput); + onLengthChange(currentInput); + } + }; + + return ( +
+ {isFocus ? : } + + {currentValue.length === 0 ? ( + + ) : ( + + )} +
+ ); +} diff --git a/uniro_frontend/src/components/landingButton.tsx b/uniro_frontend/src/components/landingButton.tsx new file mode 100644 index 0000000..cf666be --- /dev/null +++ b/uniro_frontend/src/components/landingButton.tsx @@ -0,0 +1,14 @@ +import { ButtonHTMLAttributes } from "react"; +import ChevronRight from "../../public/icons/chevron-right.svg?react"; + +export default function LandingButton({ ...rest }: ButtonHTMLAttributes) { + return ( + + ); +} diff --git a/uniro_frontend/src/hooks/useModal.tsx b/uniro_frontend/src/hooks/useModal.tsx new file mode 100644 index 0000000..b48ce40 --- /dev/null +++ b/uniro_frontend/src/hooks/useModal.tsx @@ -0,0 +1,36 @@ +import React, { ReactNode, useCallback, useState } from "react"; + +export default function useModal(): [React.FC<{ children: ReactNode }>, boolean, () => void, () => void] { + const [isOpen, setIsOpen] = useState(false); + + const open = useCallback(() => { + setIsOpen(true); + }, []); + + const close = useCallback(() => { + setIsOpen(false); + }, []); + + const Modal = useCallback( + ({ children }: { children: React.ReactNode }) => { + if (!isOpen) return null; + + return ( +
+
+
{children}
+ +
+
+ ); + }, + [isOpen, close], + ); + + return [Modal, isOpen, open, close]; +} diff --git a/uniro_frontend/src/index.css b/uniro_frontend/src/index.css index 7a3abc8..742a9a4 100644 --- a/uniro_frontend/src/index.css +++ b/uniro_frontend/src/index.css @@ -1,10 +1,34 @@ @import "tailwindcss"; @font-face { - font-family: "AppleSDGothicNeoB"; + font-family: "AppleSDGothicNeo"; + font-style: normal; + font-weight: 700; + src: url("/fonts/AppleSDGothicNeo/AppleSDGothicNeoB.woff") format("woff"); + unicode-range: U+1100-11FF, U+3130-318F, U+A960-A97F, U+AC00-D7A3, U+D7B0-D7FF; +} + +@font-face { + font-family: "AppleSDGothicNeo"; + font-style: normal; + font-weight: 500; + src: url("/fonts/AppleSDGothicNeo/AppleSDGothicNeoM.woff") format("woff"); + unicode-range: U+1100-11FF, U+3130-318F, U+A960-A97F, U+AC00-D7A3, U+D7B0-D7FF; +} + +@font-face { + font-family: "AppleSDGothicNeo"; font-style: normal; font-weight: 400; - src: url("/fonts/AppleSDGothicNeoB/AppleSDGothicNeoB.woff") format("woff"); + src: url("/fonts/AppleSDGothicNeo/AppleSDGothicNeoR.woff") format("woff"); + unicode-range: U+1100-11FF, U+3130-318F, U+A960-A97F, U+AC00-D7A3, U+D7B0-D7FF; +} + +@font-face { + font-family: "AppleSDGothicNeo"; + font-style: normal; + font-weight: 600; + src: url("/fonts/AppleSDGothicNeo/AppleSDGothicNeoSB.woff") format("woff"); unicode-range: U+1100-11FF, U+3130-318F, U+A960-A97F, U+AC00-D7A3, U+D7B0-D7FF; } @@ -16,7 +40,8 @@ } * { - font-family: "SF Pro Display", "AppleSDGothicNeoB"; + font-family: "SF Pro Display", "AppleSDGothicNeo"; + outline: none; } @theme { diff --git a/uniro_frontend/src/vite-env.d.ts b/uniro_frontend/src/vite-env.d.ts index 11f02fe..b1f45c7 100644 --- a/uniro_frontend/src/vite-env.d.ts +++ b/uniro_frontend/src/vite-env.d.ts @@ -1 +1,2 @@ /// +/// diff --git a/uniro_frontend/vite.config.ts b/uniro_frontend/vite.config.ts index af42d7b..0b4fe9d 100644 --- a/uniro_frontend/vite.config.ts +++ b/uniro_frontend/vite.config.ts @@ -1,8 +1,9 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import tailwindcss from "@tailwindcss/vite"; +import svgr from "vite-plugin-svgr"; // https://vite.dev/config/ export default defineConfig({ - plugins: [react(), tailwindcss()], + plugins: [react(), tailwindcss(), svgr()], });