From cff084752343f6867d93e9a5dcc60c94b7b19c26 Mon Sep 17 00:00:00 2001 From: Giwon Date: Sun, 25 Aug 2024 03:03:43 +0900 Subject: [PATCH 01/97] =?UTF-8?q?build:=20react-transition-group=20+=20vit?= =?UTF-8?q?e-plugin-svgr=20=EC=84=A4=EC=B9=98=20+=20svg=EB=A5=BC=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=EC=8B=9D=20&=20=EB=B9=9D=EB=93=9C=EB=90=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1059 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- vite.config.js | 9 +- 3 files changed, 1040 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 819360a..f06fe5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.25.1", + "react-transition-group": "^4.4.5", "styled-components": "^6.1.12", "zustand": "^4.5.4" }, @@ -26,7 +27,355 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.3.3", - "vite": "^5.3.4" + "vite": "^5.3.4", + "vite-plugin-svgr": "^4.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "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.25.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz", + "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.4", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz", + "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", + "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz", + "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.4", + "@babel/parser": "^7.25.4", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.4", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", + "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@emotion/is-prop-valid": { @@ -506,6 +855,54 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -562,6 +959,28 @@ "node": ">=14.0.0" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "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/rollup-android-arm-eabi": { "version": "4.19.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz", @@ -744,31 +1163,244 @@ "win32" ] }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz", - "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", - "cpu": [ - "ia32" - ], + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz", + "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", + "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", - "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", - "cpu": [ - "x64" - ], + "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, - "optional": true, - "os": [ - "win32" - ] + "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/@swc/core": { "version": "1.7.1", @@ -1280,6 +1912,38 @@ "concat-map": "0.0.1" } }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1308,6 +1972,18 @@ "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/camelize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", @@ -1316,6 +1992,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1367,6 +2063,38 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/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, + "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/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1532,6 +2260,52 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "dev": true + }, + "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, + "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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -1728,6 +2502,15 @@ "@esbuild/win32-x64": "0.21.5" } }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1982,6 +2765,12 @@ "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 + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2170,6 +2959,15 @@ "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, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -2450,6 +3248,12 @@ "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 + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -2816,12 +3620,30 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2834,6 +3656,18 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -2871,6 +3705,12 @@ "node": ">= 0.8.0" } }, + "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 + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2903,6 +3743,24 @@ "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, + "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", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2963,11 +3821,26 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "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, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, "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, "engines": { "node": ">=0.10.0" } @@ -3128,6 +4001,24 @@ "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, + "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", @@ -3161,11 +4052,32 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "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, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -3250,7 +4162,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -3317,8 +4228,7 @@ "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 + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-router": { "version": "6.25.1", @@ -3350,6 +4260,21 @@ "react-dom": ">=16.8" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", @@ -3371,6 +4296,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -3627,6 +4557,16 @@ "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, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -3827,6 +4767,12 @@ "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 + }, "node_modules/synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", @@ -3850,6 +4796,15 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -3967,6 +4922,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.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", @@ -4039,6 +5024,20 @@ } } }, + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4148,6 +5147,12 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 615a685..3168f92 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.25.1", + "react-transition-group": "^4.4.5", "styled-components": "^6.1.12", "zustand": "^4.5.4" }, @@ -29,6 +30,7 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.3.3", - "vite": "^5.3.4" + "vite": "^5.3.4", + "vite-plugin-svgr": "^4.2.0" } } diff --git a/vite.config.js b/vite.config.js index 861b04b..256a783 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,7 +1,8 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react-swc' +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react-swc'; +import svgr from 'vite-plugin-svgr'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], -}) + plugins: [react(), svgr({ include: '**/*.svg' })], +}); From 203e447c32457ae598379f062921978236161852 Mon Sep 17 00:00:00 2001 From: Giwon Date: Sun, 25 Aug 2024 03:33:04 +0900 Subject: [PATCH 02/97] =?UTF-8?q?fix:=20Checkbox=20svg=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20+=20Toggle=20css=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/forms/Checkbox.jsx | 3 +- src/components/forms/Toggle.jsx | 115 +++++++++++++++--------------- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/components/forms/Checkbox.jsx b/src/components/forms/Checkbox.jsx index 017fc18..0a6f72e 100644 --- a/src/components/forms/Checkbox.jsx +++ b/src/components/forms/Checkbox.jsx @@ -5,7 +5,6 @@ import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import -import Checkmark from '/icon/checked.svg'; /** * @typedef {"xs" | "s" | "m" | "l" | "xl" | string} Size @@ -56,7 +55,7 @@ const ICheckbox = styled.input.attrs((props) => ({ return props.$color ?? 'var(--primary-color)'; } }}; - background-image: url(${Checkmark}); + background-image: url(/src/assets/icons/checked.svg); background-size: cover; border: 2px solid ${(props) => { diff --git a/src/components/forms/Toggle.jsx b/src/components/forms/Toggle.jsx index d02009e..5e00654 100644 --- a/src/components/forms/Toggle.jsx +++ b/src/components/forms/Toggle.jsx @@ -47,33 +47,33 @@ const Checkbox = styled.input.attrs({ type: 'checkbox' })` // 토글 버튼 본체 :before가 좌우로 움직이는 동그란 버튼입니다. const Slider = styled.span` - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: var(--secondary-text-color); - transition: 0.4s ease-out; - border-radius: ${(props) => { - switch (props.$size) { - case 's': - return '20px;'; - case 'm': - return '24px;'; - case 'l': - return '28px;'; - default: - return `24px;`; - } - }}; + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--secondary-text-color); + transition: 0.4s ease-out; + border-radius: ${(props) => { + switch (props.$size) { + case 's': + return '20px;'; + case 'm': + return '24px;'; + case 'l': + return '28px;'; + default: + return `24px;`; + } + }}; - &:before { - position: absolute; - content: ''; - width: 16px; - height: 16px; - ${(props) => { + &:before { + position: absolute; + content: ''; + width: 16px; + height: 16px; + ${(props) => { switch (props.$size) { case 's': return 'width: 12px; height: 12px;'; @@ -85,39 +85,40 @@ const Slider = styled.span` return `width: 48px; height: 24px;`; } }} - left: 4px; - bottom: 4px; - background-color: #ffffff; - transition: 0.3s ease-out; - border-radius: 50%; - } + left: 4px; + bottom: 4px; + background-color: #ffffff; + transition: 0.3s ease-out; + border-radius: 50%; + } - ${Checkbox}:checked + & { - background-color: ${(props) => { - if (props.$color?.startsWith('--')) { - return `var(${props.$color});`; - } else { - return props.$color ?? 'var(--primary-color)'; - } - }};; - }}; - } + ${Checkbox}:checked + & { + background-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } + }}; + } - ${Checkbox}:checked + &:before { - transform: translateX(${(props) => { - switch (props.$size) { - case 's': - return '20px'; - case 'm': - return '24px'; - case 'l': - return '28px'; - default: - return `24px`; - } - }}); - background-color: #ffffff; - } + ${Checkbox}:checked + &:before { + transform: translateX( + ${(props) => { + switch (props.$size) { + case 's': + return '20px'; + case 'm': + return '24px'; + case 'l': + return '28px'; + default: + return `24px`; + } + }} + ); + background-color: #ffffff; + } `; /** From d988d3ddbf3bc4aa11abe1089a789253ab950f39 Mon Sep 17 00:00:00 2001 From: Giwon Date: Sun, 25 Aug 2024 03:35:54 +0900 Subject: [PATCH 03/97] =?UTF-8?q?feat:=20=EB=8C=80=EC=8B=9C=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=ED=99=88=20UI=20=EC=99=84=EC=84=B1=20+=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?+=20icon/png->icon/svg=20+=20App=20=EB=8C=80=EC=8B=9C=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=EB=9D=BC=EC=9A=B0=ED=8C=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 27 +- src/assets/icons/account.svg | 3 + src/assets/icons/add.svg | 3 + src/assets/icons/checked.svg | 3 + src/assets/icons/delete.svg | 10 + src/assets/icons/dragable.svg | 10 + src/assets/icons/edit.svg | 10 + src/assets/icons/home.svg | 3 + src/assets/icons/index.js | 11 + src/assets/icons/menu/Admin.png | Bin 391 -> 0 bytes src/assets/icons/menu/Executive.png | Bin 361 -> 0 bytes src/assets/icons/menu/History.png | Bin 261 -> 0 bytes src/assets/icons/menu/Home.png | Bin 321 -> 0 bytes src/assets/icons/menu/ManageUser.png | Bin 428 -> 0 bytes src/assets/icons/person.svg | 10 + src/assets/icons/remove.svg | 10 + src/assets/icons/timeline.svg | 10 + src/assets/icons/verified.svg | 3 + src/components/display/NumberDisplay.jsx | 50 +++ src/components/display/dashboard/Admin.jsx | 21 -- .../display/dashboard/Dashboard.styled.js | 73 ----- .../display/dashboard/Executive.jsx | 21 -- src/components/display/dashboard/History.jsx | 21 -- src/components/display/dashboard/Home.jsx | 136 --------- src/components/display/dashboard/Users.jsx | 21 -- src/components/display/dashboard/index.js | 5 - src/components/layouts/DashboardLayout.jsx | 87 ++++-- src/components/navigation/DashboardNav.jsx | 286 ++++++++++++------ src/pages/dashboard/Admin.jsx | 15 + src/pages/dashboard/Dashboard.styled.js | 91 ++++++ src/pages/dashboard/Executive.jsx | 15 + src/pages/dashboard/History.jsx | 15 + src/pages/dashboard/Home.jsx | 174 +++++++++++ src/pages/dashboard/Users.jsx | 15 + src/pages/dashboard/index.js | 16 + src/transitions/fade-slide.css | 33 ++ 36 files changed, 786 insertions(+), 422 deletions(-) create mode 100644 src/assets/icons/account.svg create mode 100644 src/assets/icons/add.svg create mode 100644 src/assets/icons/checked.svg create mode 100644 src/assets/icons/delete.svg create mode 100644 src/assets/icons/dragable.svg create mode 100644 src/assets/icons/edit.svg create mode 100644 src/assets/icons/home.svg create mode 100644 src/assets/icons/index.js delete mode 100644 src/assets/icons/menu/Admin.png delete mode 100644 src/assets/icons/menu/Executive.png delete mode 100644 src/assets/icons/menu/History.png delete mode 100644 src/assets/icons/menu/Home.png delete mode 100644 src/assets/icons/menu/ManageUser.png create mode 100644 src/assets/icons/person.svg create mode 100644 src/assets/icons/remove.svg create mode 100644 src/assets/icons/timeline.svg create mode 100644 src/assets/icons/verified.svg create mode 100644 src/components/display/NumberDisplay.jsx delete mode 100644 src/components/display/dashboard/Admin.jsx delete mode 100644 src/components/display/dashboard/Dashboard.styled.js delete mode 100644 src/components/display/dashboard/Executive.jsx delete mode 100644 src/components/display/dashboard/History.jsx delete mode 100644 src/components/display/dashboard/Home.jsx delete mode 100644 src/components/display/dashboard/Users.jsx delete mode 100644 src/components/display/dashboard/index.js create mode 100644 src/pages/dashboard/Admin.jsx create mode 100644 src/pages/dashboard/Dashboard.styled.js create mode 100644 src/pages/dashboard/Executive.jsx create mode 100644 src/pages/dashboard/History.jsx create mode 100644 src/pages/dashboard/Home.jsx create mode 100644 src/pages/dashboard/Users.jsx create mode 100644 src/pages/dashboard/index.js create mode 100644 src/transitions/fade-slide.css diff --git a/src/App.jsx b/src/App.jsx index c80710c..377ecea 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -3,7 +3,7 @@ // padding 같은 추가적인 작업이 없다면 내용이 내비바보다 더 높은 위치에서부터 표시되어 일부 내용이 보이지 않습니다. // 내비바의 높이는 60px입니다. -import { Routes, Route } from 'react-router-dom'; +import { Routes, Route, useLocation } from 'react-router-dom'; import { GlobalStyle } from './styles/global'; import { MainLayout } from './components/layouts/MainLayout'; @@ -13,17 +13,14 @@ import MainPage from './pages/MainPage'; import NotFound from './pages/NotFound'; import { DashboardLayout } from './components/layouts/DashboardLayout'; -import { - DashboardAdmin, - DashboardHome, - DashboardHistory, - DashboardExecutive, - DashboardUsers, -} from './components/display/dashboard'; +import { Dashboard } from './pages/dashboard'; import DevDocument from './pages/DevDocument'; import Board from './pages/Board'; export default function App() { + // location.key을 통해 화면 전환 시 컴포넌트 충돌/중복 방지 용으로 사용됩니다. + const location = useLocation(); + return ( <> @@ -33,15 +30,17 @@ export default function App() { } /> } /> } /> - }> - } /> - } /> + + {/* 대시보드 페이지 */} + }> + } /> + } /> } + element={} /> - } /> - } /> + } /> + } /> } /> diff --git a/src/assets/icons/account.svg b/src/assets/icons/account.svg new file mode 100644 index 0000000..9be1309 --- /dev/null +++ b/src/assets/icons/account.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/add.svg b/src/assets/icons/add.svg new file mode 100644 index 0000000..beda449 --- /dev/null +++ b/src/assets/icons/add.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/checked.svg b/src/assets/icons/checked.svg new file mode 100644 index 0000000..39d10e9 --- /dev/null +++ b/src/assets/icons/checked.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/delete.svg b/src/assets/icons/delete.svg new file mode 100644 index 0000000..9e8cfa1 --- /dev/null +++ b/src/assets/icons/delete.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/dragable.svg b/src/assets/icons/dragable.svg new file mode 100644 index 0000000..2a615c1 --- /dev/null +++ b/src/assets/icons/dragable.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/edit.svg b/src/assets/icons/edit.svg new file mode 100644 index 0000000..9aff580 --- /dev/null +++ b/src/assets/icons/edit.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/home.svg b/src/assets/icons/home.svg new file mode 100644 index 0000000..7a7fd03 --- /dev/null +++ b/src/assets/icons/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js new file mode 100644 index 0000000..ab27b42 --- /dev/null +++ b/src/assets/icons/index.js @@ -0,0 +1,11 @@ +export { default as AccountIcon } from './account.svg'; +export { default as AddIcon } from './add.svg'; +export { default as CheckedIcon } from './checked.svg'; +export { default as DeleteIcon } from './delete.svg'; +export { default as DragableIcon } from './dragable.svg'; +export { default as EditIcon } from './edit.svg'; +export { default as HomeIcon } from './home.svg'; +export { default as PersonIcon } from './person.svg'; +export { default as RemoveIcon } from './remove.svg'; +export { default as TimelineIcon } from './timeline.svg'; +export { default as VerifiedIcon } from './verified.svg'; diff --git a/src/assets/icons/menu/Admin.png b/src/assets/icons/menu/Admin.png deleted file mode 100644 index 72cd7da6c53af646adb8b84b47b30e356e7770d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)X1^@s6D=Y3@00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPa10BH;bOPOg5g4H(;07`EU7rD|1k^9?z5Ad|?$S1;M2iA5 zmx1(4h+r-}2pfLE3oBtka{$qeu;wmWh--wHYKnLTAuW0pIu+xD=bn)_8L0|GWxKGN z53z-C%deHT7K0~fB2sxP`ZH!5;2i9Ss}e`I2#pX?TJr`C(5^*7{Fur!8K6sItClJ8 zsRkag1-{S9Bqd&Ays;QW!TrG4n>gmTn7dgFVsPCXKWWq6T#X#lP0rPJI79pfv7W35 zmBu6<|5f<@mRe2XvYR0jthAY2eWE(g-MiqlIDhdjXp?{|ci)Kl;>sjP2Whkz%g6FF lG6I!4;aYgfvg}TazylUrVHg@E2EzaV002ovPDHLkV1h+km7xFt diff --git a/src/assets/icons/menu/Executive.png b/src/assets/icons/menu/Executive.png deleted file mode 100644 index 2dccc5deb7149c3e81769293442f04e04c1628b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^5)Cu0O^o(2DJ8YpJbe={wHGd3jJ0IjfpF|Z{&;f zzS2@NaI)-q>9s&>s;kR&=cBq4IU>2PNN!)pe*R3ZleL{=m6F-hiruG#YC4{(3ve9W zr@iOv5sTbEt*?$wZPo}sbFh1PHY@uTv3-vjx$BP$>xirJ?Co*e4GakePgg&ebxsLQ E0Fi=Vob}<@a>0A; z&ELOmSIJ&{S+zjtM8T8`99uW^i>#Wce{!+g#1qSXmdKI;Vst E06ei@O#lD@ diff --git a/src/assets/icons/menu/Home.png b/src/assets/icons/menu/Home.png deleted file mode 100644 index fa38022abb8d747d32d0ce468a585a3bf61ce170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^5=2AbzcAg diff --git a/src/assets/icons/menu/ManageUser.png b/src/assets/icons/menu/ManageUser.png deleted file mode 100644 index 6b4230750bd5420642e960700758e25283f6e594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmV;d0aN~oP)X1^@s6D=Y3@00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPFxwtxqgbg5mvku* zs9+Yp0>#AFs{#(qw0=6ASy79mF&fPa;_=wxGm_pTbk;|S4#mU@wW?4&bw(ssr3!Q^ zp$USSRsJ-R@C$wJp+G@rz)Br*t@4+u!Cwud3*h!GqkWJ!smzJ>by8q)a_&5Q@%gJ=A + + + + + + + + + diff --git a/src/assets/icons/remove.svg b/src/assets/icons/remove.svg new file mode 100644 index 0000000..2337409 --- /dev/null +++ b/src/assets/icons/remove.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/timeline.svg b/src/assets/icons/timeline.svg new file mode 100644 index 0000000..95b4490 --- /dev/null +++ b/src/assets/icons/timeline.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/verified.svg b/src/assets/icons/verified.svg new file mode 100644 index 0000000..997168a --- /dev/null +++ b/src/assets/icons/verified.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/display/NumberDisplay.jsx b/src/components/display/NumberDisplay.jsx new file mode 100644 index 0000000..a2510ac --- /dev/null +++ b/src/components/display/NumberDisplay.jsx @@ -0,0 +1,50 @@ +// NumberDisplay.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import +import styled from 'styled-components'; + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Text } from '../typograph/Text'; + +const NumberDisplayBox = styled.div.attrs({ + id: 'dashboard-number-display', +})` + display: flex; + flex-direction: column; + gap: 10px; + + width: 100%; + + & span:not(:last-child) { + margin-bottom: 4px; + } +`; + +/** + * 라벨과 함께 숫자를 강조하여 표시합니다. + * @param {string} label *라벨 + * @param {number} number *표시될 숫자 + * @param {string} detailed_label 상세 라벨 + * @returns {ReactElement} NumberDisplay + */ +export const NumberDisplay = ({ label, number, detailed_label }) => { + return ( + +
+ {/* 만약 detailed_label을 받으면 표시합니다. */} + {detailed_label ? ( + + {detailed_label} + + ) : null} + + {label} + +
+ + {number} + +
+ ); +}; diff --git a/src/components/display/dashboard/Admin.jsx b/src/components/display/dashboard/Admin.jsx deleted file mode 100644 index c8f9514..0000000 --- a/src/components/display/dashboard/Admin.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useEffect } from 'react'; - -import useDashboard from '../../../stores/dashboard'; - -export default function DashboardAdmin() { - const { moveAdmin } = useDashboard(); - - useEffect(() => { - moveAdmin(); - }, []); - - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - - return ( - <> - {ScrollTestPTag.map((number) => ( -

ADMIN {number}

- ))} - - ); -} diff --git a/src/components/display/dashboard/Dashboard.styled.js b/src/components/display/dashboard/Dashboard.styled.js deleted file mode 100644 index 3298939..0000000 --- a/src/components/display/dashboard/Dashboard.styled.js +++ /dev/null @@ -1,73 +0,0 @@ -import styled from 'styled-components'; - -export const RowFlex = styled.div` - display: flex; - flex-direction: row; - gap: ${(props) => props.$gap}; -`; - -export const ColumnFlex = styled.div` - display: flex; - flex-direction: column; - gap: ${(props) => props.$gap}; -`; - -export const Container = styled.div` - width: ${(props) => { - if (props.$width) { - return props.$width; - } else { - return 'fit-content;'; - } - }}; - - height: ${(props) => { - if (props.$height) { - return props.$height; - } else { - return 'fit-content'; - } - }}; - - display: flex; - flex-direction: column; - gap: 30px; - - padding: 30px; - box-sizing: border-box; - border-radius: 20px; - - border: 1px solid #21272e; -`; -export const SectionTitle = styled.h2` - margin: 0px 0px 20px 10px; - font-size: ${(props) => props.$size ?? '25px'}; - font-weight: 800; -`; - -export const Title = styled.h3` - margin: 0; - font-size: ${(props) => props.$size ?? '18px'}; - font-weight: ${(props) => props.$weight ?? 'normal'}; - color: ${(props) => props.$color ?? '#ffffff'}; -`; - -export const Button = styled.button` - transition: background-color 0.2s ease-in-out; - - &:hover { - background-color: #ffffff1f; - } - - outline: none; - border: none; - - width: ${(props) => props.$width ?? 'fit-content'}; - padding: 12px 20px; - - background-color: #ffffff10; - font-size: 14px; - font-weight: lighter; - - border-radius: 100px; -`; diff --git a/src/components/display/dashboard/Executive.jsx b/src/components/display/dashboard/Executive.jsx deleted file mode 100644 index 3bc2abb..0000000 --- a/src/components/display/dashboard/Executive.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useEffect } from 'react'; - -import useDashboard from '../../../stores/dashboard'; - -export default function DashboardExecutive() { - const { moveExecutive } = useDashboard(); - - useEffect(() => { - moveExecutive(); - }, []); - - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - - return ( - <> - {ScrollTestPTag.map((number) => ( -

EXECUTIVES {number}

- ))} - - ); -} diff --git a/src/components/display/dashboard/History.jsx b/src/components/display/dashboard/History.jsx deleted file mode 100644 index ef4a046..0000000 --- a/src/components/display/dashboard/History.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useEffect } from 'react'; - -import useDashboard from '../../../stores/dashboard'; - -export default function DashboardHistory() { - const { moveHistory } = useDashboard(); - - useEffect(() => { - moveHistory(); - }, []); - - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - - return ( - <> - {ScrollTestPTag.map((number) => ( -

HISTORY {number}

- ))} - - ); -} diff --git a/src/components/display/dashboard/Home.jsx b/src/components/display/dashboard/Home.jsx deleted file mode 100644 index 3b56fbe..0000000 --- a/src/components/display/dashboard/Home.jsx +++ /dev/null @@ -1,136 +0,0 @@ -import { useEffect } from 'react'; - -import useDashboard from '../../../stores/dashboard'; -import * as DS from './Dashboard.styled'; - -const HistoryInfo = ({ historyCount = 0, yearCount = 0 }) => { - return ( - - 연혁 - - - - 전체 연혁 개수 - {historyCount} - - - 연도 개수 - {yearCount} - - - 연혁 추가/제거로 이동 - - - ); -}; - -const UsersInfo = ({ userCount = 0 }) => { - return ( - - 회원 - - - 전체 회원 수 - {userCount} - - 회원 관리로 이동 - - - ); -}; - -const ExecutiveInfo = ({ - allExecutiveCount = 0, - currentExecutiveCount = 0, -}) => { - return ( - - 임원진 - - - - 역대 임원진 수 - {allExecutiveCount} - - - 현재 임원진 수 - {currentExecutiveCount} - - - 임원진 추가/제거로 이동 - - - ); -}; - -const AdminInfo = ({ AdminCount = 0 }) => { - return ( - - 관리자 - - - 등록된 관리자 수 - {AdminCount} - - 관리자 추가/제거로 이동 - - - ); -}; - -const PostInfo = ({ allPostCount = 0, monthPostCount = 0 }) => { - return ( - - 소식지 - - - - - - 전체 기간 - - 게시한 소식지 수 - - {allPostCount} - - - - - 지난 28일 - - 게시한 소식지 수 - - {monthPostCount} - - - - - ); -}; - -export default function DashboardHome() { - const { moveHome } = useDashboard(); - - useEffect(() => { - moveHome(); - }, []); - - return ( - - - - - - - - - - - - - - - - - ); -} diff --git a/src/components/display/dashboard/Users.jsx b/src/components/display/dashboard/Users.jsx deleted file mode 100644 index 2ab49cb..0000000 --- a/src/components/display/dashboard/Users.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useEffect } from 'react'; - -import useDashboard from '../../../stores/dashboard'; - -export default function DashboardUsers() { - const { moveUsers } = useDashboard(); - - useEffect(() => { - moveUsers(); - }, []); - - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - - return ( - <> - {ScrollTestPTag.map((number) => ( -

USERS {number}

- ))} - - ); -} diff --git a/src/components/display/dashboard/index.js b/src/components/display/dashboard/index.js deleted file mode 100644 index 86784a3..0000000 --- a/src/components/display/dashboard/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as DashboardAdmin } from './Admin'; -export { default as DashboardExecutive } from './Executive'; -export { default as DashboardHistory } from './History'; -export { default as DashboardHome } from './Home'; -export { default as DashboardUsers } from './Users'; diff --git a/src/components/layouts/DashboardLayout.jsx b/src/components/layouts/DashboardLayout.jsx index 77195bf..59e3bc2 100644 --- a/src/components/layouts/DashboardLayout.jsx +++ b/src/components/layouts/DashboardLayout.jsx @@ -1,43 +1,86 @@ -import { Outlet, useLocation } from 'react-router-dom'; +// DashboardLayout.jsx +// 코드 작성자 : GiHhub @whitedev77773 +// 외부 라이브러리에서 import +import React from 'react'; +import { createRef } from 'react'; +import { useOutlet } from 'react-router-dom'; +import { TransitionGroup, CSSTransition } from 'react-transition-group'; import styled from 'styled-components'; + +// 사용자가 생성한 컴포넌트 및 JS파일 import import { DashboardNav } from '../navigation/DashboardNav'; -const NavSection = styled.section` - position: fixed; - top: 80px; - left: 0; +// 전환 애니메이션 +import '../../transitions/fade-slide.css'; - width: 250px; +const Layout = styled.div.attrs({ + id: 'dashboard', +})` + position: fixed; + margin-top: 80px; + width: 100vw; height: calc(100vh - 80px); - border-right: 1px solid #ffffff10; -`; + border-top: 1px solid var(--container-border); -const Content = styled.section` - overflow: scroll; + display: flex; - position: fixed; - top: 80px; - left: 250px; + & > #dashboard-nav { + height: calc(100vh - 80px); + } +`; +const Content = styled(TransitionGroup).attrs({ + id: 'dashboard-content', +})` + transition: width 0.4s cubic-bezier(0.43, 0.53, 0.16, 0.96); + + position: relative; + overflow: scroll; width: calc(100% - 250px); - height: calc(100% - 80px); + height: 100%; + box-sizing: border-box; padding: 40px; - box-sizing: border-box; + @media screen and (max-width: 1080px) { + width: calc(100% - 80px); + } `; -export const DashboardLayout = () => { +/** + * 대시보드 레이아웃 + */ +export const DashboardLayout = ({ location }) => { + // Warning: findDOMNode is deprecated and will be remove 해제 + // 안정적인 사용을 위해 createRef로 nodeRef를 설정해야합니다. + const nodeRef = createRef(null); + + // 은 화면 전환 시 다음에 표시될 컴포넌트에도 종료 이펙트가 적용됩니다. + // 따라서 useOutlet()을 통해 기존에 마운트된 컴포넌트를 기억하여 이전 컴포넌트에 종료 이펙트를 적용합니다. + const currentOutlet = useOutlet(); + return ( - <> - - - + + {/* 내비바 */} + + {/* 콘텐츠 */} - + {/* location.key로 랜덤한 index를 부여하여 화면 전환 시 컴포넌트 충돌이 없도록 예방합니다. */} + +
+ {/* 전환 후 표시될 컴포넌트 */} + {currentOutlet} +
+
- +
); }; diff --git a/src/components/navigation/DashboardNav.jsx b/src/components/navigation/DashboardNav.jsx index 2f559dd..2e193e5 100644 --- a/src/components/navigation/DashboardNav.jsx +++ b/src/components/navigation/DashboardNav.jsx @@ -1,125 +1,235 @@ -import HomeIcon from '/src/assets/icons/menu/Home.png'; -import HistoryIcon from '/src/assets/icons/menu/History.png'; -import ExecutiveIcon from '/src/assets/icons/menu/Executive.png'; -import AdminIcon from '/src/assets/icons/menu/Admin.png'; -import ManageUserIcon from '/src/assets/icons/menu/ManageUser.png'; +// DashboardNav.jsx +// 코드 작성자 : GiHhub @whitedev77773 +// 외부 라이브러리에서 import import styled from 'styled-components'; +import { useLocation, useNavigate, Link } from 'react-router-dom'; -import { Menu } from './Menu'; -import { useNavigate } from 'react-router-dom'; +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Span } from '../typograph/Text'; +import { + HomeIcon, + TimelineIcon, + PersonIcon, + VerifiedIcon, + AccountIcon, +} from '../../assets/icons'; + +const cubicBezier = 'cubic-bezier(.43,.53,.16,.96)'; + +const Nav = styled.div.attrs({ + id: 'dashboard-nav', +})` + transition: width 0.4s ${cubicBezier}; -const DashboardNavBox = styled.div` - position: fixed; width: 250px; + border-right: 1px solid var(--container-border); + box-sizing: border-box; + + padding: 40px 0px; + + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + width: 80px; + } +`; + +const Logo = styled.div.attrs({ + id: 'dashboard-logo', +})` + transition: + width 0.4s ${cubicBezier}, + height 0.4s ${cubicBezier}; + width: 82px; + height: 82px; + background-image: var(--sqaure-logo-url); + background-size: contain; + background-repeat: no-repeat; + + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + width: 40px; + height: 40px; + } +`; - padding: 40px 14px; +const Header = styled.div.attrs({ + id: 'dashboard-nav-header', +})` display: flex; flex-direction: column; justify-content: center; align-items: center; - gap: 40px; +`; - box-sizing: border-box; +const Title = styled(Span).attrs({ + id: 'dashboard-nav-header-title', + $weight: 'bold', +})` + margin-top: 20px; + + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + display: none; + } +`; + +const SubTitle = styled(Span).attrs({ + id: 'dashboard-nav-header-subtitle', + $size: 'xs', + $color: '--secondary-text-color', +})` + margin-top: 4px; + + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + display: none; + } +`; + +const Menus = styled.div.attrs({ + id: 'dashboard-nav-menus', +})` + margin-top: 40px; + padding: 0px 14px; + + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + padding: 0px; + } `; -const Title = styled.div` - width: 100%; +const MenuItem = styled.div.attrs({ + id: 'dashboard-nav-menu-item', +})` + transition: opacity 0.3s ease-in-out; + padding: 10px; + box-sizing: border-box; + + position: relative; display: flex; - flex-direction: column; - justify-content: center; + justify-content: start; align-items: center; - gap: 20px; + gap: 10px; + + cursor: pointer; + + // 기본 투명도 + opacity: 0.4; + background-color: transparent; + + // 선택되면 완전 잘보이게 + &.active { + opacity: 1; + } + + // 선택됬을 때 메뉴 배경 + // :before로 가상 오브젝트 생성 후 메인 텍스트 컬러에 투명도 적용 + &.active:before { + position: absolute; + content: ''; + left: 0; + top: 0; + width: 100%; + height: 100%; + border-radius: 12px; + background-color: var(--primary-text-color); + opacity: 0.05; + } + + & > svg { + fill: var(--primary-text-color); + } + + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + flex-direction: column; + + & > svg { + width: 30px !important; + height: 30px !important; + } + + &.active:before { + border-radius: 0px; + } + } `; -const Menus = styled.div` - width: 100%; +const MenuName = styled(Span).attrs({ + $size: 's', + $color: '--primary-text-color', + $weight: 'regular', +})` + // 가로 화면이 1080px 미만일 때 + @media screen and (max-width: 1080px) { + margin-top: -2px; + font-size: 0px; + &:before { + font-size: 13px; + color: var(--primary-text-color); + content: '${(props) => props.$shortsName}'; + white-space: nowrap; // 줄바꿈 방지 + } + } `; -export const DashboardNav = () => { +/** + * + * @param {import("react").ReactSVGElement} icon 컴포넌트로 불러온 svg 파일 + * @param {text} children 무조건 텍스트 ( -> X) + * @returns + */ +const Menu = ({ path, icon, children, shortsName }) => { const navigate = useNavigate(); + const location = useLocation(); - // 여기에 토큰 유효 검사해서 관리자 아니면 메인으로 내보내기 + // 만약 주소의 마지막 path와 선택된 메뉴의 이름이 같다면 선택된 메뉴로 스타일을 적용합니다. + // 또한 클릭 시 동일한 페이지임에도 애니메이션이 적용되는 것을 방지합니다. + const isActive = + location.pathname.replaceAll('/', '') === + `dashboard${path.replaceAll('/', '')}`; return ( - - - <img - width="82px" - src="/dashboard_nav_logo.png" - alt="관리자 페이지용 글자 없는 로고" - /> - <div> - <p - style={{ - fontWeight: 'bold', - fontSize: '15px', - textAlign: 'center', - marginBottom: '6px', - }} - > - KERT 대시보드 - </p> - <p - style={{ - fontWeight: 'normal', - fontSize: '12px', - textAlign: 'center', - color: '#ffffff88', - }} - > - Management System - </p> - </div> - + { + isActive ? null : navigate(`/dashboard${path}`); + }} + className={isActive ? 'active' : ''} + > + {icon} + {children} + + ); +}; + +export const DashboardNav = () => { + return ( + ); }; diff --git a/src/pages/dashboard/Admin.jsx b/src/pages/dashboard/Admin.jsx new file mode 100644 index 0000000..1dce589 --- /dev/null +++ b/src/pages/dashboard/Admin.jsx @@ -0,0 +1,15 @@ +// Admin.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Header } from './Dashboard.styled'; + +export default function Admin() { + return ( + <> +
관리자 추가/제거
+ + ); +} diff --git a/src/pages/dashboard/Dashboard.styled.js b/src/pages/dashboard/Dashboard.styled.js new file mode 100644 index 0000000..f4e9196 --- /dev/null +++ b/src/pages/dashboard/Dashboard.styled.js @@ -0,0 +1,91 @@ +// dashboard.styled.js +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import +import styled from 'styled-components'; + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Container as Cont } from '../../components/forms/Container'; +import { Span } from '../../components/typograph/Text'; + +/** + * 대시보드 헤더 + * 기존 Span을 상속하여 사용함 + * @type {import("react").ReactHTMLElement} + */ +export const Header = styled(Span).attrs({ + id: 'dashboard-header', + $size: 'xl', + $weight: 'extrabold', +})` + margin-left: 6px; + margin-bottom: 20px; +`; + +/** + * 대시보드용 컨테이너 + * 기존 Container를 상속하여 사용함 + * @type {import("react").ReactHTMLElement} + */ +export const Container = styled(Cont).attrs({ + id: 'dashboard-container', +})` + width: 360px; + + margin: 0; + padding: 30px; + border-radius: 20px; + box-sizing: border-box; + + display: flex; + flex-direction: column; + gap: 30px; +`; + +/** + * 컨테이너 헤더 + * @type {import("react").ReactHTMLElement} + */ +export const ContainerHeader = styled(Span).attrs({ + id: 'dashboard-container-header', + $size: 'l', + $weight: 'bold', +})``; + +/** + * 대시보드용 반투명 버튼 + * @type {import("react").ReactHTMLElement} + */ +export const Button = styled.button` + transition: background-color 0.2s ease-out; + + position: relative; + cursor: pointer; + overflow: hidden; + + width: ${(props) => props.$width ?? 'fit-content'}; + height: ${(props) => props.$height ?? 'fit-content'}; + padding: 12px 20px; + border-radius: 26px; + + border: none; + outline: none; + color: var(--primary-text-color); + background-color: var(--transparent-button-background); + font-weight: 700; + + box-sizing: border-box; + + &:hover { + background-color: var(--transparent-button-background-focus); + } +`; + +export const BoardColumn = styled.div` + margin-right: 24px; + margin-bottom: 24px; + + display: inline-flex; + flex-direction: column; + gap: 24px; +`; diff --git a/src/pages/dashboard/Executive.jsx b/src/pages/dashboard/Executive.jsx new file mode 100644 index 0000000..8a882a6 --- /dev/null +++ b/src/pages/dashboard/Executive.jsx @@ -0,0 +1,15 @@ +// Executive.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Header } from './Dashboard.styled'; + +export default function Executive() { + return ( + <> +
임원진 추가/제거
+ + ); +} diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx new file mode 100644 index 0000000..98cf387 --- /dev/null +++ b/src/pages/dashboard/History.jsx @@ -0,0 +1,15 @@ +// History.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Header } from './Dashboard.styled'; + +export default function History() { + return ( + <> +
연혁 추가/제거
+ + ); +} diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx new file mode 100644 index 0000000..51add85 --- /dev/null +++ b/src/pages/dashboard/Home.jsx @@ -0,0 +1,174 @@ +// Home.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import +import { useNavigate } from 'react-router-dom'; + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { + Header, + Container, + ContainerHeader, + Button, + BoardColumn, +} from './Dashboard.styled'; +import { NumberDisplay } from '../../components/display/NumberDisplay'; + +const HistoryBoard = ({ name, navigate }) => { + return ( + + {name} +
+ + +
+ +
+ ); +}; + +const ExecutiveBoard = ({ name, navigate }) => { + return ( + + {name} +
+ + +
+ +
+ ); +}; + +const AdminBoard = ({ name, navigate }) => { + return ( + + {name} +
+ +
+ +
+ ); +}; + +const UserBoard = ({ name, navigate }) => { + return ( + + {name} +
+ +
+ +
+ ); +}; + +const PostBoard = ({ name, navigate }) => { + return ( + + {name} +
+ + +
+ +
+ ); +}; + +export default function Home() { + const navigate = useNavigate(); + + return ( + <> + {/* 유튜브 스튜디오의 배열을 따라갑니다. */} +
+ {/* 1차적으로 가로 방향 선 배치 후 2차적으로 세로 방향 후 배치 */} + + + + + + + + + + + + + ); +} diff --git a/src/pages/dashboard/Users.jsx b/src/pages/dashboard/Users.jsx new file mode 100644 index 0000000..4152972 --- /dev/null +++ b/src/pages/dashboard/Users.jsx @@ -0,0 +1,15 @@ +// Users.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Header } from './Dashboard.styled'; + +export default function Users() { + return ( + <> +
회원 관리
+ + ); +} diff --git a/src/pages/dashboard/index.js b/src/pages/dashboard/index.js new file mode 100644 index 0000000..7af524c --- /dev/null +++ b/src/pages/dashboard/index.js @@ -0,0 +1,16 @@ +// src/pages/dashboard/index.js +// 코드 작성자 : GiHhub @whitedev77773 + +import Admin from './Admin.jsx'; +import Executive from './Executive.jsx'; +import History from './History.jsx'; +import Home from './Home.jsx'; +import Users from './Users.jsx'; + +export const Dashboard = { + Admin, + Executive, + History, + Home, + Users, +}; diff --git a/src/transitions/fade-slide.css b/src/transitions/fade-slide.css new file mode 100644 index 0000000..efafed1 --- /dev/null +++ b/src/transitions/fade-slide.css @@ -0,0 +1,33 @@ +/* 정방향 || 들어오는 효과 */ +.fade-slide-enter { + opacity: 0; + transform: translateX(-20px); +} + +.fade-slide-enter-active { + position: absolute; + opacity: 1; + transform: translateX(0px); + transition: all 500ms cubic-bezier(.27,.02,.26,.99) 100ms; +} + +.fade-slide-enter-done { + opacity: 1; +} + + +/* 정방향 || 사라지는 효과 */ +.fade-slide-exit { + opacity: 1; + transform: translateX(0px); +} + +.fade-slide-exit-active { + opacity: 0; + transform: translateX(70px); + transition: all 400ms cubic-bezier(.27,.02,.26,.99); +} + +.fade-slide-exit-done { + opacity: 0; +} From 425e58e278931e0fa8a028a558204f1dbf8f1afa Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 26 Aug 2024 13:35:25 +0900 Subject: [PATCH 04/97] =?UTF-8?q?chore:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20store/dashboard.js=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/NotFound.jsx | 8 -------- src/stores/dashboard.js | 13 ------------- 2 files changed, 21 deletions(-) delete mode 100644 src/stores/dashboard.js diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx index 6bba396..fdb9d66 100644 --- a/src/pages/NotFound.jsx +++ b/src/pages/NotFound.jsx @@ -1,14 +1,6 @@ // 정의되지 않은 페이지를 접속했을 때 보이는 페이지입니다. import { useEffect } from 'react'; -import useDashboard from '../stores/dashboard'; - export default function NotFound() { - const { notFound } = useDashboard(); - - useEffect(() => { - notFound(); - }, []); - return <>찾을 수 없는 페이지; } diff --git a/src/stores/dashboard.js b/src/stores/dashboard.js deleted file mode 100644 index 7c99513..0000000 --- a/src/stores/dashboard.js +++ /dev/null @@ -1,13 +0,0 @@ -import { create } from 'zustand'; - -const useDashboard = create((set) => ({ - SelectedDashboardMenu: '', - moveHome: () => set((state) => ({ SelectedDashboardMenu: 'home' })), - moveHistory: () => set((state) => ({ SelectedDashboardMenu: 'history' })), - moveExecutive: () => set((state) => ({ SelectedDashboardMenu: 'executive' })), - moveAdmin: () => set((state) => ({ SelectedDashboardMenu: 'admin' })), - moveUsers: () => set((state) => ({ SelectedDashboardMenu: 'users' })), - notFound: () => set((state) => ({ SelectedDashboardMenu: '' })), -})); - -export default useDashboard; From c2e352cc23369c609b0cf026f09171dc06f93632 Mon Sep 17 00:00:00 2001 From: huisuu Date: Mon, 26 Aug 2024 13:43:43 +0900 Subject: [PATCH 05/97] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login.jsx | 65 ++++++++++++++++++++ src/styles/Login.css | 142 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 src/pages/Login.jsx create mode 100644 src/styles/Login.css diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx new file mode 100644 index 0000000..a9c6d7d --- /dev/null +++ b/src/pages/Login.jsx @@ -0,0 +1,65 @@ +import { useState } from 'react'; +import axios from 'axios'; +// import { useNavigate } from 'react-router-dom'; + +import '../styles/Login.css'; + +export default function SignUp() { + const [password, setPassword] = useState(''); + const [student, setStudenet] = useState(''); + + // const navigate = useNavigate(); + + const handleLogin = async () => { + try { + const userData = { + student: student, + password: password, + }; + + // 서버로 로그인 정보를 전송합니다. + const response = await axios.post('155.230.118.35', userData); + console.log('Sign up successful:', response.data); + + // 로그인 성공 시 ~page로 이동합니다. + // navigate("/page"); + } catch (error) { + console.error('Error:', error); + } + }; + + return ( +
+
+
+
+
로그인
+ {/* student number */} +
+ setStudenet(e.target.value)} + /> +
+ {/* pw */} +
+ setPassword(e.target.value)} + /> +
+ +
+
+
+
+ ); +} diff --git a/src/styles/Login.css b/src/styles/Login.css new file mode 100644 index 0000000..20db12d --- /dev/null +++ b/src/styles/Login.css @@ -0,0 +1,142 @@ +.Login { + background-color: #ffffff; + display: flex; + flex-direction: row; + justify-content: center; + width: 100%; +} + +.Login .div { + background-color: #ffffff; + height: 1080px; + /* overflow: hidden; */ + position: relative; + width: 1920px; +} + +.Login .middleSide { + background-color: #ffffff; + height: 980px; + left: 0; + /* position: absolute; */ + top: 0px; + width: 1920px; +} + +.Login .view { + background-color: #ffffff; + height: 939px; + left: 727px; + position: relative; + top: 0px; + width: 466px; +} + +.Login .text-login { + color: #000000; + font-family: 'Inter-Bold', Helvetica; + font-size: 55px; + font-weight: 650; + left: 89px; + letter-spacing: 0; + line-height: normal; + position: absolute; + text-align: center; + top: 250px; + width: 288px; +} + +.Login .input-pw { + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 560px; + width: 350px; + font-size: 30px; +} + +.Login .input-pw::placeholder { + font-size: 25px; + padding: 10px; +} + +.Login .input-sn { + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 470px; + width: 350px; + font-size: 30px; +} + +.Login .input-sn::placeholder { + font-size: 25px; + padding: 10px; +} + +.Login .click-button { + background-color: #000000; + border-radius: 50px; + border: none; + height: 70px; + left: 52px; + position: absolute; + top: 680px; + width: 375px; + + color: #ffffff; + font-family: 'Inter-Thin', Helvetica; + font-size: 25px; + font-weight: 500; +} + +.Login .click-button:hover { + border: 2px solid #000000; + transition: all 0.2s ease-out; + cursor: pointer; +} + + +.Login .view-right { + height: 22px; + left: 1583px; + position: absolute; + top: 39px; + width: 244px; +} + +.Login .view-middle { + height: 30px; + left: 530px; + position: absolute; + top: 35px; + width: 808px; +} + +.Login .view-left { + height: 61px; + left: 74px; + position: absolute; + top: 19px; + width: 113px; +} \ No newline at end of file From d4941c4e6070ae2fe752dc80c9e1cd99b132c15e Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 26 Aug 2024 16:20:15 +0900 Subject: [PATCH 06/97] =?UTF-8?q?feature:=20Dashboard.Home=20=EB=A1=9C?= =?UTF-8?q?=EB=94=A9=20=ED=99=94=EB=A9=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/dashboard/Home.Loading.jsx | 60 ++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/pages/dashboard/Home.Loading.jsx diff --git a/src/pages/dashboard/Home.Loading.jsx b/src/pages/dashboard/Home.Loading.jsx new file mode 100644 index 0000000..8b4f382 --- /dev/null +++ b/src/pages/dashboard/Home.Loading.jsx @@ -0,0 +1,60 @@ +// Home.Loading.jsx +// 코드 작성자 : GiHhub @whitedev77773 + +// 외부 라이브러리에서 import +import styled from 'styled-components'; + +// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Container } from './Dashboard.styled'; +import { Header, BoardColumn } from './Dashboard.styled'; + +const SkeletonBox = styled(Container)` + width: ${(props) => props.width}; + height: ${(props) => props.height}; + + background: linear-gradient( + 45deg, + var(--container-primary-background) 35%, + var(--container-secondary-background) 50%, + var(--container-primary-background) 65% + ); + background-size: 400% 400%; + animation: skeletonAnimation 1.5s infinite ease-in-out; + + @keyframes skeletonAnimation { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } + } +`; + +export default function HomeLoading() { + // SkeletonBox의 크기를 설정합니다. + const width = '360px'; + const height = '240px'; + + return ( + <> + {/* Home.jsx의 배열을 맞춰야합니다 */} +
+ {/* 1차적으로 가로 방향 선 배치 후 2차적으로 세로 방향 후 배치 */} + + + + + + + + + + + + + ); +} From c5f47e7ccdb09b6a01446e15d67a2f8ce1d0e26e Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 26 Aug 2024 16:26:01 +0900 Subject: [PATCH 07/97] =?UTF-8?q?perf:=20Home.jsx=20=EB=A7=88=EC=9A=B4?= =?UTF-8?q?=ED=8A=B8=20=EC=8B=9C=20=EC=9D=B4=EC=A0=84=EC=97=90=20=EB=B0=9B?= =?UTF-8?q?=EC=9D=80=20API=20=EC=9D=91=EB=8B=B5=EC=9D=B4=20=EC=9E=88?= =?UTF-8?q?=EC=9C=BC=EB=A9=B4=20=EC=9E=AC=EB=A0=8C=EB=8D=94=EB=A7=81=20X?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/dashboard/Dashboard.styled.js | 14 +++++ src/pages/dashboard/Home.jsx | 79 +++++++++++++++++++------ src/stores/useDashboardStore.js | 23 +++++++ 3 files changed, 97 insertions(+), 19 deletions(-) create mode 100644 src/stores/useDashboardStore.js diff --git a/src/pages/dashboard/Dashboard.styled.js b/src/pages/dashboard/Dashboard.styled.js index f4e9196..c0dd946 100644 --- a/src/pages/dashboard/Dashboard.styled.js +++ b/src/pages/dashboard/Dashboard.styled.js @@ -30,12 +30,26 @@ export const Header = styled(Span).attrs({ export const Container = styled(Cont).attrs({ id: 'dashboard-container', })` + @keyframes show { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + + & > * { + animation: show 0.75s ease-in-out; + } + width: 360px; margin: 0; padding: 30px; border-radius: 20px; box-sizing: border-box; + overflow: hidden; display: flex; flex-direction: column; diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx index 51add85..457a30f 100644 --- a/src/pages/dashboard/Home.jsx +++ b/src/pages/dashboard/Home.jsx @@ -2,9 +2,12 @@ // 코드 작성자 : GiHhub @whitedev77773 // 외부 라이브러리에서 import +import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; // 사용자가 생성한 컴포넌트 및 JS파일 import +import HomeLoading from './Home.Loading'; +import useDashboard from '../../stores/useDashboardStore'; import { Header, Container, @@ -14,7 +17,7 @@ import { } from './Dashboard.styled'; import { NumberDisplay } from '../../components/display/NumberDisplay'; -const HistoryBoard = ({ name, navigate }) => { +const HistoryBoard = ({ name, data, navigate }) => { return ( {name} @@ -25,8 +28,8 @@ const HistoryBoard = ({ name, navigate }) => { justifyContent: 'space-between', }} > - - + + - + + + + + {Array.from({ length: 9 }).map((_, index) => ( + + ))} + ); } diff --git a/src/styles/global.js b/src/styles/global.js index e814a5f..ecbed9d 100644 --- a/src/styles/global.js +++ b/src/styles/global.js @@ -10,6 +10,7 @@ export const GlobalStyle = createGlobalStyle` --warning-color: #F1C40F; --success-color: #2ECC71; --container-border-width: 1px; + --transparent-button-background: rgba(255, 255, 255, 0.05); } body { From daf046a8c23360380554514dcd32d8c01676971b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=8C=ED=8C=8C?= Date: Fri, 30 Aug 2024 20:54:47 +0900 Subject: [PATCH 09/97] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EB=B7=B0=EC=96=B4=20UI=20=EA=B0=9C=EB=B0=9C=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 2 ++ src/pages/Article.jsx | 69 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/pages/Article.jsx diff --git a/src/App.jsx b/src/App.jsx index c80710c..0c596eb 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -22,6 +22,7 @@ import { } from './components/display/dashboard'; import DevDocument from './pages/DevDocument'; import Board from './pages/Board'; +import Article from './pages/Article'; export default function App() { return ( @@ -32,6 +33,7 @@ export default function App() { } /> } /> } /> + } /> } /> }> } /> diff --git a/src/pages/Article.jsx b/src/pages/Article.jsx new file mode 100644 index 0000000..9e1268e --- /dev/null +++ b/src/pages/Article.jsx @@ -0,0 +1,69 @@ +import styled from 'styled-components'; +import { Text } from '../components/typograph/Text'; + +const ArticleContainer = styled.div` + width: 100%; + margin: 0 auto; + margin-top: 80px; + padding: 3rem 4rem; + + @media (min-width: 640px) { + max-width: 640px; + } + @media (min-width: 768px) { + max-width: 768px; + } + @media (min-width: 1024px) { + max-width: 1024px; + } + @media (min-width: 1280px) { + max-width: 1280px; + } +`; + +const ArticleHeader = styled.div` + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + margin-bottom: 1rem; + gap: 1rem; +`; + +const ArticleTitleGroup = styled.div` + padding: 1rem 0; + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; +`; + +const ArticleHorizontalLine = styled.hr` + width: 100%; + margin: 1.5rem 0; + border: 1px solid #282c30; +`; + +export default function Article() { + return ( + + + + 카테고리 + + + + 제목을 입력하세요 + + + 카드에 표시될 설명을 입력하세요 + + + + KERT 관리자 | 2024.07.27 + + + + + ); +} From 281052b661cbda207623fce62d23e309ba0f2713 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sat, 31 Aug 2024 17:24:10 +0900 Subject: [PATCH 10/97] =?UTF-8?q?feat:=20navigate=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index a9c6d7d..8d50480 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import axios from 'axios'; -// import { useNavigate } from 'react-router-dom'; +import { useNavigate } from 'react-router-dom'; import '../styles/Login.css'; @@ -8,7 +8,7 @@ export default function SignUp() { const [password, setPassword] = useState(''); const [student, setStudenet] = useState(''); - // const navigate = useNavigate(); + const navigate = useNavigate(); const handleLogin = async () => { try { @@ -22,7 +22,7 @@ export default function SignUp() { console.log('Sign up successful:', response.data); // 로그인 성공 시 ~page로 이동합니다. - // navigate("/page"); + navigate('/MainPage'); } catch (error) { console.error('Error:', error); } From 39dde9eab068946836df7f9bdb3f1668c7361f26 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sat, 31 Aug 2024 18:30:07 +0900 Subject: [PATCH 11/97] =?UTF-8?q?feat:=20react-hook-form=20validation=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login.jsx | 85 +++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 8d50480..3093a5b 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -1,20 +1,23 @@ -import { useState } from 'react'; +// Login.jsx +// 코드 작성자 : GiHhub @huisuu + +import { useForm } from 'react-hook-form'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; import '../styles/Login.css'; +import '../styles/font.css'; export default function SignUp() { - const [password, setPassword] = useState(''); - const [student, setStudenet] = useState(''); + const { register, handleSubmit, formState: { errors } } = useForm(); const navigate = useNavigate(); - const handleLogin = async () => { + const onSubmit = async (data) => { try { const userData = { - student: student, - password: password, + student: data.student, + password: data.password, }; // 서버로 로그인 정보를 전송합니다. @@ -34,29 +37,53 @@ export default function SignUp() {
로그인
- {/* student number */} -
- setStudenet(e.target.value)} - /> -
- {/* pw */} -
- setPassword(e.target.value)} - /> -
- +
+ {/* student number */} +
+ + {errors.student && ( +

{errors.student.message}

+ )} +
+ {/* pw */} +
+ + {errors.password && ( +

{errors.password.message}

+ )} +
+ +
From c2c4fe7b45d7f5b899ade2b4b5ba85bde00cc95c Mon Sep 17 00:00:00 2001 From: huisuu Date: Sat, 31 Aug 2024 18:32:00 +0900 Subject: [PATCH 12/97] =?UTF-8?q?feat:=20react-hook-form=20validation=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 16 +++++++++++ package.json | 1 + src/App.jsx | 5 ++++ src/styles/Login.css | 66 +++++++++++++------------------------------- 4 files changed, 41 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 819360a..accda34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-hook-form": "^7.53.0", "react-router-dom": "^6.25.1", "styled-components": "^6.1.12", "zustand": "^4.5.4" @@ -3314,6 +3315,21 @@ "react": "^18.3.1" } }, + "node_modules/react-hook-form": { + "version": "7.53.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", + "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/package.json b/package.json index 615a685..1e3674a 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-hook-form": "^7.53.0", "react-router-dom": "^6.25.1", "styled-components": "^6.1.12", "zustand": "^4.5.4" diff --git a/src/App.jsx b/src/App.jsx index 0c596eb..54fc41a 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -24,6 +24,9 @@ import DevDocument from './pages/DevDocument'; import Board from './pages/Board'; import Article from './pages/Article'; +import Login from './pages/Login'; +import SignUp from './pages/SignUp'; + export default function App() { return ( <> @@ -34,6 +37,8 @@ export default function App() { } /> } /> } /> + } /> + } /> } /> }> } /> diff --git a/src/styles/Login.css b/src/styles/Login.css index 20db12d..2a8cc02 100644 --- a/src/styles/Login.css +++ b/src/styles/Login.css @@ -1,15 +1,21 @@ +/* + Login.jsx + 코드 작성자 : GiHhub @huisuu +*/ + +/* Apply font globally to the login container */ .Login { background-color: #ffffff; display: flex; flex-direction: row; justify-content: center; width: 100%; + font-family: 'NanumSquareNeo', sans-serif; } .Login .div { background-color: #ffffff; height: 1080px; - /* overflow: hidden; */ position: relative; width: 1920px; } @@ -18,7 +24,6 @@ background-color: #ffffff; height: 980px; left: 0; - /* position: absolute; */ top: 0px; width: 1920px; } @@ -34,9 +39,8 @@ .Login .text-login { color: #000000; - font-family: 'Inter-Bold', Helvetica; font-size: 55px; - font-weight: 650; + font-weight: 700; left: 89px; letter-spacing: 0; line-height: normal; @@ -46,7 +50,9 @@ width: 288px; } -.Login .input-pw { +/* Apply font to input fields */ +.Login .input-pw, +.Login .input-sn { align-items: flex-start; background-color: #ffffff; border: 2px solid; @@ -60,40 +66,26 @@ padding: 10px; left: 52px; position: absolute; - top: 560px; width: 350px; font-size: 30px; } -.Login .input-pw::placeholder { - font-size: 25px; - padding: 10px; +.Login .input-pw { + top: 560px; } .Login .input-sn { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; top: 470px; - width: 350px; - font-size: 30px; } +/* Apply font to placeholders */ +.Login .input-pw::placeholder, .Login .input-sn::placeholder { font-size: 25px; padding: 10px; } +/* Apply font to the button */ .Login .click-button { background-color: #000000; border-radius: 50px; @@ -103,9 +95,7 @@ position: absolute; top: 680px; width: 375px; - color: #ffffff; - font-family: 'Inter-Thin', Helvetica; font-size: 25px; font-weight: 500; } @@ -116,27 +106,9 @@ cursor: pointer; } - -.Login .view-right { - height: 22px; - left: 1583px; - position: absolute; - top: 39px; - width: 244px; -} - -.Login .view-middle { - height: 30px; - left: 530px; - position: absolute; - top: 35px; - width: 808px; -} - +/* Apply font to view sections */ +.Login .view-right, +.Login .view-middle, .Login .view-left { - height: 61px; - left: 74px; position: absolute; - top: 19px; - width: 113px; } \ No newline at end of file From 5e9af47a971f2cedee7007663b645674372ae192 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sun, 1 Sep 2024 15:55:44 +0900 Subject: [PATCH 13/97] =?UTF-8?q?feat:=20react-hook-form=20validation=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/SignUp.jsx | 234 ++++++++++++++++++----------- src/styles/SignUp.css | 338 +++++++++++------------------------------- 2 files changed, 236 insertions(+), 336 deletions(-) diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index 89e2243..1cd55f2 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -1,35 +1,27 @@ -import { useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { useNavigate, Link } from 'react-router-dom'; import axios from 'axios'; -// import { useNavigate } from 'react-router-dom'; import '../styles/SignUp.css'; +import '../font/main_font.css'; export default function SignUp() { - const [username, setUsername] = useState(''); - const [mail, setMail] = useState(''); - const [password, setPassword] = useState(''); - const [student, setStudenet] = useState(''); - const [major, setMajor] = useState(''); - const [generation, setGE] = useState(''); - // const navigate = useNavigate(); + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); - const handleSignUp = async () => { - try { - const userData = { - username: username, - mail: mail, - password: password, - student: student, - major: major, - generation: generation, - }; + const navigate = useNavigate(); + const onSubmit = async (data) => { + try { // 서버로 회원가입 정보를 전송합니다. - const response = await axios.post('155.230.118.35', userData); + const response = await axios.post('155.230.118.35', data); console.log('Sign up successful:', response.data); - // 회원가입 성공 시 ~page로 이동합니다. - // navigate("/page"); + // 회원가입 성공 시 메인 페이지로 이동합니다. + navigate('/Mainpage'); } catch (error) { console.error('Error:', error); } @@ -37,75 +29,141 @@ export default function SignUp() { }; return ( -
-
-
-
-
회원가입
- {/* name */} -
- setUsername(e.target.value)} - /> -
- {/* e-mail */} -
- setMail(e.target.value)} - /> -
- {/* pw */} -
- setPassword(e.target.value)} - /> -
- {/* student number */} -
- setStudenet(e.target.value)} - /> -
- {/* major */} -
- setMajor(e.target.value)} - /> +
+
+
+
+
+

Sign Up to KERT

+

회원가입

- {/* generation */} -
- setGE(e.target.value)} - /> +
+ kert-logo
+
+
+
+ {/* name */} +
+ + + {errors.username && ( +

{errors.username.message}

+ )} +
+ + {/* student number */} +
+ + + {errors.student && ( +

{errors.student.message}

+ )} +
+ + {/* e-mail */} +
+ + + {errors.mail && ( +

{errors.mail.message}

+ )} +
+ + {/* major */} +
+ + + {errors.major && ( +

{errors.major.message}

+ )} +
+ + {/* generation */} +
+ + + {errors.generation && ( +

{errors.generation.message}

+ )} +
+ + {/* password */} +
+ + + {errors.password && ( +

{errors.password.message}

+ )} +
- + +
+ 이미 계정이 있으신가요? 로그인 +
+
diff --git a/src/styles/SignUp.css b/src/styles/SignUp.css index 193e1f9..6a446bb 100644 --- a/src/styles/SignUp.css +++ b/src/styles/SignUp.css @@ -1,292 +1,134 @@ -.SignUp { - background-color: #ffffff; +body { + background-color: #080f17; + /* background-color: var(--primary-text-color); */ + font-family: "NanumSquare", Helvetica; + margin: 0; + padding: 0; display: flex; flex-direction: row; justify-content: center; width: 100%; + height: 100%; } -.SignUp .div { - background-color: #ffffff; - height: 1080px; - /* overflow: hidden; */ +.div { + top: 100px; position: relative; - width: 1920px; + /* height: 1140px; */ + /* width: 1920px; */ } -.SignUp .middleSide { - background-color: #ffffff; - height: 980px; - left: 0; - /* position: absolute; */ - top: 0px; - width: 1920px; -} - -.SignUp .view { - background-color: #ffffff; - height: 939px; - left: 727px; - position: relative; - top: 0px; - width: 466px; -} - -.SignUp .text-signup { - color: #000000; - font-family: 'Inter-Bold', Helvetica; - font-size: 55px; - font-weight: 650; - left: 89px; - letter-spacing: 0; - line-height: normal; - position: absolute; - text-align: center; - top: 150px; - width: 288px; -} - -.SignUp .input-name { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - left: 52px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - position: absolute; - top: 290px; - width: 350px; - font-size: 30px; -} - -.SignUp .input-name::placeholder { - font-size: 25px; - padding: 10px; -} - -.SignUp .input-mail { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 380px; - width: 350px; - font-size: 30px; -} - -.SignUp .input-mail::placeholder { - font-size: 25px; - padding: 10px; +.login-button { + margin-left: 20px; + padding: 10px 20px; + background-color: #4A90E2; + color: white; + border: none; + border-radius: 50px; + cursor: pointer; } -.SignUp .input-pw { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; +/* 회원가입 박스 스타일 */ +.signup-container { display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 470px; - width: 350px; - font-size: 30px; -} + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; -.SignUp .input-pw::placeholder { - font-size: 25px; - padding: 10px; + top: 100px; + /* width: 914px; */ } -.SignUp .input-sn { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 560px; - width: 350px; - font-size: 30px; -} +.signup-box { + background-color: #10141c; + padding: 50px; + /* margin: 50px; */ -.SignUp .input-sn::placeholder { - font-size: 25px; - padding: 10px; + border-radius: 10px; + width: 500px; } -.SignUp .input-major { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; +.signup-header { display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 650px; - width: 350px; - font-size: 30px; -} - -.SignUp .input-major::placeholder { - font-size: 25px; - padding: 10px; -} - -.SignUp .input-ge { + justify-content: space-between; align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 740px; - width: 350px; - font-size: 30px; -} - -.SignUp .input-ge::placeholder { - font-size: 25px; - padding: 10px; + position: relative; + padding-bottom: 20px; } -.SignUp .click-button { - background-color: #000000; - border-radius: 50px; - border: none; - height: 70px; - left: 52px; - position: absolute; - top: 880px; - width: 375px; - +.signup-header h1 { + margin: 0; + font-size: 20px; + font-weight: 300; color: #ffffff; - font-family: 'Inter-Thin', Helvetica; - font-size: 25px; - font-weight: 500; } -.SignUp .click-button:hover { - border: 2px solid #000000; - transition: all 0.2s ease-out; - cursor: pointer; +.signup-header h2 { + margin: 10px 0 20px 0; + font-size: 28px; + font-weight: 700; + color: #ffffff; } -.SignUp .signUp { - width: 150px; - height: 40px; - top: 720px; - left: 160px; +.kert-logo { position: absolute; + top: 0; + right: 0; } -.SignUp .text-signUp { - color: #373737; - font-family: 'Inter-Thin', Helvetica; - font-size: 23px; - font-weight: 100; - width: 150px; - height: 40px; - left: 0; - letter-spacing: 0; - line-height: normal; - position: absolute; - text-align: center; - text-decoration: underline; - top: -1px; +.kert-logo img { + width: 80px; + height: 80px; + border-radius: 50%; } -.SignUp .text-signUp:hover { - cursor: pointer; +.signup-form .input-group { + margin-right: 30px; + margin-bottom: 25px; } -.SignUp .view-right { - height: 22px; - left: 1583px; - position: absolute; - top: 39px; - width: 244px; +.signup-form .input-group label { + display: block; + margin-bottom: 5px; + font-size: 18px; + color: #ffffff; } -.SignUp .SignUp { - height: 22px; - left: 177px; - position: absolute; - top: 0; - width: 67px; +.signup-form .input-group input { + width: 100%; + padding: 15px; + border: 1px solid #ccc; + border-radius: 5px; + background-color: #1c1f25; + color: white; } -.SignUp .text-sign { - color: #373737; - font-family: 'Inter-Thin', Helvetica; - font-size: 11px; - font-weight: 100; - left: 0; - letter-spacing: 0; - line-height: normal; - position: absolute; +.signup-form .input-group input::placeholder { + font-size: 16px; } -.SignUp .Login { - height: 22px; - left: 90px; - position: absolute; - top: 0; - width: 50px; +.error-message { + color: #ff4d4d; + font-size: 14px; + margin-top: 10px; } -.SignUp .view-middle { - height: 30px; - left: 530px; - position: absolute; - top: 35px; - width: 808px; +.signup-button { + width: 100%; + padding: 15px; + background-color: #4A90E2; + border: none; + border-radius: 5px; + color: white; + font-size: 20px; + cursor: pointer; + margin-top: 20px; } -.SignUp .view-left { - height: 61px; - left: 74px; - position: absolute; - top: 19px; - width: 113px; -} +.login-link { + margin-top: 20px; + text-align: center; + font-size: 14px; + color: #ccc; +} \ No newline at end of file From 912aac813840652d02dbf343def09f01b54d21af Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 2 Sep 2024 04:53:06 +0900 Subject: [PATCH 14/97] =?UTF-8?q?feat:=20=EC=97=B0=ED=98=81=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C/=EC=82=AD=EC=A0=9C=20=EC=99=84=EB=A3=8C=20(=EA=B0=80?= =?UTF-8?q?=EC=83=81=20API=20=EC=84=9C=EB=B2=84=EB=A1=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8)=20+=20chore:=20useDashboardStore=20?= =?UTF-8?q?=EC=84=B8=EB=B6=80=20=EB=B6=84=EB=A6=AC=20+=20feat:=20=EC=97=B0?= =?UTF-8?q?=ED=98=81=EC=9D=84=20=EC=97=B0=EB=8F=84=EB=B3=84=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=ED=95=98=EB=8A=94=20util=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/index.js | 1 + src/assets/icons/refresh.svg | 3 + src/components/display/HistoryList.jsx | 146 ++++++++++++++++++ src/components/display/HistoryList.styled.js | 90 +++++++++++ src/components/forms/Button.jsx | 4 +- src/components/forms/modal/Alert.jsx | 66 ++++++++ src/components/forms/modal/Confirm.jsx | 118 ++++++++++++++ src/components/layouts/DashboardLayout.jsx | 1 - src/components/layouts/ModalLayout.jsx | 31 ++++ src/components/navigation/Menu.jsx | 68 -------- src/pages/dashboard/History.jsx | 96 +++++++++++- src/pages/dashboard/History.styled.js | 30 ++++ src/pages/dashboard/Home.jsx | 6 +- src/stores/dashboard/useHistory.js | 43 ++++++ .../useHome.js} | 16 +- src/utils/api.js | 60 +++++++ src/utils/dashboard/refineHistoryRes.js | 22 +++ 17 files changed, 711 insertions(+), 90 deletions(-) create mode 100644 src/assets/icons/refresh.svg create mode 100644 src/components/display/HistoryList.jsx create mode 100644 src/components/display/HistoryList.styled.js create mode 100644 src/components/forms/modal/Alert.jsx create mode 100644 src/components/forms/modal/Confirm.jsx create mode 100644 src/components/layouts/ModalLayout.jsx delete mode 100644 src/components/navigation/Menu.jsx create mode 100644 src/pages/dashboard/History.styled.js create mode 100644 src/stores/dashboard/useHistory.js rename src/stores/{useDashboardStore.js => dashboard/useHome.js} (59%) create mode 100644 src/utils/api.js create mode 100644 src/utils/dashboard/refineHistoryRes.js diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js index ab27b42..225f076 100644 --- a/src/assets/icons/index.js +++ b/src/assets/icons/index.js @@ -6,6 +6,7 @@ export { default as DragableIcon } from './dragable.svg'; export { default as EditIcon } from './edit.svg'; export { default as HomeIcon } from './home.svg'; export { default as PersonIcon } from './person.svg'; +export { default as RefreshIcon } from './refresh.svg'; export { default as RemoveIcon } from './remove.svg'; export { default as TimelineIcon } from './timeline.svg'; export { default as VerifiedIcon } from './verified.svg'; diff --git a/src/assets/icons/refresh.svg b/src/assets/icons/refresh.svg new file mode 100644 index 0000000..dceb947 --- /dev/null +++ b/src/assets/icons/refresh.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/display/HistoryList.jsx b/src/components/display/HistoryList.jsx new file mode 100644 index 0000000..49afd3c --- /dev/null +++ b/src/components/display/HistoryList.jsx @@ -0,0 +1,146 @@ +import { useEffect, useState } from 'react'; + +import useHistory from '../../stores/dashboard/useHistory'; +import { API } from '../../utils/api'; + +import { Text } from '../typograph/Text'; +import { YearElement, HistoryElement } from './HistoryList.styled'; +import { Confirm } from '../forms/modal/Confirm'; +import { Alert } from '../forms/modal/Alert'; + +export const HistoryList = () => { + const [loading, setLoading] = useState(true); + const { history, refined_history, saveHistory } = useHistory(); + + // confirm 모달에서 삭제한 연혁의 ID를 능동적으로 적용하기 위해 state를 선언합니다. + const [confirmOpen, setConfirmOpen] = useState(false); + const [alertOpen, setAlertOpen] = useState(false); + const [deleteHistory, setDeleteHistory] = useState({ + id: null, + year: null, + month: null, + content: null, + }); + + // confirm 모달이 표시될 때 + const handleDeleteClick = (id, year, month, content) => { + setDeleteHistory({ + id: id, + year: year, + month: month, + content: content, + }); + setConfirmOpen(true); + }; + + // 유저가 confirm 모달에서 삭제를 눌렀을 때 + const handleDeleteConfirm = () => { + setConfirmOpen(false); + setAlertOpen(true); + + // 서버로 삭제를 요청합니다. + API.DELETE(`/histories/${deleteHistory.id}`); + setDeleteHistory({ + id: null, + year: null, + month: null, + content: null, + }); + }; + + // 유저가 닫기 버튼을 눌렀을 때 + const handleDeleteCancel = () => { + setConfirmOpen(false); + setDeleteHistory({ + id: null, + year: null, + month: null, + content: null, + }); + }; + + // API로부터 데이터를 가져와 Zustand 상태를 업데이트합니다. + useEffect(() => { + // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 + if (history.length === 0) { + API.GET('/histories') + .then((res) => { + saveHistory(res); // API 서버에서 가져온 데이터를 상태에 반영 + setLoading(false); + }) + .catch((error) => { + setLoading(false); + console.error('Error fetching data:', error); + }); + } else { + setLoading(false); + console.info('이미 API 데이터가 있으므로 API 응답을 요청하지 않습니다.'); + } + }, []); + + return loading ? ( + <> + + + + + ) : history.length === 0 ? ( + 비어있음 + ) : ( + <> + {Object.keys(refined_history) + .sort((a, b) => b - a) + .map((year) => ( + + + {year}년 + + {refined_history[year].map((hist) => ( + + handleDeleteClick( + hist.id, + hist.year, + hist.month, + hist.content, + ) + } + > + + {hist.month}월 + + + {hist.content} + + + ))} + + ))} + + 아래 연혁을 삭제할까요? + + {deleteHistory.year}년 {deleteHistory.month}월 -{' '} + {deleteHistory.content} + + + { + // 간단하게 새로고침해서 연혁 목록을 다시 불러옵니다. + window.location.reload(); + }} + > + 삭제되었습니다. + + + ); +}; diff --git a/src/components/display/HistoryList.styled.js b/src/components/display/HistoryList.styled.js new file mode 100644 index 0000000..99213d0 --- /dev/null +++ b/src/components/display/HistoryList.styled.js @@ -0,0 +1,90 @@ +import styled from 'styled-components'; + +import { Container } from '../forms/Container'; + +export const YearElement = styled(Container)` + margin: 0; + margin-top: 20px; + + width: 100%; + max-width: 1000px; + + display: flex; + flex-wrap: wrap; + gap: 6px; + + padding: 30px; + border-radius: 20px; + + @keyframes skeletonAnimation { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } + } + + &.loading { + height: 144px; + + background: linear-gradient( + 45deg, + var(--container-primary-background) 35%, + var(--container-secondary-background) 50%, + var(--container-primary-background) 65% + ); + background-size: 400% 400%; + animation: skeletonAnimation 2s infinite ease-in-out; + } + + & > span { + width: 100%; + // flex-shrink로 flex로 인한 크기 변경을 방지합니다. + flex-shrink: 0; + margin-bottom: 20px; + } +`; + +export const HistoryElement = styled.div` + cursor: pointer; + + transition: opacity 0.1s ease-in-out; + + position: relative; + width: 50%; + // flex-shrink로 flex로 인한 크기 변경을 방지합니다. + flex-shrink: 0; + + display: flex; + flex: 1 1 calc(50% - 10px); /* 2개씩 배치될 때 각 요소의 너비 */ + align-items: center; + gap: 10px; + + & > span:first-child { + margin-left: -4px; + + width: 40px; + padding: 8px 12px; + border-radius: 30px; + + border: 1px solid var(--container-border); + text-align: center; + } + + &:hover > span:first-child { + transition: + background-color 0.1s ease-in-out, + border 0.1s ease-in-out; + border: 1px solid transparent; + background-color: var(--danger-color); + } + + &:hover > span:last-child { + transition: color 0.1s ease-in-out; + color: var(--danger-color); + } +`; diff --git a/src/components/forms/Button.jsx b/src/components/forms/Button.jsx index 91bd491..64214c1 100644 --- a/src/components/forms/Button.jsx +++ b/src/components/forms/Button.jsx @@ -12,7 +12,7 @@ import styled from 'styled-components'; * 기본 스타일을 지정할 수 있습니다. * @type {styled.button} */ -const IButton = styled.button` +export const IButton = styled.button` position: relative; cursor: pointer; overflow: hidden; @@ -65,7 +65,7 @@ const FlatButton = styled(IButton)` if (props.$color?.startsWith('--')) { return `var(${props.$color});`; } else { - return props.$color ?? 'var(--transparent-button-background)'; + return props.$color ?? 'var(--primary-color)'; } }}; `; diff --git a/src/components/forms/modal/Alert.jsx b/src/components/forms/modal/Alert.jsx new file mode 100644 index 0000000..4bbd27c --- /dev/null +++ b/src/components/forms/modal/Alert.jsx @@ -0,0 +1,66 @@ +import styled from 'styled-components'; + +import { ModalLayout } from '../../layouts/ModalLayout'; +import { Button } from '../Button'; +import { Span } from '../../typograph/Text'; + +const ModalContainer = styled.div` + position: relative; + + padding: 30px; + width: 500px; + max-width: 90%; + min-height: 100px; + + border-radius: 20px; + box-sizing: border-box; + + background-color: var(--container-primary-background); + box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.1); + + @keyframes slide-in { + 0% { + opacity: 0; + transform: translateY(30px); + } + 100% { + opacity: 1; + transform: translateY(0px); + } + } + animation: slide-in 0.3s cubic-bezier(0.27, 0.02, 0.26, 0.99); +`; + +const Title = styled(Span).attrs({ + $size: 'l', + $weight: 'extrabold', +})` + margin-bottom: 20px; +`; + +const BottomControlBox = styled.div` + margin-top: 20px; + text-align: right; +`; + +export const Alert = ({ + title = '알림', + isOpen, + onClose, + buttonColor, + children, +}) => { + return ( + + + {title} + {children} + + + + + + ); +}; diff --git a/src/components/forms/modal/Confirm.jsx b/src/components/forms/modal/Confirm.jsx new file mode 100644 index 0000000..9d8c71b --- /dev/null +++ b/src/components/forms/modal/Confirm.jsx @@ -0,0 +1,118 @@ +import styled from 'styled-components'; + +import { ModalLayout } from '../../layouts/ModalLayout'; +import { Span } from '../../typograph/Text'; +import { IButton } from '../Button'; + +const ModalContainer = styled.div` + position: relative; + + padding: 30px; + width: 500px; + max-width: 90%; + min-height: 100px; + + border-radius: 20px; + box-sizing: border-box; + + background-color: var(--container-primary-background); + box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.1); + + @keyframes slide-in { + 0% { + opacity: 0; + transform: translateY(30px); + } + 100% { + opacity: 1; + transform: translateY(0px); + } + } + animation: slide-in 0.3s cubic-bezier(0.27, 0.02, 0.26, 0.99); +`; + +const ConfirmButton = styled(IButton)` + background-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } + }}; + margin: 5px; + + &:hover { + opacity: 0.8; + } +`; + +const CancelButton = styled(IButton)` + transition: + border-color 0.2s ease-in-out, + color 0.2s ease-in-out; + + background-color: transparent; + border: 2px solid var(--container-border); + color: var(--secondary-text-color); + margin: 5px; + + &:hover { + border-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--secondary-text-color)'; + } + }}; + color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--secondary-text-color)'; + } + }}; + } +`; + +const Title = styled(Span).attrs({ + $size: 'l', + $weight: 'extrabold', +})` + margin-bottom: 20px; +`; + +const BottomControlBox = styled.div` + margin-top: 20px; + text-align: right; +`; + +export const Confirm = ({ + isOpen, + title, + onConfirm, + onCancel, + confirmMsg = '확인', + confirmColor, + cancelMsg = '취소', + cancelColor, + children, +}) => { + if (!isOpen) return null; + + return ( + + + {title} + {children} + + + {cancelMsg} + + + {confirmMsg} + + + + + ); +}; diff --git a/src/components/layouts/DashboardLayout.jsx b/src/components/layouts/DashboardLayout.jsx index 59e3bc2..080d3cc 100644 --- a/src/components/layouts/DashboardLayout.jsx +++ b/src/components/layouts/DashboardLayout.jsx @@ -69,7 +69,6 @@ export const DashboardLayout = ({ location }) => { {/* location.key로 랜덤한 index를 부여하여 화면 전환 시 컴포넌트 충돌이 없도록 예방합니다. */} (props.$isOpen ? 'flex' : 'none')}; + align-items: center; + justify-content: center; + + backdrop-filter: blur(5px); + + @keyframes fade-in { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + animation: fade-in 0.2s ease-in-out; +`; + +export const ModalLayout = ({ $isOpen, children }) => { + return $isOpen ? {children} : null; +}; diff --git a/src/components/navigation/Menu.jsx b/src/components/navigation/Menu.jsx deleted file mode 100644 index f41a7fd..0000000 --- a/src/components/navigation/Menu.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import useDashboard from '../../stores/dashboard'; - -import styled from 'styled-components'; - -let fadeSpeed = '0.2s'; - -const MenuBox = styled.button` - transition: background-color ${fadeSpeed} ease-in-out; - - display: flex; - justify-content: start; - align-items: center; - gap: 10px; - - width: 100%; - height: 44px; - padding: 10px; - border-radius: 6px; - - box-sizing: border-box; - - background-color: transparent; - outline: none; - border: none; - - &:hover { - cursor: pointer; - background-color: #ffffff08; - } - - & > p { - transition: color ${fadeSpeed} ease-in-out; - color: #465566; - font-size: 14px; - } - - & > img { - transition: opacity ${fadeSpeed} ease-in-out; - opacity: 0.3; - } - - &.selected { - background-color: #112337; - color: white; - } - - &.selected > p { - color: white; - } - - &.selected > img { - opacity: 1; - } -`; - -export const Menu = ({ children = {}, onClick = {}, icon, name = 'menu' }) => { - const { SelectedDashboardMenu } = useDashboard(); - - return ( - - -

{children}

-
- ); -}; diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index 98cf387..beaca92 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -1,15 +1,101 @@ -// History.jsx -// 코드 작성자 : GiHhub @whitedev77773 +import { useState } from 'react'; +import useHistory from '../../stores/dashboard/useHistory'; -// 외부 라이브러리에서 import - -// 사용자가 생성한 컴포넌트 및 JS파일 import +import { Text } from '../../components/typograph/Text'; import { Header } from './Dashboard.styled'; +import { ManageHistory, Menu } from './History.styled'; +import { AddIcon, RefreshIcon } from '../../assets/icons'; +import { HistoryList } from '../../components/display/HistoryList'; + +import { API } from '../../utils/api'; +import { Confirm } from '../../components/forms/modal/Confirm'; +import { Alert } from '../../components/forms/modal/Alert'; + +/** + * ↓ API 요청 시 반환 형식 ↓ + * [{ + * "id": "integer", + * "year": "integer", + * "month": "integer", + * "description": "string", + * "created_at": "datetime", + * "updated_at": "datetime" + * }] + */ export default function History() { + const [alertOpen, setAlertOpen] = useState(false); + const [confirmOpen, setConfirmOpen] = useState(false); + const [newHistory, setNewHistory] = useState({ + year: null, + month: null, + content: null, + }); + + // confirm 모달이 표시될 때 + const handleAddClick = () => { + setNewHistory({ + year: 2024, + month: 9, + content: 'KERT 웹사이트 개발 완료', + }); + setConfirmOpen(true); + }; + + // 유저가 confirm 모달에서 확인을 눌렀을 때 + const handleAddConfirm = () => { + setConfirmOpen(false); + + // 서버로 추가를 요청합니다. + API.POST('/histories', newHistory) + .then() + .then(() => { + setAlertOpen(true); + }); + }; + + // 유저가 닫기 버튼을 눌렀을 때 + const handleAddCancel = () => { + setConfirmOpen(false); + }; + return ( <>
연혁 추가/제거
+ + + +를 눌러 연혁 추가 + + + window.location.reload()} /> + + + + + + {/* 연혁 추가 시 표시되는 모달들입니다. */} + + + {newHistory.year}년 {newHistory.month}월 - {newHistory.content} + + + { + // 간단하게 새로고침해서 연혁 목록을 다시 불러옵니다. + window.location.reload(); + }} + buttonColor="--success-color" + > + 추가되었습니다. + ); } diff --git a/src/pages/dashboard/History.styled.js b/src/pages/dashboard/History.styled.js new file mode 100644 index 0000000..5c5303b --- /dev/null +++ b/src/pages/dashboard/History.styled.js @@ -0,0 +1,30 @@ +import styled from 'styled-components'; +import { Container } from './Dashboard.styled'; + +export const ManageHistory = styled(Container)` + width: 100%; + max-width: 1000px; + height: 80px; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + + border: none; + background-color: var(--container-secondary-background); + + & svg { + cursor: pointer; + fill: var(--primary-text-color); + } +`; + +export const Menu = styled.div` + display: flex; + gap: 10px; + + & > * { + cursor: pointer; + } +`; diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx index 457a30f..e24033a 100644 --- a/src/pages/dashboard/Home.jsx +++ b/src/pages/dashboard/Home.jsx @@ -4,10 +4,10 @@ // 외부 라이브러리에서 import import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; +import useHome from '../../stores/dashboard/useHome'; // 사용자가 생성한 컴포넌트 및 JS파일 import import HomeLoading from './Home.Loading'; -import useDashboard from '../../stores/useDashboardStore'; import { Header, Container, @@ -155,7 +155,7 @@ const PostBoard = ({ name, data, navigate }) => { export default function Home() { // 메뉴 변경마다 재렌더링을 막기 위해 useDashboardStore를 불러옵니다. - const { home, setHome } = useDashboard(); + const { home, saveHome } = useHome(); // 다른 컴포넌트에서 URL 이동을 할 수 있도록 navigate를 넙깁니다. const navigate = useNavigate(); @@ -172,7 +172,7 @@ export default function Home() { // API 요청하는 척 3초 Timeout을 겁니다. setTimeout(() => { setLoading(false); // 로딩 해제 - setHome({ + saveHome({ history: { wholeCount: 16, yearCount: 10 }, executive: { wholeCount: 36, displayCount: 5 }, admin: { wholeCount: 5 }, diff --git a/src/stores/dashboard/useHistory.js b/src/stores/dashboard/useHistory.js new file mode 100644 index 0000000..c680d77 --- /dev/null +++ b/src/stores/dashboard/useHistory.js @@ -0,0 +1,43 @@ +// 대시보드 이동 시 이전에 요청한 API 응답 데이터를 저장합니다. +// 즉, API 재요청을 방지하는 용도입니다. +// 사용자가 최초 메뉴 접속 이후 새로운 데이터를 표시하려면 새로고침 등이 필요합니다. + +import { create } from 'zustand'; +import { refineHistoryRes } from '../../utils/dashboard/refineHistoryRes'; + +const useHistory = create((set) => ({ + history: [], + refined_history: {}, + + // // 연혁을 추가합니다. + // // newHistory는 API 명세서 참고 + // addHistory: (newHistory) => { + // set((state) => ({ + // history: [...state.history, { ...newHistory, id: state.history.length }], + // })); + // set((state) => ({ + // // 변경된 history를 다시 그루핑합니다. + // refined_history: refineHistoryRes(state.history), + // })); + // }, + + // // 연혁을 제거 합니다. + // removeHistory: (id) => { + // set((state) => ({ + // // filter로 전달받은 id와 다른 것들만 저장합니다. + // history: state.history.filter((hist) => hist.id !== id), + // })); + // set((state) => ({ + // // 변경된 history를 다시 그루핑합니다. + // refined_history: refineHistoryRes(state.history), + // })); + // }, + + // 외부 컴포넌트에서 API 응답을 받고 저장하는 용도입니다. + saveHistory: (newList) => { + set({ history: newList }); + set({ refined_history: refineHistoryRes(newList) }); + }, +})); + +export default useHistory; diff --git a/src/stores/useDashboardStore.js b/src/stores/dashboard/useHome.js similarity index 59% rename from src/stores/useDashboardStore.js rename to src/stores/dashboard/useHome.js index 59ae24a..8e0c9f8 100644 --- a/src/stores/useDashboardStore.js +++ b/src/stores/dashboard/useHome.js @@ -4,20 +4,14 @@ import { create } from 'zustand'; -const useDashboardStore = create((set) => ({ - // 대시보드 데이터를 저장할 상태 +const useHome = create((set) => ({ + // 대시보드 홈 데이터를 저장할 상태 home: null, - history: null, - executive: null, - admin: null, - users: null, // setHome()으로 Home 데이터를 저장합니다. - setHome: (newData) => { - set({ - home: newData, - }); + saveHome: (newData) => { + set({ home: newData }); }, })); -export default useDashboardStore; +export default useHome; diff --git a/src/utils/api.js b/src/utils/api.js new file mode 100644 index 0000000..6903ffe --- /dev/null +++ b/src/utils/api.js @@ -0,0 +1,60 @@ +const API_URL = 'http://localhost:8000'; // API의 기본 URL을 정의합니다. + +// 기본적인 Fetch 요청 처리 함수 +async function request(endpoint, method = 'GET', data = null, headers = {}) { + // 기본 요청 메서드는 GET입니다. + const config = { + method, + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + }; + + // API 서버로 넘길 data를 json으로 변환합니다. + if (data) { + config.body = JSON.stringify(data); + } + + try { + const response = await fetch(`${API_URL}${endpoint}`, config); + + // 응답이 성공적이지 않은 경우 오류를 던집니다. + if (!response.ok) { + throw new Error(`서버 오류 : ${response.status}`); + } + + // 응답 데이터를 JSON으로 반환합니다. + return await response.json(); + } catch (error) { + console.error('요청 실패:', error); + throw error; // 오류를 호출한 곳으로 다시 던집니다. + } +} + +// GET 요청 +async function GET(endpoint) { + return await request(endpoint, 'GET'); +} + +// POST 요청 +async function POST(endpoint, data) { + return await request(endpoint, 'POST', data); +} + +// PUT 요청 +async function PUT(endpoint, data) { + return await request(endpoint, 'PUT', data); +} + +// DELETE 요청 +async function DELETE(endpoint) { + return await request(endpoint, 'DELETE'); +} + +export const API = { + GET, + POST, + PUT, + DELETE, +}; diff --git a/src/utils/dashboard/refineHistoryRes.js b/src/utils/dashboard/refineHistoryRes.js new file mode 100644 index 0000000..4cff864 --- /dev/null +++ b/src/utils/dashboard/refineHistoryRes.js @@ -0,0 +1,22 @@ +/** + * API 응답 형식에 맞는 history 오브젝트를 받으면 아래와 같이 재정렬 합니다. + * 1. 연도별로 구분 + * 2. 월별로 정렬 + * */ +export const refineHistoryRes = (history) => { + const groupedByYear = history.reduce((acc, item) => { + const year = item.year; + if (!acc[year]) { + acc[year] = []; + } + acc[year].push(item); + return acc; + }, {}); + + // 각 연도별로 month순으로 정렬 + Object.keys(groupedByYear).forEach((year) => { + groupedByYear[year].sort((a, b) => a.month - b.month); + }); + + return groupedByYear; +}; From 8f0f94d5bfb1c691cc37a23d1d9362364ed81c81 Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 2 Sep 2024 06:44:12 +0900 Subject: [PATCH 15/97] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=ED=95=9C=20?= =?UTF-8?q?=EC=97=B0=ED=98=81=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20+=20feat:=20Input=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/display/HistoryList.jsx | 7 +++- src/components/forms/Input.jsx | 53 ++++++++++++++++++++++++++ src/pages/dashboard/History.jsx | 53 ++++++++++++++++++-------- 3 files changed, 96 insertions(+), 17 deletions(-) create mode 100644 src/components/forms/Input.jsx diff --git a/src/components/display/HistoryList.jsx b/src/components/display/HistoryList.jsx index 49afd3c..fbf1c85 100644 --- a/src/components/display/HistoryList.jsx +++ b/src/components/display/HistoryList.jsx @@ -36,10 +36,13 @@ export const HistoryList = () => { // 유저가 confirm 모달에서 삭제를 눌렀을 때 const handleDeleteConfirm = () => { setConfirmOpen(false); - setAlertOpen(true); // 서버로 삭제를 요청합니다. - API.DELETE(`/histories/${deleteHistory.id}`); + API.DELETE(`/histories/${deleteHistory.id}`) + .then() + .then(() => { + setAlertOpen(true); + }); setDeleteHistory({ id: null, year: null, diff --git a/src/components/forms/Input.jsx b/src/components/forms/Input.jsx new file mode 100644 index 0000000..08b9df7 --- /dev/null +++ b/src/components/forms/Input.jsx @@ -0,0 +1,53 @@ +import { forwardRef } from 'react'; + +import styled from 'styled-components'; +import { Span } from '../typograph/Text'; + +const InputWrapper = styled.div` + width: 100%; +`; + +const Label = styled(Span).attrs({ + $size: 's', + $weight: 'regular', +})` + margin-left: 6px; + margin-bottom: 6px; +`; + +export const RawInput = styled.input.attrs((props) => ({ + type: props.type || 'text', +}))` + transition: border 0.3s ease-in-out; + + display: block; + padding: 16px; + width: 100%; + border-radius: 10px; + box-sizing: border-box; + + background-color: var(--container-primary-color); + outline: none; + border: 1px solid var(--container-border); + + color: var(--primary-text-color); + + font-family: NanumSquareNeo, sans-serif; + + &:last-child { + margin-bottom: 20px; + } + + &:focus { + border: 1px solid var(--primary-color); + } +`; + +export const Input = forwardRef(({ label, value, ...props }, ref) => { + return ( + + + + + ); +}); diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index beaca92..da8d727 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useRef, useState } from 'react'; import useHistory from '../../stores/dashboard/useHistory'; import { Text } from '../../components/typograph/Text'; @@ -10,6 +10,7 @@ import { HistoryList } from '../../components/display/HistoryList'; import { API } from '../../utils/api'; import { Confirm } from '../../components/forms/modal/Confirm'; import { Alert } from '../../components/forms/modal/Alert'; +import { Input } from '../../components/forms/Input'; /** * ↓ API 요청 시 반환 형식 ↓ @@ -24,27 +25,28 @@ import { Alert } from '../../components/forms/modal/Alert'; */ export default function History() { + const yearInputRef = useRef(''); + const monthInputRef = useRef(''); + const contentInputRef = useRef(''); + const [alertOpen, setAlertOpen] = useState(false); const [confirmOpen, setConfirmOpen] = useState(false); - const [newHistory, setNewHistory] = useState({ - year: null, - month: null, - content: null, - }); // confirm 모달이 표시될 때 const handleAddClick = () => { - setNewHistory({ - year: 2024, - month: 9, - content: 'KERT 웹사이트 개발 완료', - }); setConfirmOpen(true); }; // 유저가 confirm 모달에서 확인을 눌렀을 때 const handleAddConfirm = () => { - setConfirmOpen(false); + console.log(contentInputRef.current.value); + + const newHistory = { + year: parseInt(yearInputRef.current.value), + month: parseInt(monthInputRef.current.value), + content: contentInputRef.current.value, + }; + console.log(newHistory); // 서버로 추가를 요청합니다. API.POST('/histories', newHistory) @@ -52,6 +54,8 @@ export default function History() { .then(() => { setAlertOpen(true); }); + + setConfirmOpen(false); }; // 유저가 닫기 버튼을 눌렀을 때 @@ -81,9 +85,27 @@ export default function History() { onCancel={handleAddCancel} confirmMsg="추가" > - - {newHistory.year}년 {newHistory.month}월 - {newHistory.content} - +
+ + +
+ 추가되었습니다. + 연혁 목록을 다시 불러옵니다. ); From f96900767da7dd47d159e360598caa98a92f9732 Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 2 Sep 2024 06:49:50 +0900 Subject: [PATCH 16/97] =?UTF-8?q?chore:=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=EB=90=A0=20=EC=97=B0=ED=98=81=EC=9D=98=20?= =?UTF-8?q?ID=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/display/HistoryList.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/display/HistoryList.jsx b/src/components/display/HistoryList.jsx index fbf1c85..ee61f3b 100644 --- a/src/components/display/HistoryList.jsx +++ b/src/components/display/HistoryList.jsx @@ -133,6 +133,8 @@ export const HistoryList = () => { {deleteHistory.year}년 {deleteHistory.month}월 -{' '} {deleteHistory.content} +
+ ID : {deleteHistory.id} Date: Mon, 2 Sep 2024 21:44:56 +0900 Subject: [PATCH 17/97] =?UTF-8?q?style:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20UI?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login.jsx | 98 ++++++++++++++++++++++++++++++++++++ src/styles/Login.css | 115 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 src/pages/Login.jsx create mode 100644 src/styles/Login.css diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx new file mode 100644 index 0000000..608d31f --- /dev/null +++ b/src/pages/Login.jsx @@ -0,0 +1,98 @@ +// Login.jsx +// 코드 작성자 : GiHhub @huisuu + +import { useForm } from 'react-hook-form'; +import axios from 'axios'; +import { useNavigate, Link } from 'react-router-dom'; + +import '../styles/Login.css'; +import '../styles/font.css'; + +export default function Login() { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); + + const navigate = useNavigate(); + + const onSubmit = async (data) => { + try { + // 서버로 로그인 정보를 전송합니다. + const response = await axios.post('155.230.118.35', data); + console.log('Sign up successful:', response.data); + + // 로그인 성공 시 메인 페이지로 이동합니다. + navigate('/Mainpage'); + } catch (error) { + console.error('Error:', error); + } + }; + + return ( +
+
+
+
+

Login to KERT

+

로그인

+
+
+ kert-logo +
+
+
+
+ {/* student number */} +
+ + + {errors.student && ( +

{errors.student.message}

+ )} +
+ {/* pw */} +
+ + + {errors.password && ( +

{errors.password.message}

+ )} +
+ +
+
+ 계정이 없으신가요? 회원가입 +
+
+
+
+ ); +} diff --git a/src/styles/Login.css b/src/styles/Login.css new file mode 100644 index 0000000..2d61ff8 --- /dev/null +++ b/src/styles/Login.css @@ -0,0 +1,115 @@ +/* + Login.jsx + 코드 작성자 : GiHhub @huisuu +*/ + +body { + background-color: #080f17; + font-family: "NanumSquare", Helvetica; + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + height: 100%; + width: 100%; +} + +.login-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + position: relative; + top: 250px; +} + +.login-box { + background-color: #10141c; + padding: 50px; + border-radius: 10px; + width: 450px; +} + +.login-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + position: relative; + padding-bottom: 20px; +} + +.login-header h1 { + margin: 0; + font-size: 20px; + font-weight: 300; + color: #ffffff; +} + +.login-header h2 { + margin: 10px 0 20px 0; + font-size: 28px; + font-weight: 700; + color: #ffffff; +} + +.login-form .input-group { + margin-right: 25px; + margin-bottom: 20px; +} + +.kert-logo { + position: absolute; + top: 0; + right: 0; +} + +.kert-logo img { + width: 80px; + height: 80px; + border-radius: 50%; +} + +.login-form .input-group label { + display: block; + margin-bottom: 5px; + font-size: 18px; + color: #ffffff; +} + +.login-form .input-group input { + width: 100%; + padding: 15px; + border: 1px solid #ccc; + border-radius: 5px; + background-color: #1c1f25; + color: white; +} + +.error-message { + color: #ff4d4d; + font-size: 14px; + margin-top: 10px; +} + +.login-button { + width: 100%; + padding: 15px; + background-color: #4A90E2; + border: none; + border-radius: 5px; + color: white; + font-size: 20px; + cursor: pointer; + margin-top: 20px; + margin-right: 25px; +} + +.signup-link { + margin-top: 20px; + text-align: center; + font-size: 14px; + color: #ccc; +} \ No newline at end of file From 2f45ae075407e7c0329379d7f915380fada15519 Mon Sep 17 00:00:00 2001 From: huisuu Date: Mon, 2 Sep 2024 21:49:47 +0900 Subject: [PATCH 18/97] =?UTF-8?q?style:=20=ED=8E=98=EC=9D=B4=EC=A7=80=20UI?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login.jsx | 132 ++++++++++++++++++------------------ src/styles/Login.css | 155 ++++++++++++++++++++++--------------------- 2 files changed, 147 insertions(+), 140 deletions(-) diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 3093a5b..608d31f 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -3,87 +3,93 @@ import { useForm } from 'react-hook-form'; import axios from 'axios'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, Link } from 'react-router-dom'; import '../styles/Login.css'; import '../styles/font.css'; -export default function SignUp() { - const { register, handleSubmit, formState: { errors } } = useForm(); +export default function Login() { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); const navigate = useNavigate(); const onSubmit = async (data) => { try { - const userData = { - student: data.student, - password: data.password, - }; - // 서버로 로그인 정보를 전송합니다. - const response = await axios.post('155.230.118.35', userData); + const response = await axios.post('155.230.118.35', data); console.log('Sign up successful:', response.data); - // 로그인 성공 시 ~page로 이동합니다. - navigate('/MainPage'); + // 로그인 성공 시 메인 페이지로 이동합니다. + navigate('/Mainpage'); } catch (error) { console.error('Error:', error); } }; return ( -
-
-
-
-
로그인
-
- {/* student number */} -
- - {errors.student && ( -

{errors.student.message}

- )} -
- {/* pw */} -
- - {errors.password && ( -

{errors.password.message}

- )} -
- -
+
+
+
+
+

Login to KERT

+

로그인

+
+
+ kert-logo +
+
+
+
+ {/* student number */} +
+ + + {errors.student && ( +

{errors.student.message}

+ )} +
+ {/* pw */} +
+ + + {errors.password && ( +

{errors.password.message}

+ )} +
+ +
+
+ 계정이 없으신가요? 회원가입
diff --git a/src/styles/Login.css b/src/styles/Login.css index 2a8cc02..2d61ff8 100644 --- a/src/styles/Login.css +++ b/src/styles/Login.css @@ -3,112 +3,113 @@ 코드 작성자 : GiHhub @huisuu */ -/* Apply font globally to the login container */ -.Login { - background-color: #ffffff; +body { + background-color: #080f17; + font-family: "NanumSquare", Helvetica; + margin: 0; + padding: 0; display: flex; flex-direction: row; justify-content: center; + align-items: center; + height: 100%; width: 100%; - font-family: 'NanumSquareNeo', sans-serif; } -.Login .div { - background-color: #ffffff; - height: 1080px; +.login-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; position: relative; - width: 1920px; + top: 250px; } -.Login .middleSide { - background-color: #ffffff; - height: 980px; - left: 0; - top: 0px; - width: 1920px; +.login-box { + background-color: #10141c; + padding: 50px; + border-radius: 10px; + width: 450px; } -.Login .view { - background-color: #ffffff; - height: 939px; - left: 727px; +.login-header { + display: flex; + justify-content: space-between; + align-items: flex-start; position: relative; - top: 0px; - width: 466px; + padding-bottom: 20px; +} + +.login-header h1 { + margin: 0; + font-size: 20px; + font-weight: 300; + color: #ffffff; } -.Login .text-login { - color: #000000; - font-size: 55px; +.login-header h2 { + margin: 10px 0 20px 0; + font-size: 28px; font-weight: 700; - left: 89px; - letter-spacing: 0; - line-height: normal; - position: absolute; - text-align: center; - top: 250px; - width: 288px; + color: #ffffff; } -/* Apply font to input fields */ -.Login .input-pw, -.Login .input-sn { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; +.login-form .input-group { + margin-right: 25px; + margin-bottom: 20px; +} + +.kert-logo { position: absolute; - width: 350px; - font-size: 30px; + top: 0; + right: 0; } -.Login .input-pw { - top: 560px; +.kert-logo img { + width: 80px; + height: 80px; + border-radius: 50%; } -.Login .input-sn { - top: 470px; +.login-form .input-group label { + display: block; + margin-bottom: 5px; + font-size: 18px; + color: #ffffff; } -/* Apply font to placeholders */ -.Login .input-pw::placeholder, -.Login .input-sn::placeholder { - font-size: 25px; - padding: 10px; +.login-form .input-group input { + width: 100%; + padding: 15px; + border: 1px solid #ccc; + border-radius: 5px; + background-color: #1c1f25; + color: white; } -/* Apply font to the button */ -.Login .click-button { - background-color: #000000; - border-radius: 50px; - border: none; - height: 70px; - left: 52px; - position: absolute; - top: 680px; - width: 375px; - color: #ffffff; - font-size: 25px; - font-weight: 500; +.error-message { + color: #ff4d4d; + font-size: 14px; + margin-top: 10px; } -.Login .click-button:hover { - border: 2px solid #000000; - transition: all 0.2s ease-out; +.login-button { + width: 100%; + padding: 15px; + background-color: #4A90E2; + border: none; + border-radius: 5px; + color: white; + font-size: 20px; cursor: pointer; + margin-top: 20px; + margin-right: 25px; } -/* Apply font to view sections */ -.Login .view-right, -.Login .view-middle, -.Login .view-left { - position: absolute; +.signup-link { + margin-top: 20px; + text-align: center; + font-size: 14px; + color: #ccc; } \ No newline at end of file From 1159d64c6127a15ff1446cf6208c6cd906c266d1 Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 5 Sep 2024 09:02:59 +0900 Subject: [PATCH 19/97] =?UTF-8?q?src:=20kert=20=EC=82=AC=EA=B0=81=ED=98=95?= =?UTF-8?q?=20=EB=A1=9C=EA=B3=A0=20png=20->=20svg=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/kert_logos/Square.svg | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/assets/kert_logos/Square.svg diff --git a/src/assets/kert_logos/Square.svg b/src/assets/kert_logos/Square.svg new file mode 100644 index 0000000..a918faf --- /dev/null +++ b/src/assets/kert_logos/Square.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From 1702055c326e46a2e2167091444edb3003a89e14 Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 5 Sep 2024 09:03:25 +0900 Subject: [PATCH 20/97] =?UTF-8?q?src:=20kert=20=EC=82=AC=EA=B0=81=ED=98=95?= =?UTF-8?q?=20=EB=A1=9C=EA=B3=A0=20png=20->=20svg=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/kert_logos/index.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/kert_logos/index.js diff --git a/src/assets/kert_logos/index.js b/src/assets/kert_logos/index.js new file mode 100644 index 0000000..f65eb18 --- /dev/null +++ b/src/assets/kert_logos/index.js @@ -0,0 +1 @@ +export { default as SquareLogo } from './Square.svg'; From 0676aaf61ae98eaf2867828f421ec594aaa079e3 Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 5 Sep 2024 09:03:48 +0900 Subject: [PATCH 21/97] =?UTF-8?q?feature:=20=EC=97=B0=ED=98=81=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/display/HistoryList.jsx | 139 +++++++------- .../{forms => display}/modal/Alert.jsx | 22 +-- .../{forms => display}/modal/Confirm.jsx | 48 +++-- src/components/display/modal/Loading.jsx | 79 ++++++++ src/components/forms/Input.jsx | 13 ++ src/components/layouts/DashboardLayout.jsx | 10 +- src/pages/dashboard/History.jsx | 173 ++++++++++-------- 7 files changed, 300 insertions(+), 184 deletions(-) rename src/components/{forms => display}/modal/Alert.jsx (75%) rename src/components/{forms => display}/modal/Confirm.jsx (75%) create mode 100644 src/components/display/modal/Loading.jsx diff --git a/src/components/display/HistoryList.jsx b/src/components/display/HistoryList.jsx index ee61f3b..85633fa 100644 --- a/src/components/display/HistoryList.jsx +++ b/src/components/display/HistoryList.jsx @@ -1,65 +1,86 @@ import { useEffect, useState } from 'react'; -import useHistory from '../../stores/dashboard/useHistory'; -import { API } from '../../utils/api'; - import { Text } from '../typograph/Text'; import { YearElement, HistoryElement } from './HistoryList.styled'; -import { Confirm } from '../forms/modal/Confirm'; -import { Alert } from '../forms/modal/Alert'; + +import { API } from '../../utils/api'; +import useHistory from '../../stores/dashboard/useHistory'; +import useAlert from '../../stores/useAlert'; +import useConfirm from '../../stores/useConfirm'; +import useLoading from '../../stores/useLoading'; + +export const DeleteHistory = ({ history }) => { + return ( + <> + 아래 연혁을 삭제할까요? +
+ + {history.year}년 {history.month}월 - {history.content} + +
+
+ ID : {history.id} + + ); +}; export const HistoryList = () => { - const [loading, setLoading] = useState(true); + const [loading, setLoading] = useState(true); // 컨테이너 스켈레톤 로딩 const { history, refined_history, saveHistory } = useHistory(); - // confirm 모달에서 삭제한 연혁의 ID를 능동적으로 적용하기 위해 state를 선언합니다. - const [confirmOpen, setConfirmOpen] = useState(false); - const [alertOpen, setAlertOpen] = useState(false); - const [deleteHistory, setDeleteHistory] = useState({ - id: null, - year: null, - month: null, - content: null, - }); + const { openAlert } = useAlert(); + const { openConfirm, closeConfirm, confirm_label, confirm_color } = + useConfirm(); + const { showLoading, hideLoading } = useLoading(); // confirm 모달이 표시될 때 - const handleDeleteClick = (id, year, month, content) => { - setDeleteHistory({ - id: id, - year: year, - month: month, - content: content, + const handleClick = (history) => { + openConfirm({ + title: '연혁 삭제', + content: , + onConfirm: () => { + onConfirm(history); + }, + onCancel: () => { + onCancel(); + }, + confirm_label: '삭제', + confirm_color: 'var(--danger-color)', + cancel_label: '취소', }); - setConfirmOpen(true); }; // 유저가 confirm 모달에서 삭제를 눌렀을 때 - const handleDeleteConfirm = () => { - setConfirmOpen(false); + const onConfirm = (target_delete_history) => { + console.log(target_delete_history); + showLoading(''); // 서버로 삭제를 요청합니다. - API.DELETE(`/histories/${deleteHistory.id}`) + API.DELETE(`/histories/${target_delete_history.id}`) .then() .then(() => { - setAlertOpen(true); + hideLoading(); + closeConfirm(); + openAlert({ + title: '연혁 삭제됨', + content: ( + <> + 연혁을 삭제했어요. +
+ 페이지를 다시 불러올게요. + + ), + ok_label: '닫기', + onClose: () => { + window.location.reload(); + }, + }); }); - setDeleteHistory({ - id: null, - year: null, - month: null, - content: null, - }); }; // 유저가 닫기 버튼을 눌렀을 때 - const handleDeleteCancel = () => { - setConfirmOpen(false); - setDeleteHistory({ - id: null, - year: null, - month: null, - content: null, - }); + const onCancel = () => { + closeConfirm(); }; // API로부터 데이터를 가져와 Zustand 상태를 업데이트합니다. @@ -99,17 +120,7 @@ export const HistoryList = () => { {year}년 {refined_history[year].map((hist) => ( - - handleDeleteClick( - hist.id, - hist.year, - hist.month, - hist.content, - ) - } - > + handleClick(hist)}> {hist.month}월 @@ -120,32 +131,6 @@ export const HistoryList = () => { ))} ))} - - 아래 연혁을 삭제할까요? - - {deleteHistory.year}년 {deleteHistory.month}월 -{' '} - {deleteHistory.content} - -
- ID : {deleteHistory.id} -
- { - // 간단하게 새로고침해서 연혁 목록을 다시 불러옵니다. - window.location.reload(); - }} - > - 삭제되었습니다. - ); }; diff --git a/src/components/forms/modal/Alert.jsx b/src/components/display/modal/Alert.jsx similarity index 75% rename from src/components/forms/modal/Alert.jsx rename to src/components/display/modal/Alert.jsx index 4bbd27c..fc39009 100644 --- a/src/components/forms/modal/Alert.jsx +++ b/src/components/display/modal/Alert.jsx @@ -1,7 +1,9 @@ +import useAlert from '../../../stores/useAlert'; + import styled from 'styled-components'; import { ModalLayout } from '../../layouts/ModalLayout'; -import { Button } from '../Button'; +import { Button } from '../../forms/Button'; import { Span } from '../../typograph/Text'; const ModalContainer = styled.div` @@ -43,21 +45,17 @@ const BottomControlBox = styled.div` text-align: right; `; -export const Alert = ({ - title = '알림', - isOpen, - onClose, - buttonColor, - children, -}) => { +export const Alert = () => { + const { isOpen, title, content, ok_label, ok_color, onClose } = useAlert(); + return ( - + {title} - {children} + {content} - diff --git a/src/components/forms/modal/Confirm.jsx b/src/components/display/modal/Confirm.jsx similarity index 75% rename from src/components/forms/modal/Confirm.jsx rename to src/components/display/modal/Confirm.jsx index 9d8c71b..7657115 100644 --- a/src/components/forms/modal/Confirm.jsx +++ b/src/components/display/modal/Confirm.jsx @@ -1,8 +1,10 @@ +import useConfirm from '../../../stores/useConfirm'; + import styled from 'styled-components'; import { ModalLayout } from '../../layouts/ModalLayout'; import { Span } from '../../typograph/Text'; -import { IButton } from '../Button'; +import { IButton } from '../../forms/Button'; const ModalContainer = styled.div` position: relative; @@ -86,30 +88,40 @@ const BottomControlBox = styled.div` text-align: right; `; -export const Confirm = ({ - isOpen, - title, - onConfirm, - onCancel, - confirmMsg = '확인', - confirmColor, - cancelMsg = '취소', - cancelColor, - children, -}) => { - if (!isOpen) return null; +export const Confirm = () => { + const { + isOpen, + title, + content, + onConfirm, + onCancel, + confirm_label, + cancel_label, + confirm_color, + cancel_color, + } = useConfirm(); return ( {title} - {children} + {content} - - {cancelMsg} + + {cancel_label} - - {confirmMsg} + + {confirm_label} diff --git a/src/components/display/modal/Loading.jsx b/src/components/display/modal/Loading.jsx new file mode 100644 index 0000000..0773124 --- /dev/null +++ b/src/components/display/modal/Loading.jsx @@ -0,0 +1,79 @@ +import useLoading from '../../../stores/useLoading'; + +import styled, { keyframes } from 'styled-components'; + +import { ModalLayout } from '../../layouts/ModalLayout'; +import { Text } from '../../typograph/Text'; + +import { SquareLogo } from '../../../assets/kert_logos'; + +const LoadingContainer = styled.div` + position: relative; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 30px; + + @keyframes slide-in { + 0% { + opacity: 0; + transform: translateY(30px); + } + 100% { + opacity: 1; + transform: translateY(0px); + } + } + animation: slide-in 0.3s cubic-bezier(0.27, 0.02, 0.26, 0.99); +`; + +const IconContainer = styled.div` + display: flex; + justify-content: space-around; + width: 200px; +`; + +const growShrink = keyframes` + 0%, 100% { + transform: scale(1); + opcity: 1; + background-color: transparent; + border-radius: 20px; + } + 50% { + opacity: 0.5; + transform: scale(0.25); + background-color: white; + border-radius: 20px; + } +`; + +const LoadingIcon = styled(SquareLogo)` + fill: white; + + width: 32px; + height: 32px; + + animation: ${growShrink} 1s cubic-bezier(0.58, 0.06, 0.35, 0.9) infinite; + animation-delay: ${(props) => props.delay}s; +`; + +export const Loading = () => { + const { isOpen, message } = useLoading(); + + return ( + + + + + + + + + {message} + + + ); +}; diff --git a/src/components/forms/Input.jsx b/src/components/forms/Input.jsx index 08b9df7..3a99271 100644 --- a/src/components/forms/Input.jsx +++ b/src/components/forms/Input.jsx @@ -41,6 +41,19 @@ export const RawInput = styled.input.attrs((props) => ({ &:focus { border: 1px solid var(--primary-color); } + + // input[type="number"]에서 화살표 컨트롤을 숨깁니다. + // 크롬, 사파리, 엣지, 오페라 + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + + // 파이어폭스 + &[type='number'] { + -moz-appearance: textfield; + } `; export const Input = forwardRef(({ label, value, ...props }, ref) => { diff --git a/src/components/layouts/DashboardLayout.jsx b/src/components/layouts/DashboardLayout.jsx index 080d3cc..d7a43ab 100644 --- a/src/components/layouts/DashboardLayout.jsx +++ b/src/components/layouts/DashboardLayout.jsx @@ -2,7 +2,7 @@ // 코드 작성자 : GiHhub @whitedev77773 // 외부 라이브러리에서 import -import React from 'react'; +import React, { useEffect } from 'react'; import { createRef } from 'react'; import { useOutlet } from 'react-router-dom'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; @@ -10,6 +10,9 @@ import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import import { DashboardNav } from '../navigation/DashboardNav'; +import { Alert } from '../display/modal/Alert'; +import { Confirm } from '../display/modal/Confirm'; +import { Loading } from '../display/modal/Loading'; // 전환 애니메이션 import '../../transitions/fade-slide.css'; @@ -26,6 +29,8 @@ const Layout = styled.div.attrs({ display: flex; + z-index: 1000; + & > #dashboard-nav { height: calc(100vh - 80px); } @@ -63,6 +68,9 @@ export const DashboardLayout = ({ location }) => { return ( + + + {/* 내비바 */} {/* 콘텐츠 */} diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index da8d727..74765d9 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -1,66 +1,130 @@ -import { useRef, useState } from 'react'; -import useHistory from '../../stores/dashboard/useHistory'; +import { forwardRef, useEffect, useRef } from 'react'; import { Text } from '../../components/typograph/Text'; import { Header } from './Dashboard.styled'; import { ManageHistory, Menu } from './History.styled'; import { AddIcon, RefreshIcon } from '../../assets/icons'; import { HistoryList } from '../../components/display/HistoryList'; +import { Input } from '../../components/forms/Input'; import { API } from '../../utils/api'; -import { Confirm } from '../../components/forms/modal/Confirm'; -import { Alert } from '../../components/forms/modal/Alert'; -import { Input } from '../../components/forms/Input'; +import useAlert from '../../stores/useAlert'; +import useConfirm from '../../stores/useConfirm'; +import useLoading from '../../stores/useLoading'; /** - * ↓ API 요청 시 반환 형식 ↓ - * [{ - * "id": "integer", + * ↓ API 요청 시 history 형식 ↓ + * { * "year": "integer", * "month": "integer", - * "description": "string", - * "created_at": "datetime", - * "updated_at": "datetime" - * }] + * "description": "string" + * } */ +// 새로운 연혁을 추가하기 위한 폼입니다. +const NewHistoryInputForms = forwardRef((props, ref) => { + const { yearRef, monthRef, contentRef } = ref; + + useEffect(() => { + // useEffect 외부에서 .focus()는 ref가 비어있는 채로 실행됩니다. + // 따라서 useEffect으로 컴포넌트의 마운트가 끝난 후 포커싱을 실행하도록 합니다. + if (yearRef) { + yearRef.current.focus(); + } + }, []); + + return ( + <> +
+ + +
+ + + ); +}); + export default function History() { - const yearInputRef = useRef(''); - const monthInputRef = useRef(''); - const contentInputRef = useRef(''); + const refs = { + yearRef: useRef(), + monthRef: useRef(), + contentRef: useRef(), + }; - const [alertOpen, setAlertOpen] = useState(false); - const [confirmOpen, setConfirmOpen] = useState(false); + const { openAlert, closeAlert } = useAlert(); + const { openConfirm, closeConfirm } = useConfirm(); + const { showLoading, hideLoading, message } = useLoading(); - // confirm 모달이 표시될 때 + // 추가 버튼을 눌렀을 때 const handleAddClick = () => { - setConfirmOpen(true); + openConfirm({ + title: '새로운 연혁 추가', + content: , + onConfirm: onConfirm, + onCancel: closeConfirm, + }); }; // 유저가 confirm 모달에서 확인을 눌렀을 때 - const handleAddConfirm = () => { - console.log(contentInputRef.current.value); + const onConfirm = () => { + const newYear = parseInt(refs.yearRef.current.value); + const newMonth = parseInt(refs.monthRef.current.value); + const newContent = refs.contentRef.current.value; + + // 연도, 월, 내용 중 하나라도 비어있으면 API 요청 X + if (!newYear || !newMonth || !newContent) { + openAlert({ + title: '경고', + content: 모든 입력란을 채워주세요., + ok_label: '닫기', + onClose: closeAlert, + }); + return; + } + // API 서버에 전송할 연혁 객체를 구성합니다. const newHistory = { - year: parseInt(yearInputRef.current.value), - month: parseInt(monthInputRef.current.value), - content: contentInputRef.current.value, + year: newYear, + month: newMonth, + content: newContent, }; - console.log(newHistory); + + showLoading({ message: '연혁 정보를 전송하고 있어요...' }); // 서버 요청 하기전 로딩 표시 // 서버로 추가를 요청합니다. API.POST('/histories', newHistory) .then() .then(() => { - setAlertOpen(true); + hideLoading(); + closeConfirm(); + openAlert({ + title: '연혁 추가 성공', + content: ( + <> + + {newYear}년 {newMonth}월 - {newContent} + +
+ 페이지를 다시 불러올게요. + + ), + ok_label: '닫기', + onClose: () => { + window.location.reload(); + }, + }); }); - - setConfirmOpen(false); - }; - - // 유저가 닫기 버튼을 눌렀을 때 - const handleAddCancel = () => { - setConfirmOpen(false); }; return ( @@ -76,49 +140,6 @@ export default function History() { - - {/* 연혁 추가 시 표시되는 모달들입니다. */} - -
- - -
- -
- { - // 간단하게 새로고침해서 연혁 목록을 다시 불러옵니다. - window.location.reload(); - }} - buttonColor="--success-color" - > - 추가되었습니다. - 연혁 목록을 다시 불러옵니다. - ); } From 4452b51bcc7656ad5fcbb59108c17a98c4871045 Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 5 Sep 2024 09:04:07 +0900 Subject: [PATCH 22/97] =?UTF-8?q?feature:=20=EB=AA=A8=EB=8B=AC=EC=B0=BD?= =?UTF-8?q?=EC=9D=84=20=EC=A0=84=EC=97=AD=EC=A0=81=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/useAlert.js | 52 +++++++++++++++++++++++++++++++ src/stores/useConfirm.js | 67 ++++++++++++++++++++++++++++++++++++++++ src/stores/useLoading.js | 31 +++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 src/stores/useAlert.js create mode 100644 src/stores/useConfirm.js create mode 100644 src/stores/useLoading.js diff --git a/src/stores/useAlert.js b/src/stores/useAlert.js new file mode 100644 index 0000000..b8d000c --- /dev/null +++ b/src/stores/useAlert.js @@ -0,0 +1,52 @@ +import React from 'react'; +import { create } from 'zustand'; + +/** + * Alert Modal + * @param {boolean} isOpen 모달 여닫이 + * @param {string} title 상단 제목 + * @param {React.ReactHTMLElement} content 내용 + * @param {string} ok_label 닫는 버튼 라벨 + * @param {string} ok_color 닫는 버튼 색 + */ +const useAlert = create((set) => ({ + // 모달의 초기 상태 + isOpen: false, + onClose: null, // 닫는 버튼을 누를 때 실행할 함수 + title: '', + content: null, + ok_label: '', + ok_color: '', + + // 모달을 열고 내용 설정 + openAlert: ({ + title = '', + onClose = null, + content = null, + ok_label = '확인', + ok_color = 'var(--primary-color)', + }) => { + set({ + isOpen: true, + title: title, + onClose: onClose, + content: content, + ok_label: ok_label, + ok_color: ok_color, + }); + }, + + // 모달을 닫은 후 내용 초기화하여 메모리 절약 + closeAlert: () => { + set({ + isOpen: false, + title: '', + onClose: null, + content: null, + ok_label: '', + ok_color: '', + }); + }, +})); + +export default useAlert; diff --git a/src/stores/useConfirm.js b/src/stores/useConfirm.js new file mode 100644 index 0000000..fd1979d --- /dev/null +++ b/src/stores/useConfirm.js @@ -0,0 +1,67 @@ +import React from 'react'; +import { create } from 'zustand'; + +/** + * Confirm Modal + * @param {string} title 상단 제목 + * @param {React.ReactHTMLElement} content 내용 + * @param {function} onConfirm 확인을 눌렀을 때 실행할 함수 + * @param {function} onCancel 취소를 눌렀을 때 실행할 함수 + * @param {string} confirm_label 확인 버튼 라벨 + * @param {string} cancel_label 취소 버튼 라벨 + * @param {string} confirm_color 확인 버튼 색 + * @param {string} cancel_color 취소 버튼 색 + */ +const useConfirm = create((set) => ({ + isOpen: false, // 모달의 초기 상태 + title: '', + content: null, + onConfirm: null, + onCancel: null, + confirm_label: '', + confirm_color: '', + cancel_label: '', + cancel_color: '', + + // 모달을 열고 내용 설정 + openConfirm: ({ + title = '', + content, + onConfirm = null, + onCancel = null, + confirm_label = '예', + confirm_color = 'var(--success-color)', + cancel_label = '아니오', + cancel_color = 'var(--container-border)', + }) => { + console.log('사용자 확인창 열림'); + set({ + isOpen: true, + title: title, + content: content, + onConfirm: onConfirm, + onCancel: onCancel, + confirm_label: confirm_label, + confirm_color: confirm_color, + cancel_label: cancel_label, + cancel_color: cancel_color, + }); + }, + + // 모달을 닫은 후 내용 초기화하여 메모리 절약 + closeConfirm: () => { + set({ + isOpen: false, + title: '', + content: null, + onConfirm: null, + onCancel: null, + confirm_label: '', + confirm_color: '', + cancel_label: '', + cancel_color: '', + }); + }, +})); + +export default useConfirm; diff --git a/src/stores/useLoading.js b/src/stores/useLoading.js new file mode 100644 index 0000000..67ffd28 --- /dev/null +++ b/src/stores/useLoading.js @@ -0,0 +1,31 @@ +import React from 'react'; +import { create } from 'zustand'; + +/** + * Loading Screen (전체화면) + * @param {boolean} isOpen 로딩창 여닫이 + * @param {React.ReactHTMLElement} message 내용 + */ +const useLoading = create((set) => ({ + // 로딩창의 초기 상태 + isOpen: false, + message: '', + + // 로딩창을 열고 내용 설정 + showLoading: ({ message = '잠시만 기다려주세요...' }) => { + set({ + isOpen: true, + message: message, + }); + }, + + // 로딩창을 닫은 후 내용 초기화하여 메모리 절약 + hideLoading: () => { + set({ + isOpen: false, + message: '', + }); + }, +})); + +export default useLoading; From 5c209bac32f4fb4c0f0ec4d682821abeccbb689c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=8C=ED=8C=8C?= Date: Sat, 7 Sep 2024 20:03:24 +0900 Subject: [PATCH 23/97] =?UTF-8?q?chore:=20toast=20ui=20editor=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 140 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 139 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 819360a..135ba2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "fe", "version": "0.0.0", "dependencies": { + "@toast-ui/react-editor": "^3.2.3", "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -983,6 +984,34 @@ "@swc/counter": "^0.1.3" } }, + "node_modules/@toast-ui/editor": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@toast-ui/editor/-/editor-3.2.2.tgz", + "integrity": "sha512-ASX7LFjN2ZYQJrwmkUajPs7DRr9FsM1+RQ82CfTO0Y5ZXorBk1VZS4C2Dpxinx9kl55V4F8/A2h2QF4QMDtRbA==", + "license": "MIT", + "dependencies": { + "dompurify": "^2.3.3", + "prosemirror-commands": "^1.1.9", + "prosemirror-history": "^1.1.3", + "prosemirror-inputrules": "^1.1.3", + "prosemirror-keymap": "^1.1.4", + "prosemirror-model": "^1.14.1", + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.18.7" + } + }, + "node_modules/@toast-ui/react-editor": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@toast-ui/react-editor/-/react-editor-3.2.3.tgz", + "integrity": "sha512-86QdgiOkBeSwRBEUWRKsTpnm6yu5j9HNJ3EfQN8EGcd7kI8k8AhExXyUJ3NNgNTzN7FfSKMw+1VaCDDC+aZ3dw==", + "license": "MIT", + "dependencies": { + "@toast-ui/editor": "^3.2.2" + }, + "peerDependencies": { + "react": "^17.0.1" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -993,13 +1022,13 @@ "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true + "dev": true }, "node_modules/@types/react": { "version": "18.3.3", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "devOptional": true, + "dev": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1532,6 +1561,12 @@ "node": ">=6.0.0" } }, + "node_modules/dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -3086,6 +3121,12 @@ "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -3257,6 +3298,89 @@ "react-is": "^16.13.1" } }, + "node_modules/prosemirror-commands": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz", + "integrity": "sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", + "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", + "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", + "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", + "license": "MIT", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", + "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.34.2", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.2.tgz", + "integrity": "sha512-tPX/V2Xd70vrAGQ/V9CppJtPKnQyQMypJGlLylvdI94k6JaG+4P6fVmXPR1zc1eVTW0gq3c6zsfqwJKCRLaG9Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3476,6 +3600,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4039,6 +4169,12 @@ } } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 615a685..d7b75b4 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "format": "prettier --write ./src" }, "dependencies": { + "@toast-ui/react-editor": "^3.2.3", "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", From addd31ab7801f681db8cfbc1a3f32d5e49585790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=8C=ED=8C=8C?= Date: Sat, 7 Sep 2024 20:33:20 +0900 Subject: [PATCH 24/97] =?UTF-8?q?chore:=20npm=20install=20=EC=8B=9C=20lega?= =?UTF-8?q?cy=20peer=20dependency=20=EC=98=B5=EC=85=98=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .npmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..e9ee3cb --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true \ No newline at end of file From 0918f099c3a389be8c90d31d1274a0633985dd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=8C=ED=8C=8C?= Date: Sat, 7 Sep 2024 21:05:19 +0900 Subject: [PATCH 25/97] =?UTF-8?q?chore:=20toast=20ui=20=EC=97=90=EB=94=94?= =?UTF-8?q?=ED=84=B0=20=ED=94=8C=EB=9F=AC=EA=B7=B8=EC=9D=B8=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit code syntax highlight, color-syntax 플러그인 적용 --- package-lock.json | 36 ++++++++++++++++++++++++++++++++++++ package.json | 3 +++ 2 files changed, 39 insertions(+) diff --git a/package-lock.json b/package-lock.json index 135ba2b..1b3756c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,11 @@ "name": "fe", "version": "0.0.0", "dependencies": { + "@toast-ui/editor-plugin-code-syntax-highlight": "^3.1.0", + "@toast-ui/editor-plugin-color-syntax": "^3.1.0", "@toast-ui/react-editor": "^3.2.3", "axios": "^1.7.4", + "prismjs": "^1.29.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.25.1", @@ -1000,6 +1003,24 @@ "prosemirror-view": "^1.18.7" } }, + "node_modules/@toast-ui/editor-plugin-code-syntax-highlight": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-code-syntax-highlight/-/editor-plugin-code-syntax-highlight-3.1.0.tgz", + "integrity": "sha512-OgX5pZiTnHREoTTXDAFu1k6RzEspGOxeJNRlt/Lnoi1GvLbIpUTTbBcls9becpXT/Qdls++8G3r5C60cVdellA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.23.0" + } + }, + "node_modules/@toast-ui/editor-plugin-color-syntax": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-color-syntax/-/editor-plugin-color-syntax-3.1.0.tgz", + "integrity": "sha512-UVKfMBPV+3snSaJn9RUKGbxJbgi92D2t68ow8wAjGezvMp1ht4UVETrvomdTGr+RYhXSeH3JvSwN9nmQqw0qzA==", + "license": "MIT", + "dependencies": { + "tui-color-picker": "^2.2.6" + } + }, "node_modules/@toast-ui/react-editor": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/@toast-ui/react-editor/-/react-editor-3.2.3.tgz", @@ -3287,6 +3308,15 @@ "node": ">=6.0.0" } }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3985,6 +4015,12 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tui-color-picker": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/tui-color-picker/-/tui-color-picker-2.2.8.tgz", + "integrity": "sha512-q5sE9NQ5NR9lYpilYjcI7Sdv0KCogo+W8fZY+AYTj/HYg+9fscYy3UuJ6UQiV1bF+ARCLwFRWC8UcOt9kuUctQ==", + "license": "MIT" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index d7b75b4..c2b0c62 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,11 @@ "format": "prettier --write ./src" }, "dependencies": { + "@toast-ui/editor-plugin-code-syntax-highlight": "^3.1.0", + "@toast-ui/editor-plugin-color-syntax": "^3.1.0", "@toast-ui/react-editor": "^3.2.3", "axios": "^1.7.4", + "prismjs": "^1.29.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.25.1", From 6281116241ea11073fb0143befddd78e0f5d7f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=8C=ED=8C=8C?= Date: Sat, 7 Sep 2024 21:10:07 +0900 Subject: [PATCH 26/97] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 6 ++- src/pages/NewArticle.jsx | 89 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 src/pages/NewArticle.jsx diff --git a/src/App.jsx b/src/App.jsx index 0c596eb..503c213 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -23,6 +23,7 @@ import { import DevDocument from './pages/DevDocument'; import Board from './pages/Board'; import Article from './pages/Article'; +import NewArticle from './pages/NewArticle'; export default function App() { return ( @@ -32,7 +33,10 @@ export default function App() { }> } /> } /> - } /> + + } /> + } /> + } /> } /> }> diff --git a/src/pages/NewArticle.jsx b/src/pages/NewArticle.jsx new file mode 100644 index 0000000..98d36e7 --- /dev/null +++ b/src/pages/NewArticle.jsx @@ -0,0 +1,89 @@ +import styled from 'styled-components'; +import { useEffect, useLayoutEffect } from 'react'; +import useTheme from '../hooks/useTheme'; + +import { Editor } from '@toast-ui/react-editor'; +import '@toast-ui/editor/dist/toastui-editor.css'; +import colorSyntax from '@toast-ui/editor-plugin-color-syntax'; +import 'tui-color-picker/dist/tui-color-picker.css'; +import '@toast-ui/editor-plugin-color-syntax/dist/toastui-editor-plugin-color-syntax.css'; +import '@toast-ui/editor/dist/i18n/ko-kr'; + +import '@toast-ui/editor/dist/toastui-editor.css'; +import '@toast-ui/editor/dist/theme/toastui-editor-dark.css'; + +import 'prismjs/themes/prism.css'; +import '@toast-ui/editor-plugin-code-syntax-highlight/dist/toastui-editor-plugin-code-syntax-highlight.css'; +import codeSyntaxHighlight from '@toast-ui/editor-plugin-code-syntax-highlight'; +import Prism from 'prismjs'; + +import 'prismjs/themes/prism.css'; +import 'prismjs/themes/prism-okaidia.css'; // 다크 모드 테마를 추가합니다 +import '@toast-ui/editor/dist/theme/toastui-editor-dark.css'; // Toast UI 에디터 다크 모드 테마를 추가합니다 + +import 'prismjs/components/prism-jsx.min'; // JSX 언어 지원을 포함합니다 (선택 사항) + +import 'prismjs/plugins/line-numbers/prism-line-numbers.css'; // 코드 블럭에 줄 번호를 추가하기 위해 이 줄을 추가합니다 +import 'prismjs/plugins/line-numbers/prism-line-numbers.min'; + +const Container = styled.div` + width: 100%; + margin: 0 auto; + margin-top: 80px; + padding: 3rem 3rem; + + @media (min-width: 640px) { + max-width: 640px; + } + @media (min-width: 768px) { + max-width: 768px; + } + @media (min-width: 1024px) { + max-width: 1024px; + } + @media (min-width: 1280px) { + max-width: 1280px; + } +`; + +export default function NewArticle() { + const theme = useTheme(); + + console.log(theme); + + useEffect(() => { + console.log(theme); + const editorEl = document.getElementsByClassName( + 'toastui-editor-defaultUI', + )[0]; + + if (editorEl) { + const shouldAddDarkClass = + theme.theme === 'dark' && + !editorEl.classList.contains('toastui-editor-dark'); + const shouldRemoveDarkClass = + theme.theme !== 'dark' && + editorEl.classList.contains('toastui-editor-dark'); + + if (shouldAddDarkClass) { + editorEl.classList.add('toastui-editor-dark'); + } else if (shouldRemoveDarkClass) { + editorEl.classList.remove('toastui-editor-dark'); + } + } + }, [theme]); + + return ( + + + + ); +} From 966fcfbbe17c62754642a46da073ea8bfc0cea64 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sun, 8 Sep 2024 18:20:13 +0900 Subject: [PATCH 27/97] =?UTF-8?q?feat:=20mypage=20UI=20=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 2 + src/pages/MyPage.jsx | 159 ++++++++++++++++++++++++++++++++++++++++++ src/styles/MyPage.css | 144 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 305 insertions(+) create mode 100644 src/pages/MyPage.jsx create mode 100644 src/styles/MyPage.css diff --git a/src/App.jsx b/src/App.jsx index 54fc41a..f054d09 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -26,6 +26,7 @@ import Article from './pages/Article'; import Login from './pages/Login'; import SignUp from './pages/SignUp'; +import MyPage from './pages/MyPage'; export default function App() { return ( @@ -39,6 +40,7 @@ export default function App() { } /> } /> } /> + } /> } /> }> } /> diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx new file mode 100644 index 0000000..b7b9266 --- /dev/null +++ b/src/pages/MyPage.jsx @@ -0,0 +1,159 @@ +// MyPage.jsx +// 코드 작성자 : GiHhub @huisuu + +import { useState, useEffect } from 'react'; +import axios from 'axios'; +import '../styles/MyPage.css'; + +export default function MyPage() { + const [userInfo, setUserInfo] = useState({ + name: '', + studentNumber: '', + profilePic: null, + }); + + const [imagePreview, setImagePreview] = useState(null); + + // Fetch user data after login + useEffect(() => { + const fetchUserData = async () => { + try { + const response = await axios.get('/user'); + setUserInfo({ + name: response.data.name, + studentNumber: response.data.studentNumber, + profilePic: response.data.profilePic || '../assets/icons/menu/Executive.png', + }); + setImagePreview(response.data.profilePic || '../assets/icons/menu/Executive.png'); + } catch (error) { + console.error('Failed to fetch user data:', error); + } + }; + fetchUserData(); + }, []); + + const handleImageUpload = (event) => { + const file = event.target.files[0]; + if (file) { + setImagePreview(URL.createObjectURL(file)); + + const formData = new FormData(); + formData.append('profilePic', file); + + axios.post('/upload-profile-pic-endpoint', formData) + .then(response => { + console.log('Image uploaded successfully'); + }) + .catch(error => { + console.error('Image upload failed:', error); + }); + } + }; + + const handleDeleteImage = () => { + setImagePreview('../assets/menu/Executive.png'); // Reset to default + + // Call the API to delete the image + axios.post('/delete-profile-pic-endpoint') + .then(response => { + console.log('Image deleted successfully'); + }) + .catch(error => { + console.error('Image deletion failed:', error); + }); + }; + + return ( +
+ {/* Account Info Section */} +
+

계정 정보 Account Info

+ +
+ Profile +
+ + + +
+
+ +
+
+
+ + +
+ +
+ + +
+
+
+
+ + {/* Change Password Section */} +
+

비밀번호 변경 Change Password

+
+
+ + +
+
+
+ + +
+ +
+ + +
+
+ +
+
+ + {/* Delete Account Section */} +
+

계정 탈퇴 Delete Account

+

+ KERT 계정을 삭제합니다. 삭제된 계정은 복구가 불가능하며 동일 이메일로 계정을 새로 생성해야 합니다. +

+
+
+
+ + +
+
+ + +
+
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/src/styles/MyPage.css b/src/styles/MyPage.css new file mode 100644 index 0000000..0ae31a3 --- /dev/null +++ b/src/styles/MyPage.css @@ -0,0 +1,144 @@ +body { + font-family: 'Noto Sans KR', sans-serif; + background-color: #0d0e14; + color: #ffffff; + margin: 0; + padding-top: 60px; +} + +.mypage-container { + width: 100%; + max-width: 1200px; + margin: 0 auto; + padding: 50px; +} + +.section { + background-color: #1b1e27; + padding: 30px; + border-radius: 20px; + margin-bottom: 30px; + box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.3); +} + +.section-title { + font-size: 24px; + margin-bottom: 20px; +} + +.section-title-en { + font-size: 14px; + color: #aaa; + margin-left: 10px; +} + +.profile-pic-container { + display: flex; + align-items: center; + margin-bottom: 20px; +} + +.profile-pic { + width: 80px; + height: 80px; + border-radius: 50%; + margin-right: 15px; +} + +.pic-buttons { + display: flex; + gap: 10px; +} + +.change-pic-btn, +.delete-pic-btn { + padding: 10px 20px; + border: none; + border-radius: 8px; + cursor: pointer; +} + +.change-pic-btn { + background-color: #3b82f6; + color: white; +} + +.delete-pic-btn { + background-color: #ff4d4d; + color: white; +} + +.form { + margin-top: 20px; + margin-right: 20px; +} + +.input-row { + display: flex; + justify-content: space-between; + gap: 20px; +} + +.input-group { + width: 48%; +} + +.input-group:last-child { + margin-right: 0; +} + +.input-group-long { + width: 100%; + +} + +.input-group-long:last-child { + margin-right: 0; +} + +input { + width: 100%; + padding: 10px; + margin-bottom: 20px; + background-color: #2c2f3e; + border: none; + border-radius: 10px; + color: #ffffff; +} + +input:read-only { + background-color: #2c2f3e; + color: #777; +} + +.form label { + font-size: 16px; + margin-bottom: 10px; + display: block; +} + +.form input { + width: 100%; + padding: 10px; + background-color: #2c2f3e; + border: none; + border-radius: 10px; + color: #ffffff; +} + +.edit-btn, +.delete-btn { + background-color: #3b82f6; + color: white; + padding: 12px 20px; + border: none; + border-radius: 10px; + cursor: pointer; + width: 100%; +} + +.warning-message { + font-size: 14px; + color: #ff6b6b; + margin-bottom: 20px; +} \ No newline at end of file From d294d6e49c162d89b3b4b3ad5744959cfa41cf02 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sun, 8 Sep 2024 19:04:59 +0900 Subject: [PATCH 28/97] =?UTF-8?q?style:=20styled-components=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 24 ++- package.json | 3 +- src/App.jsx | 5 + src/pages/SignUp.jsx | 375 ++++++++++++++++++++++++++---------------- src/styles/SignUp.css | 134 --------------- 5 files changed, 260 insertions(+), 281 deletions(-) delete mode 100644 src/styles/SignUp.css diff --git a/package-lock.json b/package-lock.json index 819360a..2124aaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,9 @@ "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-hook-form": "^7.53.0", "react-router-dom": "^6.25.1", - "styled-components": "^6.1.12", + "styled-components": "^6.1.13", "zustand": "^4.5.4" }, "devDependencies": { @@ -3314,6 +3315,21 @@ "react": "^18.3.1" } }, + "node_modules/react-hook-form": { + "version": "7.53.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", + "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -3745,9 +3761,9 @@ } }, "node_modules/styled-components": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.12.tgz", - "integrity": "sha512-n/O4PzRPhbYI0k1vKKayfti3C/IGcPf+DqcrOB7O/ab9x4u/zjqraneT5N45+sIe87cxrCApXM8Bna7NYxwoTA==", + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", "dependencies": { "@emotion/is-prop-valid": "1.2.2", "@emotion/unitless": "0.8.1", diff --git a/package.json b/package.json index 615a685..7c88343 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-hook-form": "^7.53.0", "react-router-dom": "^6.25.1", - "styled-components": "^6.1.12", + "styled-components": "^6.1.13", "zustand": "^4.5.4" }, "devDependencies": { diff --git a/src/App.jsx b/src/App.jsx index 0c596eb..54fc41a 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -24,6 +24,9 @@ import DevDocument from './pages/DevDocument'; import Board from './pages/Board'; import Article from './pages/Article'; +import Login from './pages/Login'; +import SignUp from './pages/SignUp'; + export default function App() { return ( <> @@ -34,6 +37,8 @@ export default function App() { } /> } /> } /> + } /> + } /> } /> }> } /> diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index 1cd55f2..383ebd9 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -1,10 +1,113 @@ +// SignUp.jsx +// 코드 작성자 : GiHhub @huisuu + import { useForm } from 'react-hook-form'; import { useNavigate, Link } from 'react-router-dom'; import axios from 'axios'; - -import '../styles/SignUp.css'; +import styled from 'styled-components'; +import { Text } from '../components/typograph/Text'; import '../font/main_font.css'; +const Container = styled.div` + background-color: #080f17; + font-family: 'NanumSquare', Helvetica; + display: flex; + justify-content: center; + width: 100%; + height: 100%; + margin: 0; + padding: 0; +`; + +const SignUpContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + position: relative; + top: 120px; +`; + +const SignUpBox = styled.div` + background-color: #10141c; + padding: 50px; + border-radius: 10px; + width: 500px; +`; + +const SignUpHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: flex-start; + position: relative; + padding-bottom: 20px; +`; + +const KertLogo = styled.div` + position: absolute; + top: 0; + right: 0; + + img { + width: 80px; + height: 80px; + border-radius: 50%; + } +`; + +const SignUpForm = styled.form` + .input-group { + margin-bottom: 25px; + margin-right: 30px; + + label { + display: block; + margin-bottom: 5px; + font-size: 18px; + color: #ffffff; + } + + input { + width: 100%; + padding: 15px; + border: 1px solid #ccc; + border-radius: 5px; + background-color: #1c1f25; + color: white; + } + + input::placeholder { + font-size: 16px; + } + + .error-message { + color: #ff4d4d; + font-size: 14px; + margin-top: 10px; + } + } +`; + +const SignUpButton = styled.button` + width: 100%; + padding: 15px; + background-color: #4a90e2; + border: none; + border-radius: 5px; + color: white; + font-size: 20px; + cursor: pointer; + margin-top: 20px; +`; + +const LoginLink = styled.div` + margin-top: 20px; + text-align: center; + font-size: 14px; + color: #ccc; +`; + export default function SignUp() { const { register, @@ -16,11 +119,8 @@ export default function SignUp() { const onSubmit = async (data) => { try { - // 서버로 회원가입 정보를 전송합니다. - const response = await axios.post('155.230.118.35', data); + const response = await axios.post('http://155.230.118.35', data); console.log('Sign up successful:', response.data); - - // 회원가입 성공 시 메인 페이지로 이동합니다. navigate('/Mainpage'); } catch (error) { console.error('Error:', error); @@ -29,144 +129,135 @@ export default function SignUp() { }; return ( -
-
-
-
-
-

Sign Up to KERT

-

회원가입

+ + + + +
+ Sign Up to KERT + 회원가입
-
+ kert-logo + + + + {/* name */} +
+ + + {errors.username && ( +

{errors.username.message}

+ )}
-
-
-
- {/* name */} -
- - - {errors.username && ( -

{errors.username.message}

- )} -
- - {/* student number */} -
- - - {errors.student && ( -

{errors.student.message}

- )} -
- - {/* e-mail */} -
- - - {errors.mail && ( -

{errors.mail.message}

- )} -
- - {/* major */} -
- - - {errors.major && ( -

{errors.major.message}

- )} -
- - {/* generation */} -
- - - {errors.generation && ( -

{errors.generation.message}

- )} -
- - {/* password */} -
- - - {errors.password && ( -

{errors.password.message}

- )} -
- - -
- 이미 계정이 있으신가요? 로그인 -
-
-
-
-
-
+ {/* student number */} +
+ + + {errors.student && ( +

{errors.student.message}

+ )} +
+ {/* e-mail */} +
+ + + {errors.mail && ( +

{errors.mail.message}

+ )} +
+ {/* major */} +
+ + + {errors.major && ( +

{errors.major.message}

+ )} +
+ {/* generation */} +
+ + + {errors.generation && ( +

{errors.generation.message}

+ )} +
+ {/* password */} +
+ + + {errors.password && ( +

{errors.password.message}

+ )} +
+ + 회원가입 + + 이미 계정이 있으신가요? 로그인 + + + + + ); } diff --git a/src/styles/SignUp.css b/src/styles/SignUp.css deleted file mode 100644 index 6a446bb..0000000 --- a/src/styles/SignUp.css +++ /dev/null @@ -1,134 +0,0 @@ -body { - background-color: #080f17; - /* background-color: var(--primary-text-color); */ - font-family: "NanumSquare", Helvetica; - margin: 0; - padding: 0; - display: flex; - flex-direction: row; - justify-content: center; - width: 100%; - height: 100%; -} - -.div { - top: 100px; - position: relative; - /* height: 1140px; */ - /* width: 1920px; */ -} - -.login-button { - margin-left: 20px; - padding: 10px 20px; - background-color: #4A90E2; - color: white; - border: none; - border-radius: 50px; - cursor: pointer; -} - -/* 회원가입 박스 스타일 */ -.signup-container { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100%; - - top: 100px; - /* width: 914px; */ -} - -.signup-box { - background-color: #10141c; - padding: 50px; - /* margin: 50px; */ - - border-radius: 10px; - width: 500px; -} - -.signup-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - position: relative; - padding-bottom: 20px; -} - -.signup-header h1 { - margin: 0; - font-size: 20px; - font-weight: 300; - color: #ffffff; -} - -.signup-header h2 { - margin: 10px 0 20px 0; - font-size: 28px; - font-weight: 700; - color: #ffffff; -} - -.kert-logo { - position: absolute; - top: 0; - right: 0; -} - -.kert-logo img { - width: 80px; - height: 80px; - border-radius: 50%; -} - -.signup-form .input-group { - margin-right: 30px; - margin-bottom: 25px; -} - -.signup-form .input-group label { - display: block; - margin-bottom: 5px; - font-size: 18px; - color: #ffffff; -} - -.signup-form .input-group input { - width: 100%; - padding: 15px; - border: 1px solid #ccc; - border-radius: 5px; - background-color: #1c1f25; - color: white; -} - -.signup-form .input-group input::placeholder { - font-size: 16px; -} - -.error-message { - color: #ff4d4d; - font-size: 14px; - margin-top: 10px; -} - -.signup-button { - width: 100%; - padding: 15px; - background-color: #4A90E2; - border: none; - border-radius: 5px; - color: white; - font-size: 20px; - cursor: pointer; - margin-top: 20px; -} - -.login-link { - margin-top: 20px; - text-align: center; - font-size: 14px; - color: #ccc; -} \ No newline at end of file From 49ad9875007cfa6b569b5b8a9f703627433f82fa Mon Sep 17 00:00:00 2001 From: huisuu Date: Mon, 9 Sep 2024 21:11:15 +0900 Subject: [PATCH 29/97] =?UTF-8?q?style:=20styled=20components=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MyPage.jsx | 342 ++++++++++++++++++++++++++++++------------ src/styles/MyPage.css | 144 ------------------ 2 files changed, 248 insertions(+), 238 deletions(-) delete mode 100644 src/styles/MyPage.css diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index b7b9266..9471528 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -1,9 +1,158 @@ // MyPage.jsx // 코드 작성자 : GiHhub @huisuu +import styled from 'styled-components'; import { useState, useEffect } from 'react'; import axios from 'axios'; -import '../styles/MyPage.css'; + +const Container = styled.div` + font-family: 'Noto Sans KR', sans-serif; + background-color: #0d0e14; + color: #ffffff; + margin: 0; + padding-top: 60px; + display: flex; + justify-content: center; +`; + +const MyPageContainer = styled.div` + width: 100%; + max-width: 1200px; + margin: 0 auto; + padding: 50px; +`; + +const Section = styled.div` + background-color: #1b1e27; + padding: 30px; + border-radius: 20px; + margin-bottom: 30px; + box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.3); +`; + +const SectionTitle = styled.h2` + font-size: 24px; + margin-bottom: 20px; + + .section-title-en { + font-size: 14px; + color: #aaa; + margin-left: 10px; + } +`; + +const ProfilePicContainer = styled.div` + display: flex; + align-items: center; + margin-bottom: 20px; +`; + +const ProfilePic = styled.img` + width: 80px; + height: 80px; + border-radius: 50%; + margin-right: 15px; +`; + +const PicButtons = styled.div` + display: flex; + gap: 10px; + + .change-pic-btn { + background-color: #3b82f6; + color: white; + padding: 10px 20px; + border: none; + border-radius: 8px; + cursor: pointer; + } + + .delete-pic-btn { + background-color: #ff4d4d; + color: white; + padding: 10px 20px; + border: none; + border-radius: 8px; + cursor: pointer; + } +`; + +const Form = styled.form` + margin-top: 20px; + margin-right: 20px; +`; + +const InputRow = styled.div` + display: flex; + justify-content: space-between; + gap: 20px; +`; + +const InputGroup = styled.div` + width: 48%; + + label { + font-size: 16px; + margin-bottom: 10px; + display: block; + } + + input { + width: 100%; + padding: 10px; + margin-bottom: 20px; + background-color: #2c2f3e; + border: none; + border-radius: 10px; + color: #ffffff; + + &:read-only { + background-color: #2c2f3e; + color: #777; + } + } +`; + +const InputGroupLong = styled.div` + width: 100%; + + label { + font-size: 16px; + margin-bottom: 10px; + display: block; + } + + input { + width: 100%; + padding: 10px; + margin-bottom: 20px; + background-color: #2c2f3e; + border: none; + border-radius: 10px; + color: #ffffff; + + &:read-only { + background-color: #2c2f3e; + color: #777; + } + } +`; + +const EditButton = styled.button` + background-color: #3b82f6; + color: white; + padding: 12px 20px; + border: none; + border-radius: 10px; + cursor: pointer; + width: 100%; +`; + +const WarningMessage = styled.p` + font-size: 14px; + color: #ff6b6b; + margin-bottom: 20px; +`; export default function MyPage() { const [userInfo, setUserInfo] = useState({ @@ -13,17 +162,17 @@ export default function MyPage() { }); const [imagePreview, setImagePreview] = useState(null); - + // Fetch user data after login useEffect(() => { const fetchUserData = async () => { try { const response = await axios.get('/user'); setUserInfo({ - name: response.data.name, + name: response.data.name, studentNumber: response.data.studentNumber, profilePic: response.data.profilePic || '../assets/icons/menu/Executive.png', - }); + }); setImagePreview(response.data.profilePic || '../assets/icons/menu/Executive.png'); } catch (error) { console.error('Failed to fetch user data:', error); @@ -53,7 +202,6 @@ export default function MyPage() { const handleDeleteImage = () => { setImagePreview('../assets/menu/Executive.png'); // Reset to default - // Call the API to delete the image axios.post('/delete-profile-pic-endpoint') .then(response => { console.log('Image deleted successfully'); @@ -64,96 +212,102 @@ export default function MyPage() { }; return ( -
- {/* Account Info Section */} -
-

계정 정보 Account Info

- -
- Profile -
- - - -
-
- -
-
-
- + + + {/* Account Info Section */} +
+ + 계정 정보 Account Info + + + + -
+ + + + + + + + + + -
- - -
-
-
-
- - {/* Change Password Section */} -
-

비밀번호 변경 Change Password

-
-
- - -
-
-
- - -
- -
- - -
-
- -
-
- - {/* Delete Account Section */} -
-

계정 탈퇴 Delete Account

-

- KERT 계정을 삭제합니다. 삭제된 계정은 복구가 불가능하며 동일 이메일로 계정을 새로 생성해야 합니다. -

-
-
-
- - -
-
- - -
-
- -
-
-
+ + + + + + + + + {/* Change Password Section */} +
+ + 비밀번호 변경 Change Password + +
+ + + + + + + + + + + + + + + + 저장 +
+
+ + {/* Delete Account Section */} +
+ + 계정 탈퇴 Delete Account + + + KERT 계정을 삭제합니다. 삭제된 계정은 복구가 불가능하며 동일 이메일로 계정을 새로 생성해야 합니다. + +
+ + + + + + + + + + + 계정 삭제 +
+
+ + ); -} \ No newline at end of file +} diff --git a/src/styles/MyPage.css b/src/styles/MyPage.css deleted file mode 100644 index 0ae31a3..0000000 --- a/src/styles/MyPage.css +++ /dev/null @@ -1,144 +0,0 @@ -body { - font-family: 'Noto Sans KR', sans-serif; - background-color: #0d0e14; - color: #ffffff; - margin: 0; - padding-top: 60px; -} - -.mypage-container { - width: 100%; - max-width: 1200px; - margin: 0 auto; - padding: 50px; -} - -.section { - background-color: #1b1e27; - padding: 30px; - border-radius: 20px; - margin-bottom: 30px; - box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.3); -} - -.section-title { - font-size: 24px; - margin-bottom: 20px; -} - -.section-title-en { - font-size: 14px; - color: #aaa; - margin-left: 10px; -} - -.profile-pic-container { - display: flex; - align-items: center; - margin-bottom: 20px; -} - -.profile-pic { - width: 80px; - height: 80px; - border-radius: 50%; - margin-right: 15px; -} - -.pic-buttons { - display: flex; - gap: 10px; -} - -.change-pic-btn, -.delete-pic-btn { - padding: 10px 20px; - border: none; - border-radius: 8px; - cursor: pointer; -} - -.change-pic-btn { - background-color: #3b82f6; - color: white; -} - -.delete-pic-btn { - background-color: #ff4d4d; - color: white; -} - -.form { - margin-top: 20px; - margin-right: 20px; -} - -.input-row { - display: flex; - justify-content: space-between; - gap: 20px; -} - -.input-group { - width: 48%; -} - -.input-group:last-child { - margin-right: 0; -} - -.input-group-long { - width: 100%; - -} - -.input-group-long:last-child { - margin-right: 0; -} - -input { - width: 100%; - padding: 10px; - margin-bottom: 20px; - background-color: #2c2f3e; - border: none; - border-radius: 10px; - color: #ffffff; -} - -input:read-only { - background-color: #2c2f3e; - color: #777; -} - -.form label { - font-size: 16px; - margin-bottom: 10px; - display: block; -} - -.form input { - width: 100%; - padding: 10px; - background-color: #2c2f3e; - border: none; - border-radius: 10px; - color: #ffffff; -} - -.edit-btn, -.delete-btn { - background-color: #3b82f6; - color: white; - padding: 12px 20px; - border: none; - border-radius: 10px; - cursor: pointer; - width: 100%; -} - -.warning-message { - font-size: 14px; - color: #ff6b6b; - margin-bottom: 20px; -} \ No newline at end of file From c532f9e038307ea719fa57e111acbd88b52a90ad Mon Sep 17 00:00:00 2001 From: Giwon Date: Wed, 11 Sep 2024 20:06:50 +0900 Subject: [PATCH 30/97] =?UTF-8?q?feat:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80/=EC=A0=9C=EA=B1=B0/=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/display/AdminCard.jsx | 179 ++++++++++++++ src/components/display/AdminDetailed.jsx | 222 ++++++++++++++++++ src/components/display/ColorProfile.jsx | 36 +++ src/components/display/ExecutiveList.jsx | 0 .../display/ExecutiveList.styled.js | 0 src/components/display/HistoryList.jsx | 5 +- src/components/display/HoverToReveal.jsx | 57 +++++ src/components/forms/HintedInput.jsx | 60 +++++ src/pages/dashboard/Admin.jsx | 178 +++++++++++++- src/pages/dashboard/Admin.styled.js | 42 ++++ src/pages/dashboard/Executive.jsx | 46 +++- src/pages/dashboard/Executive.styled.js | 36 +++ src/pages/dashboard/History.jsx | 6 +- src/stores/dashboard/useAdmin.js | 16 ++ src/stores/useAlert.js | 16 +- src/stores/useConfirm.js | 18 +- src/utils/formatDate.js | 11 + src/utils/generateColor.js | 19 ++ 18 files changed, 931 insertions(+), 16 deletions(-) create mode 100644 src/components/display/AdminCard.jsx create mode 100644 src/components/display/AdminDetailed.jsx create mode 100644 src/components/display/ColorProfile.jsx create mode 100644 src/components/display/ExecutiveList.jsx create mode 100644 src/components/display/ExecutiveList.styled.js create mode 100644 src/components/display/HoverToReveal.jsx create mode 100644 src/components/forms/HintedInput.jsx create mode 100644 src/pages/dashboard/Admin.styled.js create mode 100644 src/pages/dashboard/Executive.styled.js create mode 100644 src/stores/dashboard/useAdmin.js create mode 100644 src/utils/formatDate.js create mode 100644 src/utils/generateColor.js diff --git a/src/components/display/AdminCard.jsx b/src/components/display/AdminCard.jsx new file mode 100644 index 0000000..22d69e8 --- /dev/null +++ b/src/components/display/AdminCard.jsx @@ -0,0 +1,179 @@ +import { useRef } from 'react'; +import styled from 'styled-components'; + +import { Text } from '../typograph/Text'; + +import { GenerateColorByString } from '../../utils/generateColor'; +import { ColorProfile } from './ColorProfile'; +import { AdminDetailed } from './AdminDetailed'; + +import useAlert from '../../stores/useAlert'; +import useConfirm from '../../stores/useConfirm'; +import useLoading from '../../stores/useLoading'; +import { API } from '../../utils/api'; + +const CardWrapper = styled.div` + transition: background-color 0.1s ease-in-out; + + min-width: 400px; + max-width: 460px; + padding: 20px; + box-sizing: border-box; + + display: flex; + align-items: center; + gap: 12px; + + flex-grow: 1; + flex-basis: 0; + + border-radius: 10px; + + cursor: pointer; + + &:hover { + background-color: var(--transparent-button-background); + } +`; + +const Info = styled.div` + display: flex; + flex-direction: column; + gap: 7px; +`; + +const AdminCardLoading = styled(CardWrapper)` + min-height: 88px; + + cursor: default; + + background: linear-gradient( + 45deg, + var(--container-primary-background) 35%, + var(--container-secondary-background) 50%, + var(--container-primary-background) 65% + ); + background-size: 400% 400%; + animation: skeletonAnimation 1.5s infinite ease-in-out; + + @keyframes skeletonAnimation { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } + } +`; + +export const AdminCard = ({ admin, loading }) => { + const { openAlert, closeAlert } = useAlert(); + const { openConfirm, closeConfirm } = useConfirm(); + const { showLoading, hideLoading } = useLoading(); + + const refs = { + id_ref: useRef(), + generation_ref: useRef(), + role_ref: useRef(), + description_ref: useRef(), + }; + + const profile_color = GenerateColorByString( + admin?.student_id, + admin?.generation, + admin?.role, + admin?.description, + ); + + const onClick = () => { + openConfirm({ + title: '상세 관리자 정보', + content: , + onConfirm: () => onConfirm(), + onCancel: () => closeConfirm(), + confirm_label: '수정', + cancel_label: '닫기', + }); + }; + + const onConfirm = () => { + const updateAdmin = { + ...admin, + student_id: parseInt(refs.id_ref.current.value), + generation: refs.generation_ref.current.value, + role: refs.role_ref.current.value, + description: refs.description_ref.current.value, + }; + + // 무언가를 입력하지 않았을 때 + if ( + !refs.id_ref.current.value || + !refs.generation_ref.current.value || + !refs.role_ref.current.value || + !refs.description_ref.current.value + ) { + openAlert({ + title: '경고', + content: 모든 입력란을 채워주세요., + onClose: () => closeAlert(), + }); + return; + } + + // 동아리 가입연월이 이상하게 적혔다면 중단 + const GenerationRegex = /\d\d\d\d\.[1-9]+/i; // 2024.1와 같은 패턴인지 확인하는 정규식 + if (!GenerationRegex.test(updateAdmin.generation)) { + openAlert({ + title: '경고', + content: 동아리 가입연월을 올바르게 적어주세요., + onClose: () => closeAlert(), + }); + return; + } + + // 수정한 내용이 없으면 서버 요청 안함 + if (JSON.stringify(updateAdmin) == JSON.stringify(admin)) { + openAlert({ + title: '관리자 정보 수정', + content: 변경된 정보가 없습니다., + onClose: () => closeAlert(), + }); + } + // 수정된게 있으면 서버 요청 + else { + showLoading({ message: '관리자 정보 수정중...' }); + API.PUT(`/admin/${admin.student_id}`, updateAdmin).then(() => { + hideLoading(); + closeConfirm(); + openAlert({ + title: '관리자 정보 수정', + content: 정보가 수정되었습니다., + onClose: () => { + window.location.reload(); + }, + }); + }); + } + }; + + return loading ? ( + <> + + + ) : ( + + + + + {admin.role} + + + {admin.student_id} · {admin.description} + + + + ); +}; diff --git a/src/components/display/AdminDetailed.jsx b/src/components/display/AdminDetailed.jsx new file mode 100644 index 0000000..199d1ca --- /dev/null +++ b/src/components/display/AdminDetailed.jsx @@ -0,0 +1,222 @@ +import { useRef, useState } from 'react'; +import styled from 'styled-components'; + +import { Span, Text } from '../typograph/Text'; +import { Button } from '../forms/Button'; + +import { ColorProfile } from './ColorProfile'; + +import { GenerateColorByString } from '../../utils/generateColor'; +import { formatDate } from '../../utils/formatDate'; +import { HintedInput } from '../forms/HintedInput'; + +import { HoverToReveal } from './HoverToReveal'; +import { Input } from '../forms/Input'; + +import useConfirm from '../../stores/useConfirm'; +import useAlert from '../../stores/useAlert'; +import useLoading from '../../stores/useLoading'; +import { API } from '../../utils/api'; + +const AdminDetailedWrapper = styled.div` + margin: 40px 0; + display: flex; + flex-direction: column; + gap: 40px; + + & > button { + position: absolute; + margin: 5px; + left: 30px; + bottom: 30px; + } +`; + +const Profile = styled.div` + display: flex; + align-items: center; + gap: 20px; + padding: 10px; +`; + +const Name = styled(Span).attrs({ + $size: 'l', + $weight: 'extrabold', +})` + margin-bottom: 8px; +`; + +const CreatedAt_UpdatedAt = ({ raw_created_at, raw_updated_at }) => { + return ( + + 등록 {formatDate(raw_created_at)}ㆍ수정{' '} + {formatDate(raw_updated_at)} + + ); +}; + +const DeleteAdmin = ({ admin, id_confirm_ref }) => { + const profile_color = GenerateColorByString( + admin.student_id, + admin.generation, + admin.role, + admin.description, + ); + + return ( + <> + + +
+ {admin.role} + +
+
+
+ + 위 관리자를 삭제하려면 학번을 입력하세요. + + + {admin.student_id} + +
+ + + ); +}; + +export const AdminDetailed = ({ admin, refs }) => { + const { openConfirm, closeConfirm } = useConfirm(); + const { openAlert, closeAlert } = useAlert(); + const { showLoading, hideLoading } = useLoading(); + + const [studentID, setStudentID] = useState(admin.student_id); + const [generation, setGeneration] = useState(admin.generation); + const [role, setRole] = useState(admin.role); + const [description, setDescription] = useState(admin.description); + + const { id_ref, generation_ref, role_ref, description_ref } = refs; + + const id_confirm_ref = useRef(); + + const profile_color = GenerateColorByString( + studentID, + generation, + role, + description, + ); + + const onClick = () => { + openConfirm({ + title: '관리자 삭제', + content: , + onConfirm: () => { + deleteAdmin(); + }, + onCancel: () => closeConfirm(), + confirm_label: '삭제', + confirm_color: 'var(--danger-color)', + cancel_label: '취소', + }); + }; + + const deleteAdmin = () => { + if (id_confirm_ref.current.value != admin.student_id.toString()) { + openAlert({ + title: '학번 불일치', + content: 삭제하려는 관리자의 학번을 일치하게 적어주세요., + onClose: () => closeAlert(), + }); + } else { + closeConfirm(); + showLoading({}); + API.DELETE(`/admin/${admin.student_id}`).then(() => { + hideLoading(); + openAlert({ + title: '관리자 삭제 완료', + content: ( + 관리자 목록에서 {admin.student_id}를 삭제했어요. + ), + onClose: () => window.location.reload(), + }); + }); + } + }; + + return ( + + + +
+ {role} + +
+
+
+
+ { + setStudentID(e.target.value); + }} + /> + { + setGeneration(e.target.value); + }} + /> +
+ { + setRole(e.target.value); + }} + /> + { + setDescription(e.target.value); + }} + /> +
+ +
+ ); +}; diff --git a/src/components/display/ColorProfile.jsx b/src/components/display/ColorProfile.jsx new file mode 100644 index 0000000..d838bb4 --- /dev/null +++ b/src/components/display/ColorProfile.jsx @@ -0,0 +1,36 @@ +import styled from 'styled-components'; + +const ColorProfile_ = styled.div` + transition: background-color 0.2s ease-in-out; + + position: relative; + + width: ${(props) => props.width}; + height: ${(props) => props.height}; + + border-radius: 100%; + + background-color: ${(props) => props.color}; + + overflow: hidden; + + &:before { + position: absolute; + content: ''; + + top: 0; + left: 0; + width: 100%; + height: 100%; + + background: linear-gradient( + 135deg, + rgba(255, 255, 255, 0.7) 0%, + rgba(0, 0, 0, 0) 100% + ); + } +`; + +export const ColorProfile = ({ width = '48px', height = '48px', color }) => { + return ; +}; diff --git a/src/components/display/ExecutiveList.jsx b/src/components/display/ExecutiveList.jsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/display/ExecutiveList.styled.js b/src/components/display/ExecutiveList.styled.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/display/HistoryList.jsx b/src/components/display/HistoryList.jsx index 85633fa..c96e000 100644 --- a/src/components/display/HistoryList.jsx +++ b/src/components/display/HistoryList.jsx @@ -29,8 +29,7 @@ export const HistoryList = () => { const { history, refined_history, saveHistory } = useHistory(); const { openAlert } = useAlert(); - const { openConfirm, closeConfirm, confirm_label, confirm_color } = - useConfirm(); + const { openConfirm, closeConfirm } = useConfirm(); const { showLoading, hideLoading } = useLoading(); // confirm 모달이 표시될 때 @@ -53,6 +52,7 @@ export const HistoryList = () => { // 유저가 confirm 모달에서 삭제를 눌렀을 때 const onConfirm = (target_delete_history) => { console.log(target_delete_history); + closeConfirm(); showLoading(''); // 서버로 삭제를 요청합니다. @@ -60,7 +60,6 @@ export const HistoryList = () => { .then() .then(() => { hideLoading(); - closeConfirm(); openAlert({ title: '연혁 삭제됨', content: ( diff --git a/src/components/display/HoverToReveal.jsx b/src/components/display/HoverToReveal.jsx new file mode 100644 index 0000000..662ceab --- /dev/null +++ b/src/components/display/HoverToReveal.jsx @@ -0,0 +1,57 @@ +import styled from 'styled-components'; +import { Span } from '../typograph/Text'; + +const HoverToRevealWrapper = styled.div` + position: relative; + + width: ${(props) => props.$width ?? 'fit-content'}; + height: ${(props) => props.$height ?? 'fit-content'}; + padding: 14px 20px; + + border-radius: 12px; + + background-color: var(--transparent-button-background); + + overflow: hidden; + + user-select: none; + cursor: none; + + &:hover > #content { + filter: blur(0px); + } + &:hover > #label { + opacity: 0; + } +`; + +const Label = styled(Span).attrs({ + id: 'label', + $size: '12px', + $weight: 'bold', + $color: '--secondary-text-color', +})` + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + + transition: opacity 0.2s ease-in-out; + opacity: 1; + + white-space: nowrap; +`; + +const Content = styled.div.attrs({ id: 'content' })` + transition: filter 0.3s ease-in-out; + filter: blur(10px); +`; + +export const HoverToReveal = ({ children }) => { + return ( + + + {children} + + ); +}; diff --git a/src/components/forms/HintedInput.jsx b/src/components/forms/HintedInput.jsx new file mode 100644 index 0000000..4b90b07 --- /dev/null +++ b/src/components/forms/HintedInput.jsx @@ -0,0 +1,60 @@ +import { forwardRef } from 'react'; +import styled from 'styled-components'; + +import { Span } from '../typograph/Text'; + +const HintedInputWrapper = styled.div` + transition: background-color 0.2s ease-in-out; + + position: relative; + box-sizing: border-box; + + padding: 12px 14px; + border-radius: 10px; + + /* 자식이 focus되면 */ + &:focus-within { + background-color: var(--transparent-button-background); /* 변경될 배경색 */ + } +`; + +const Label = styled(Span).attrs({ + $size: 'm', + $weight: 'bold', +})` + margin-bottom: 6px; +`; + +const Input = styled.input` + font-family: 'NanumSquareNeo', sans-serif; + + width: 100%; + + position: relative; + margin: 0; + padding: 0; + + outline: none; + border: none; + + font-size: 16px; + + color: var(--secondary-text-color); + background-color: transparent; +`; + +export const HintedInput = forwardRef( + ({ label, defaultValue, ...props }, ref) => { + return ( + + + + + ); + }, +); diff --git a/src/pages/dashboard/Admin.jsx b/src/pages/dashboard/Admin.jsx index 1dce589..45d4b68 100644 --- a/src/pages/dashboard/Admin.jsx +++ b/src/pages/dashboard/Admin.jsx @@ -1,15 +1,183 @@ -// Admin.jsx -// 코드 작성자 : GiHhub @whitedev77773 +import { useEffect, useRef, useState } from 'react'; -// 외부 라이브러리에서 import +import { Text } from '../../components/typograph/Text.jsx'; +import { Button } from '../../components/forms/Button.jsx'; +import { Input } from '../../components/forms/Input.jsx'; +import { RefreshIcon } from '../../assets/icons'; -// 사용자가 생성한 컴포넌트 및 JS파일 import -import { Header } from './Dashboard.styled'; +import { Header } from './Dashboard.styled.js'; +import { + AdminListContainer, + AdminHeader, + AdminList, + ControlBox, +} from './Admin.styled.js'; +import { AdminCard } from '../../components/display/AdminCard.jsx'; + +import { API } from '../../utils/api.js'; +import useAdmin from '../../stores/dashboard/useAdmin.js'; +import useAlert from '../../stores/useAlert.js'; +import useConfirm from '../../stores/useConfirm.js'; +import useLoading from '../../stores/useLoading.js'; export default function Admin() { + const [loading, setLoading] = useState(true); // 스켈레톤 컨테이너 로딩용 + const { admins, saveAdmins } = useAdmin(); + + const { showLoading, hideLoading } = useLoading(); + const { openConfirm, closeConfirm } = useConfirm(); + const { openAlert, closeAlert } = useAlert(); + + const IdRef = useRef(); + const GenerationRef = useRef(); + const RoleRef = useRef(); + const DescriptionRef = useRef(); + + // API로부터 데이터를 가져와 Zustand 상태를 업데이트합니다. + useEffect(() => { + // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 + if (admins.length === 0) { + API.GET('/admin') + .then((res) => { + saveAdmins(res); // API 서버에서 가져온 데이터를 상태에 반영 + setLoading(false); + }) + .catch((error) => { + setLoading(false); + console.error('Error fetching data:', error); + }); + } else { + setLoading(false); + console.info('이미 API 데이터가 있으므로 API 응답을 요청하지 않습니다.'); + } + }, []); + + const onClickAddAdmin = () => { + openConfirm({ + title: '관리자 추가', + content: ( +
+ +
+ + +
+ +
+ ), + onConfirm: () => addAdmin(), + onCancel: () => closeConfirm(), + confirm_label: '추가', + confirm_color: 'var(--primary-color)', + cancel_label: '취소', + }); + }; + + const addAdmin = () => { + // 무언가를 입력하지 않았을 때 + if ( + !IdRef.current.value || + !GenerationRef.current.value || + !RoleRef.current.value || + !DescriptionRef.current.value + ) { + openAlert({ + title: '경고', + content: 모든 입력란을 채워주세요., + onClose: () => closeAlert(), + }); + return; + } + + // 학번이 10자리가 아니라면 & 숫자가 아니라면 + const IdRegex = /\d\d\d\d\d\d\d\d\d\d/i; + if (!IdRegex.test(IdRef.current.value)) { + openAlert({ + title: '경고', + content: 학번을 올바르게 적어주세요., + onClose: () => closeAlert(), + }); + return; + } + + // 동아리 가입연월이 이상하게 적혔다면 중단 + const GenerationRegex = /\d\d\d\d\.[1-9]+/i; // 2024.1와 같은 패턴인지 확인하는 정규식 + if (!GenerationRegex.test(GenerationRef.current.value)) { + openAlert({ + title: '경고', + content: 동아리 가입연월을 올바르게 적어주세요., + onClose: () => closeAlert(), + }); + return; + } + + // 로딩 ON + closeConfirm(); + showLoading({ message: '새로운 관리자를 추가하고 있어요...' }); + + // 위 if에 걸리지 않으면 서버 POST 요청 + API.POST('/admin', { + student_id: parseInt(IdRef.current.value), + generation: GenerationRef.current.value, + role: RoleRef.current.value, + description: DescriptionRef.current.value, + }).then((res) => { + hideLoading(); + openAlert({ + title: '관리자 추가 성공', + content: 페이지를 다시 불러올게요., + ok_label: '닫기', + onClose: () => { + window.location.reload(); + }, + }); + }); + }; + return ( <>
관리자 추가/제거
+ + {/* 관리자 추가 메뉴 */} + +
+ + 관리자 계정 목록 + + + 표시된 계정을 눌러서 정보를 수정하거나 삭제합니다. + +
+ + window.location.reload()} /> + + +
+ {/* 관리자 리스트 */} + + {loading ? ( + <> + + + + + + + ) : ( + admins.map((admin) => ( + + )) + )} + +
); } diff --git a/src/pages/dashboard/Admin.styled.js b/src/pages/dashboard/Admin.styled.js new file mode 100644 index 0000000..d3cc156 --- /dev/null +++ b/src/pages/dashboard/Admin.styled.js @@ -0,0 +1,42 @@ +import styled from 'styled-components'; +import { Container } from '../../components/forms/Container'; + +export const AdminListContainer = styled(Container)` + display: flex; + flex-direction: column; + gap: 40px; + + width: 100%; + max-width: 1000px; + padding: 30px; + margin: 0; +`; + +export const AdminHeader = styled.div` + display: flex; + justify-content: space-between; +`; + +export const AdminList = styled.div` + display: flex; + flex-wrap: wrap; + gap: 16px; + flex-shrink: 1; +`; + +export const ControlBox = styled.div` + display: flex; + align-items: center; + gap: 16px; + + & > svg { + transition: fill 0.2s ease-in-out; + + fill: var(--secondary-text-color); + cursor: pointer; + } + + & > svg:hover { + fill: var(--primary-text-color); + } +`; diff --git a/src/pages/dashboard/Executive.jsx b/src/pages/dashboard/Executive.jsx index 8a882a6..7592a37 100644 --- a/src/pages/dashboard/Executive.jsx +++ b/src/pages/dashboard/Executive.jsx @@ -1,15 +1,55 @@ -// Executive.jsx -// 코드 작성자 : GiHhub @whitedev77773 - // 외부 라이브러리에서 import // 사용자가 생성한 컴포넌트 및 JS파일 import import { Header } from './Dashboard.styled'; +import { ManageExecutive } from './Executive.styled'; +import { Text } from '../../components/typograph/Text'; +import { Menu } from './Executive.styled'; + +// svg 아이콘 +import { AddIcon } from '../../assets/icons'; +import { RefreshIcon } from '../../assets/icons'; +import { useEffect } from 'react'; +import useAlert from '../../stores/useAlert'; export default function Executive() { + const { openAlert, closeAlert } = useAlert(); + + useEffect(() => { + openAlert({ + title: '개발중', + content: 임원진 관리는 준비중입니다., + onClose: () => closeAlert(), + }); + }, []); + return ( <>
임원진 추가/제거
+ + + 메인 페이지에 표시되는 임원진 + + + window.location.reload()} /> + {}} fill="#ffffff" /> + + + + 준비중 + + + + 별도 페이지에 표시되는 역대 임원진 + + + window.location.reload()} /> + {}} fill="#ffffff" /> + + + + 준비중 + ); } diff --git a/src/pages/dashboard/Executive.styled.js b/src/pages/dashboard/Executive.styled.js new file mode 100644 index 0000000..d980a49 --- /dev/null +++ b/src/pages/dashboard/Executive.styled.js @@ -0,0 +1,36 @@ +// History.styled.js와 동일하게 스타일링합니다. + +import styled from 'styled-components'; +import { Container } from './Dashboard.styled'; + +export const ManageExecutive = styled(Container)` + width: 100%; + max-width: 1000px; + height: 80px; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + + border: none; + background-color: var(--container-secondary-background); + + & svg { + cursor: pointer; + fill: var(--primary-text-color); + } + + &:not(&:first-child) { + margin-top: 20px; + } +`; + +export const Menu = styled.div` + display: flex; + gap: 10px; + + & > * { + cursor: pointer; + } +`; diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index 74765d9..616c763 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -64,7 +64,7 @@ export default function History() { const { openAlert, closeAlert } = useAlert(); const { openConfirm, closeConfirm } = useConfirm(); - const { showLoading, hideLoading, message } = useLoading(); + const { showLoading, hideLoading } = useLoading(); // 추가 버튼을 눌렀을 때 const handleAddClick = () => { @@ -73,6 +73,8 @@ export default function History() { content: , onConfirm: onConfirm, onCancel: closeConfirm, + confirm_label: '추가', + cancel_label: '취소', }); }; @@ -100,6 +102,7 @@ export default function History() { content: newContent, }; + closeConfirm(); showLoading({ message: '연혁 정보를 전송하고 있어요...' }); // 서버 요청 하기전 로딩 표시 // 서버로 추가를 요청합니다. @@ -107,7 +110,6 @@ export default function History() { .then() .then(() => { hideLoading(); - closeConfirm(); openAlert({ title: '연혁 추가 성공', content: ( diff --git a/src/stores/dashboard/useAdmin.js b/src/stores/dashboard/useAdmin.js new file mode 100644 index 0000000..7800c9a --- /dev/null +++ b/src/stores/dashboard/useAdmin.js @@ -0,0 +1,16 @@ +// 대시보드 이동 시 이전에 요청한 API 응답 데이터를 저장합니다. +// 즉, API 재요청을 방지하는 용도입니다. +// 사용자가 최초 메뉴 접속 이후 새로운 데이터를 표시하려면 새로고침 등이 필요합니다. + +import { create } from 'zustand'; + +const useAdmin = create((set) => ({ + admins: [], + + // 외부 컴포넌트에서 API 응답을 받고 저장하는 용도입니다. + saveAdmins: (newList) => { + set({ admins: newList }); + }, +})); + +export default useAdmin; diff --git a/src/stores/useAlert.js b/src/stores/useAlert.js index b8d000c..fd4a01a 100644 --- a/src/stores/useAlert.js +++ b/src/stores/useAlert.js @@ -9,7 +9,7 @@ import { create } from 'zustand'; * @param {string} ok_label 닫는 버튼 라벨 * @param {string} ok_color 닫는 버튼 색 */ -const useAlert = create((set) => ({ +const useAlert = create((set, get) => ({ // 모달의 초기 상태 isOpen: false, onClose: null, // 닫는 버튼을 누를 때 실행할 함수 @@ -26,6 +26,14 @@ const useAlert = create((set) => ({ ok_label = '확인', ok_color = 'var(--primary-color)', }) => { + const { isOpen, closeAlert } = get(); + + if (isOpen) { + closeAlert(); + console.warn( + '이미 열려있는 Alert입니다. 기존 Alert를 닫고 새로운 Alert를 표시합니다.', + ); + } set({ isOpen: true, title: title, @@ -38,6 +46,12 @@ const useAlert = create((set) => ({ // 모달을 닫은 후 내용 초기화하여 메모리 절약 closeAlert: () => { + const { isOpen } = get(); + + if (!isOpen) { + console.warn('이미 닫혀있는 Alert입니다.'); + return; + } set({ isOpen: false, title: '', diff --git a/src/stores/useConfirm.js b/src/stores/useConfirm.js index fd1979d..e5acc34 100644 --- a/src/stores/useConfirm.js +++ b/src/stores/useConfirm.js @@ -12,7 +12,7 @@ import { create } from 'zustand'; * @param {string} confirm_color 확인 버튼 색 * @param {string} cancel_color 취소 버튼 색 */ -const useConfirm = create((set) => ({ +const useConfirm = create((set, get) => ({ isOpen: false, // 모달의 초기 상태 title: '', content: null, @@ -34,7 +34,15 @@ const useConfirm = create((set) => ({ cancel_label = '아니오', cancel_color = 'var(--container-border)', }) => { - console.log('사용자 확인창 열림'); + const { isOpen, closeConfirm } = get(); + + if (isOpen) { + closeConfirm(); + console.warn( + '이미 열려있는 Confirm입니다. 기존 Confirm를 닫고 새로운 Confirm을 표시합니다.', + ); + } + set({ isOpen: true, title: title, @@ -50,6 +58,12 @@ const useConfirm = create((set) => ({ // 모달을 닫은 후 내용 초기화하여 메모리 절약 closeConfirm: () => { + const { isOpen } = get(); + + if (!isOpen) { + console.warn('이미 닫혀있는 Confirm입니다.'); + return; + } set({ isOpen: false, title: '', diff --git a/src/utils/formatDate.js b/src/utils/formatDate.js new file mode 100644 index 0000000..30fbdb7 --- /dev/null +++ b/src/utils/formatDate.js @@ -0,0 +1,11 @@ +export function formatDate(dateString) { + const date = new Date(dateString); + + // 연도, 월, 일 추출 + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); // 월은 0부터 시작하므로 1을 더함 + const day = String(date.getDate()).padStart(2, '0'); // 일은 1부터 시작하므로 그대로 사용 + + // YYYY.MM.DD 형식으로 반환 + return `${year}.${month}.${day}`; +} diff --git a/src/utils/generateColor.js b/src/utils/generateColor.js new file mode 100644 index 0000000..78822f1 --- /dev/null +++ b/src/utils/generateColor.js @@ -0,0 +1,19 @@ +export function GenerateColorByString(...str) { + // 두 문자열을 결합 + const combinedString = [str].join(''); + + // 결합된 문자열의 해시값 생성 + let hash = 0; + for (let i = 0; i < combinedString.length; i++) { + hash = combinedString.charCodeAt(i) + ((hash << 5) - hash); + } + + // 해시값을 6자리 HEX 코드로 변환 + let color = '#'; + for (let i = 0; i < 3; i++) { + const value = (hash >> (i * 8)) & 0xff; + color += ('00' + value.toString(16)).slice(-2); + } + + return color; +} From ca7b91f13326dcd4e81298d9e2dc172ee7d68c34 Mon Sep 17 00:00:00 2001 From: Giwon Date: Wed, 11 Sep 2024 20:08:13 +0900 Subject: [PATCH 31/97] =?UTF-8?q?chore:=20=ED=95=99=EB=B2=88=EC=9D=B4=20?= =?UTF-8?q?=EA=B0=99=EC=95=84=EB=8F=84=20key=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=95=88=EB=82=98=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/dashboard/Admin.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/dashboard/Admin.jsx b/src/pages/dashboard/Admin.jsx index 45d4b68..2f42c9d 100644 --- a/src/pages/dashboard/Admin.jsx +++ b/src/pages/dashboard/Admin.jsx @@ -173,7 +173,10 @@ export default function Admin() { ) : ( admins.map((admin) => ( - + )) )} From f31b4bd050522bcaf8881fa735335fde367a522f Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 12 Sep 2024 09:11:15 +0900 Subject: [PATCH 32/97] =?UTF-8?q?chore:=20ERD=EC=97=90=20=EB=A7=9E?= =?UTF-8?q?=EC=B6=94=EC=96=B4=20=EB=9D=BC=EB=B2=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/display/AdminDetailed.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/display/AdminDetailed.jsx b/src/components/display/AdminDetailed.jsx index 199d1ca..27c63a9 100644 --- a/src/components/display/AdminDetailed.jsx +++ b/src/components/display/AdminDetailed.jsx @@ -49,7 +49,7 @@ const Name = styled(Span).attrs({ const CreatedAt_UpdatedAt = ({ raw_created_at, raw_updated_at }) => { return ( - 등록 {formatDate(raw_created_at)}ㆍ수정{' '} + 가입 {formatDate(raw_created_at)}ㆍ계정 수정{' '} {formatDate(raw_updated_at)} ); @@ -185,7 +185,7 @@ export const AdminDetailed = ({ admin, refs }) => { /> { setGeneration(e.target.value); From 5ec645b3030064ef86088bdb2f8c0c52c5f9500b Mon Sep 17 00:00:00 2001 From: Giwon Date: Fri, 13 Sep 2024 14:25:41 +0900 Subject: [PATCH 33/97] =?UTF-8?q?reset:=20DB=ED=98=95=EC=8B=9D=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EC=B6=94=EC=96=B4=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=A0=84=EC=B2=B4=20=EC=9E=AC?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/display/AdminCard.jsx | 99 +------- src/components/display/AdminDetailed.jsx | 222 ------------------ src/components/display/ExecutiveList.jsx | 0 .../display/ExecutiveList.styled.js | 0 src/components/display/HistoryList.jsx | 135 ----------- src/components/display/HistoryList.styled.js | 90 ------- src/components/forms/Button.jsx | 6 - src/components/forms/Checkbox.jsx | 6 - src/components/forms/Toggle.jsx | 6 - .../{display => forms}/modal/Alert.jsx | 2 +- .../{display => forms}/modal/Confirm.jsx | 0 .../{display => forms}/modal/Loading.jsx | 0 src/components/layouts/DashboardLayout.jsx | 11 +- src/components/typograph/Text.jsx | 7 +- src/pages/dashboard/Admin.jsx | 20 +- src/pages/dashboard/Admin.styled.js | 2 + src/pages/dashboard/Dashboard.styled.js | 90 +------ src/pages/dashboard/Executive.jsx | 31 +-- src/pages/dashboard/Executive.styled.js | 6 +- src/pages/dashboard/History.jsx | 135 +---------- src/pages/dashboard/History.styled.js | 4 +- src/pages/dashboard/Home.Loading.jsx | 12 +- src/pages/dashboard/Home.jsx | 21 +- src/pages/dashboard/Home.styled.js | 50 ++++ src/pages/dashboard/Users.jsx | 7 +- 25 files changed, 106 insertions(+), 856 deletions(-) delete mode 100644 src/components/display/AdminDetailed.jsx delete mode 100644 src/components/display/ExecutiveList.jsx delete mode 100644 src/components/display/ExecutiveList.styled.js delete mode 100644 src/components/display/HistoryList.jsx delete mode 100644 src/components/display/HistoryList.styled.js rename src/components/{display => forms}/modal/Alert.jsx (96%) rename src/components/{display => forms}/modal/Confirm.jsx (100%) rename src/components/{display => forms}/modal/Loading.jsx (100%) create mode 100644 src/pages/dashboard/Home.styled.js diff --git a/src/components/display/AdminCard.jsx b/src/components/display/AdminCard.jsx index 22d69e8..58b61cc 100644 --- a/src/components/display/AdminCard.jsx +++ b/src/components/display/AdminCard.jsx @@ -5,7 +5,6 @@ import { Text } from '../typograph/Text'; import { GenerateColorByString } from '../../utils/generateColor'; import { ColorProfile } from './ColorProfile'; -import { AdminDetailed } from './AdminDetailed'; import useAlert from '../../stores/useAlert'; import useConfirm from '../../stores/useConfirm'; @@ -42,7 +41,7 @@ const Info = styled.div` gap: 7px; `; -const AdminCardLoading = styled(CardWrapper)` +export const AdminCardLoading = styled(CardWrapper)` min-height: 88px; cursor: default; @@ -69,18 +68,7 @@ const AdminCardLoading = styled(CardWrapper)` } `; -export const AdminCard = ({ admin, loading }) => { - const { openAlert, closeAlert } = useAlert(); - const { openConfirm, closeConfirm } = useConfirm(); - const { showLoading, hideLoading } = useLoading(); - - const refs = { - id_ref: useRef(), - generation_ref: useRef(), - role_ref: useRef(), - description_ref: useRef(), - }; - +export const AdminCard = ({ admin }) => { const profile_color = GenerateColorByString( admin?.student_id, admin?.generation, @@ -88,90 +76,15 @@ export const AdminCard = ({ admin, loading }) => { admin?.description, ); - const onClick = () => { - openConfirm({ - title: '상세 관리자 정보', - content: , - onConfirm: () => onConfirm(), - onCancel: () => closeConfirm(), - confirm_label: '수정', - cancel_label: '닫기', - }); - }; - - const onConfirm = () => { - const updateAdmin = { - ...admin, - student_id: parseInt(refs.id_ref.current.value), - generation: refs.generation_ref.current.value, - role: refs.role_ref.current.value, - description: refs.description_ref.current.value, - }; - - // 무언가를 입력하지 않았을 때 - if ( - !refs.id_ref.current.value || - !refs.generation_ref.current.value || - !refs.role_ref.current.value || - !refs.description_ref.current.value - ) { - openAlert({ - title: '경고', - content: 모든 입력란을 채워주세요., - onClose: () => closeAlert(), - }); - return; - } - - // 동아리 가입연월이 이상하게 적혔다면 중단 - const GenerationRegex = /\d\d\d\d\.[1-9]+/i; // 2024.1와 같은 패턴인지 확인하는 정규식 - if (!GenerationRegex.test(updateAdmin.generation)) { - openAlert({ - title: '경고', - content: 동아리 가입연월을 올바르게 적어주세요., - onClose: () => closeAlert(), - }); - return; - } - - // 수정한 내용이 없으면 서버 요청 안함 - if (JSON.stringify(updateAdmin) == JSON.stringify(admin)) { - openAlert({ - title: '관리자 정보 수정', - content: 변경된 정보가 없습니다., - onClose: () => closeAlert(), - }); - } - // 수정된게 있으면 서버 요청 - else { - showLoading({ message: '관리자 정보 수정중...' }); - API.PUT(`/admin/${admin.student_id}`, updateAdmin).then(() => { - hideLoading(); - closeConfirm(); - openAlert({ - title: '관리자 정보 수정', - content: 정보가 수정되었습니다., - onClose: () => { - window.location.reload(); - }, - }); - }); - } - }; - - return loading ? ( - <> - - - ) : ( - + return ( + {}}> - {admin.role} + {admin?.role} - {admin.student_id} · {admin.description} + {admin?.student_id} · {admin?.description} diff --git a/src/components/display/AdminDetailed.jsx b/src/components/display/AdminDetailed.jsx deleted file mode 100644 index 27c63a9..0000000 --- a/src/components/display/AdminDetailed.jsx +++ /dev/null @@ -1,222 +0,0 @@ -import { useRef, useState } from 'react'; -import styled from 'styled-components'; - -import { Span, Text } from '../typograph/Text'; -import { Button } from '../forms/Button'; - -import { ColorProfile } from './ColorProfile'; - -import { GenerateColorByString } from '../../utils/generateColor'; -import { formatDate } from '../../utils/formatDate'; -import { HintedInput } from '../forms/HintedInput'; - -import { HoverToReveal } from './HoverToReveal'; -import { Input } from '../forms/Input'; - -import useConfirm from '../../stores/useConfirm'; -import useAlert from '../../stores/useAlert'; -import useLoading from '../../stores/useLoading'; -import { API } from '../../utils/api'; - -const AdminDetailedWrapper = styled.div` - margin: 40px 0; - display: flex; - flex-direction: column; - gap: 40px; - - & > button { - position: absolute; - margin: 5px; - left: 30px; - bottom: 30px; - } -`; - -const Profile = styled.div` - display: flex; - align-items: center; - gap: 20px; - padding: 10px; -`; - -const Name = styled(Span).attrs({ - $size: 'l', - $weight: 'extrabold', -})` - margin-bottom: 8px; -`; - -const CreatedAt_UpdatedAt = ({ raw_created_at, raw_updated_at }) => { - return ( - - 가입 {formatDate(raw_created_at)}ㆍ계정 수정{' '} - {formatDate(raw_updated_at)} - - ); -}; - -const DeleteAdmin = ({ admin, id_confirm_ref }) => { - const profile_color = GenerateColorByString( - admin.student_id, - admin.generation, - admin.role, - admin.description, - ); - - return ( - <> - - -
- {admin.role} - -
-
-
- - 위 관리자를 삭제하려면 학번을 입력하세요. - - - {admin.student_id} - -
- - - ); -}; - -export const AdminDetailed = ({ admin, refs }) => { - const { openConfirm, closeConfirm } = useConfirm(); - const { openAlert, closeAlert } = useAlert(); - const { showLoading, hideLoading } = useLoading(); - - const [studentID, setStudentID] = useState(admin.student_id); - const [generation, setGeneration] = useState(admin.generation); - const [role, setRole] = useState(admin.role); - const [description, setDescription] = useState(admin.description); - - const { id_ref, generation_ref, role_ref, description_ref } = refs; - - const id_confirm_ref = useRef(); - - const profile_color = GenerateColorByString( - studentID, - generation, - role, - description, - ); - - const onClick = () => { - openConfirm({ - title: '관리자 삭제', - content: , - onConfirm: () => { - deleteAdmin(); - }, - onCancel: () => closeConfirm(), - confirm_label: '삭제', - confirm_color: 'var(--danger-color)', - cancel_label: '취소', - }); - }; - - const deleteAdmin = () => { - if (id_confirm_ref.current.value != admin.student_id.toString()) { - openAlert({ - title: '학번 불일치', - content: 삭제하려는 관리자의 학번을 일치하게 적어주세요., - onClose: () => closeAlert(), - }); - } else { - closeConfirm(); - showLoading({}); - API.DELETE(`/admin/${admin.student_id}`).then(() => { - hideLoading(); - openAlert({ - title: '관리자 삭제 완료', - content: ( - 관리자 목록에서 {admin.student_id}를 삭제했어요. - ), - onClose: () => window.location.reload(), - }); - }); - } - }; - - return ( - - - -
- {role} - -
-
-
-
- { - setStudentID(e.target.value); - }} - /> - { - setGeneration(e.target.value); - }} - /> -
- { - setRole(e.target.value); - }} - /> - { - setDescription(e.target.value); - }} - /> -
- -
- ); -}; diff --git a/src/components/display/ExecutiveList.jsx b/src/components/display/ExecutiveList.jsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/display/ExecutiveList.styled.js b/src/components/display/ExecutiveList.styled.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/display/HistoryList.jsx b/src/components/display/HistoryList.jsx deleted file mode 100644 index c96e000..0000000 --- a/src/components/display/HistoryList.jsx +++ /dev/null @@ -1,135 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { Text } from '../typograph/Text'; -import { YearElement, HistoryElement } from './HistoryList.styled'; - -import { API } from '../../utils/api'; -import useHistory from '../../stores/dashboard/useHistory'; -import useAlert from '../../stores/useAlert'; -import useConfirm from '../../stores/useConfirm'; -import useLoading from '../../stores/useLoading'; - -export const DeleteHistory = ({ history }) => { - return ( - <> - 아래 연혁을 삭제할까요? -
- - {history.year}년 {history.month}월 - {history.content} - -
-
- ID : {history.id} - - ); -}; - -export const HistoryList = () => { - const [loading, setLoading] = useState(true); // 컨테이너 스켈레톤 로딩 - const { history, refined_history, saveHistory } = useHistory(); - - const { openAlert } = useAlert(); - const { openConfirm, closeConfirm } = useConfirm(); - const { showLoading, hideLoading } = useLoading(); - - // confirm 모달이 표시될 때 - const handleClick = (history) => { - openConfirm({ - title: '연혁 삭제', - content: , - onConfirm: () => { - onConfirm(history); - }, - onCancel: () => { - onCancel(); - }, - confirm_label: '삭제', - confirm_color: 'var(--danger-color)', - cancel_label: '취소', - }); - }; - - // 유저가 confirm 모달에서 삭제를 눌렀을 때 - const onConfirm = (target_delete_history) => { - console.log(target_delete_history); - closeConfirm(); - showLoading(''); - - // 서버로 삭제를 요청합니다. - API.DELETE(`/histories/${target_delete_history.id}`) - .then() - .then(() => { - hideLoading(); - openAlert({ - title: '연혁 삭제됨', - content: ( - <> - 연혁을 삭제했어요. -
- 페이지를 다시 불러올게요. - - ), - ok_label: '닫기', - onClose: () => { - window.location.reload(); - }, - }); - }); - }; - - // 유저가 닫기 버튼을 눌렀을 때 - const onCancel = () => { - closeConfirm(); - }; - - // API로부터 데이터를 가져와 Zustand 상태를 업데이트합니다. - useEffect(() => { - // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 - if (history.length === 0) { - API.GET('/histories') - .then((res) => { - saveHistory(res); // API 서버에서 가져온 데이터를 상태에 반영 - setLoading(false); - }) - .catch((error) => { - setLoading(false); - console.error('Error fetching data:', error); - }); - } else { - setLoading(false); - console.info('이미 API 데이터가 있으므로 API 응답을 요청하지 않습니다.'); - } - }, []); - - return loading ? ( - <> - - - - - ) : history.length === 0 ? ( - 비어있음 - ) : ( - <> - {Object.keys(refined_history) - .sort((a, b) => b - a) - .map((year) => ( - - - {year}년 - - {refined_history[year].map((hist) => ( - handleClick(hist)}> - - {hist.month}월 - - - {hist.content} - - - ))} - - ))} - - ); -}; diff --git a/src/components/display/HistoryList.styled.js b/src/components/display/HistoryList.styled.js deleted file mode 100644 index 99213d0..0000000 --- a/src/components/display/HistoryList.styled.js +++ /dev/null @@ -1,90 +0,0 @@ -import styled from 'styled-components'; - -import { Container } from '../forms/Container'; - -export const YearElement = styled(Container)` - margin: 0; - margin-top: 20px; - - width: 100%; - max-width: 1000px; - - display: flex; - flex-wrap: wrap; - gap: 6px; - - padding: 30px; - border-radius: 20px; - - @keyframes skeletonAnimation { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } - } - - &.loading { - height: 144px; - - background: linear-gradient( - 45deg, - var(--container-primary-background) 35%, - var(--container-secondary-background) 50%, - var(--container-primary-background) 65% - ); - background-size: 400% 400%; - animation: skeletonAnimation 2s infinite ease-in-out; - } - - & > span { - width: 100%; - // flex-shrink로 flex로 인한 크기 변경을 방지합니다. - flex-shrink: 0; - margin-bottom: 20px; - } -`; - -export const HistoryElement = styled.div` - cursor: pointer; - - transition: opacity 0.1s ease-in-out; - - position: relative; - width: 50%; - // flex-shrink로 flex로 인한 크기 변경을 방지합니다. - flex-shrink: 0; - - display: flex; - flex: 1 1 calc(50% - 10px); /* 2개씩 배치될 때 각 요소의 너비 */ - align-items: center; - gap: 10px; - - & > span:first-child { - margin-left: -4px; - - width: 40px; - padding: 8px 12px; - border-radius: 30px; - - border: 1px solid var(--container-border); - text-align: center; - } - - &:hover > span:first-child { - transition: - background-color 0.1s ease-in-out, - border 0.1s ease-in-out; - border: 1px solid transparent; - background-color: var(--danger-color); - } - - &:hover > span:last-child { - transition: color 0.1s ease-in-out; - color: var(--danger-color); - } -`; diff --git a/src/components/forms/Button.jsx b/src/components/forms/Button.jsx index 64214c1..897bd8b 100644 --- a/src/components/forms/Button.jsx +++ b/src/components/forms/Button.jsx @@ -1,11 +1,5 @@ -// Button.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import styled from 'styled-components'; -// 사용자가 생성한 컴포넌트 및 JS파일 import - /** * Flat / Outline / Translucent * 위 버튼들의 부모로 사용되는 요소입니다. diff --git a/src/components/forms/Checkbox.jsx b/src/components/forms/Checkbox.jsx index 0a6f72e..5a1a022 100644 --- a/src/components/forms/Checkbox.jsx +++ b/src/components/forms/Checkbox.jsx @@ -1,11 +1,5 @@ -// Checkbox.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import styled from 'styled-components'; -// 사용자가 생성한 컴포넌트 및 JS파일 import - /** * @typedef {"xs" | "s" | "m" | "l" | "xl" | string} Size * @typedef {"--primary-color" | "#FFFFFF" | "white" | string} Color diff --git a/src/components/forms/Toggle.jsx b/src/components/forms/Toggle.jsx index 5e00654..95b5a5a 100644 --- a/src/components/forms/Toggle.jsx +++ b/src/components/forms/Toggle.jsx @@ -1,11 +1,5 @@ -// Toggle.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import styled from 'styled-components'; -// 사용자가 생성한 컴포넌트 및 JS파일 import - /** * @typedef {"xs" | "s" | "m" | "l" | "xl" | string } Size * @typedef {"--primary-color" | "#FFFFFF" | "white" | string} Color diff --git a/src/components/display/modal/Alert.jsx b/src/components/forms/modal/Alert.jsx similarity index 96% rename from src/components/display/modal/Alert.jsx rename to src/components/forms/modal/Alert.jsx index fc39009..5a0d341 100644 --- a/src/components/display/modal/Alert.jsx +++ b/src/components/forms/modal/Alert.jsx @@ -3,7 +3,7 @@ import useAlert from '../../../stores/useAlert'; import styled from 'styled-components'; import { ModalLayout } from '../../layouts/ModalLayout'; -import { Button } from '../../forms/Button'; +import { Button } from '../Button'; import { Span } from '../../typograph/Text'; const ModalContainer = styled.div` diff --git a/src/components/display/modal/Confirm.jsx b/src/components/forms/modal/Confirm.jsx similarity index 100% rename from src/components/display/modal/Confirm.jsx rename to src/components/forms/modal/Confirm.jsx diff --git a/src/components/display/modal/Loading.jsx b/src/components/forms/modal/Loading.jsx similarity index 100% rename from src/components/display/modal/Loading.jsx rename to src/components/forms/modal/Loading.jsx diff --git a/src/components/layouts/DashboardLayout.jsx b/src/components/layouts/DashboardLayout.jsx index d7a43ab..d0b9f5b 100644 --- a/src/components/layouts/DashboardLayout.jsx +++ b/src/components/layouts/DashboardLayout.jsx @@ -1,8 +1,3 @@ -// DashboardLayout.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import -import React, { useEffect } from 'react'; import { createRef } from 'react'; import { useOutlet } from 'react-router-dom'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; @@ -10,9 +5,9 @@ import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import import { DashboardNav } from '../navigation/DashboardNav'; -import { Alert } from '../display/modal/Alert'; -import { Confirm } from '../display/modal/Confirm'; -import { Loading } from '../display/modal/Loading'; +import { Alert } from '../forms/modal/Alert'; +import { Confirm } from '../forms/modal/Confirm'; +import { Loading } from '../forms/modal/Loading'; // 전환 애니메이션 import '../../transitions/fade-slide.css'; diff --git a/src/components/typograph/Text.jsx b/src/components/typograph/Text.jsx index 7b1d83c..7b6efb6 100644 --- a/src/components/typograph/Text.jsx +++ b/src/components/typograph/Text.jsx @@ -1,12 +1,6 @@ -// Text.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import React from 'react'; import styled from 'styled-components'; -// 사용자가 생성한 컴포넌트 및 JS파일 import - /** * @typedef {"xs" | "s" | "m" | "l" | "xl" | "sxl" | string} Size * @typedef {"light" | "regular" | "bold" | "extrabold" | "heavy"} Weight @@ -73,6 +67,7 @@ export const Span = styled.span` /** * Text Component * 스타일링된 span을 생성합니다. + * 기본 : m, regular * @param {IText & IChildren} props */ export const Text = ({ diff --git a/src/pages/dashboard/Admin.jsx b/src/pages/dashboard/Admin.jsx index 2f42c9d..05e9e86 100644 --- a/src/pages/dashboard/Admin.jsx +++ b/src/pages/dashboard/Admin.jsx @@ -1,9 +1,9 @@ import { useEffect, useRef, useState } from 'react'; +// 사용자 정의 컴포넌트 import { Text } from '../../components/typograph/Text.jsx'; import { Button } from '../../components/forms/Button.jsx'; import { Input } from '../../components/forms/Input.jsx'; -import { RefreshIcon } from '../../assets/icons'; import { Header } from './Dashboard.styled.js'; import { @@ -12,7 +12,13 @@ import { AdminList, ControlBox, } from './Admin.styled.js'; -import { AdminCard } from '../../components/display/AdminCard.jsx'; +import { + AdminCard, + AdminCardLoading, +} from '../../components/display/AdminCard.jsx'; + +// SVG 아이콘 +import { RefreshIcon } from '../../assets/icons'; import { API } from '../../utils/api.js'; import useAdmin from '../../stores/dashboard/useAdmin.js'; @@ -165,11 +171,11 @@ export default function Admin() { {loading ? ( <> - - - - - + + + + + ) : ( admins.map((admin) => ( diff --git a/src/pages/dashboard/Admin.styled.js b/src/pages/dashboard/Admin.styled.js index d3cc156..782c374 100644 --- a/src/pages/dashboard/Admin.styled.js +++ b/src/pages/dashboard/Admin.styled.js @@ -1,4 +1,6 @@ import styled from 'styled-components'; + +// 사용자 정의 컴포넌트 import { Container } from '../../components/forms/Container'; export const AdminListContainer = styled(Container)` diff --git a/src/pages/dashboard/Dashboard.styled.js b/src/pages/dashboard/Dashboard.styled.js index c0dd946..a103792 100644 --- a/src/pages/dashboard/Dashboard.styled.js +++ b/src/pages/dashboard/Dashboard.styled.js @@ -1,17 +1,11 @@ -// dashboard.styled.js -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import styled from 'styled-components'; -// 사용자가 생성한 컴포넌트 및 JS파일 import -import { Container as Cont } from '../../components/forms/Container'; +// 사용자 정의 컴포넌트 import { Span } from '../../components/typograph/Text'; /** * 대시보드 헤더 * 기존 Span을 상속하여 사용함 - * @type {import("react").ReactHTMLElement} */ export const Header = styled(Span).attrs({ id: 'dashboard-header', @@ -21,85 +15,3 @@ export const Header = styled(Span).attrs({ margin-left: 6px; margin-bottom: 20px; `; - -/** - * 대시보드용 컨테이너 - * 기존 Container를 상속하여 사용함 - * @type {import("react").ReactHTMLElement} - */ -export const Container = styled(Cont).attrs({ - id: 'dashboard-container', -})` - @keyframes show { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - - & > * { - animation: show 0.75s ease-in-out; - } - - width: 360px; - - margin: 0; - padding: 30px; - border-radius: 20px; - box-sizing: border-box; - overflow: hidden; - - display: flex; - flex-direction: column; - gap: 30px; -`; - -/** - * 컨테이너 헤더 - * @type {import("react").ReactHTMLElement} - */ -export const ContainerHeader = styled(Span).attrs({ - id: 'dashboard-container-header', - $size: 'l', - $weight: 'bold', -})``; - -/** - * 대시보드용 반투명 버튼 - * @type {import("react").ReactHTMLElement} - */ -export const Button = styled.button` - transition: background-color 0.2s ease-out; - - position: relative; - cursor: pointer; - overflow: hidden; - - width: ${(props) => props.$width ?? 'fit-content'}; - height: ${(props) => props.$height ?? 'fit-content'}; - padding: 12px 20px; - border-radius: 26px; - - border: none; - outline: none; - color: var(--primary-text-color); - background-color: var(--transparent-button-background); - font-weight: 700; - - box-sizing: border-box; - - &:hover { - background-color: var(--transparent-button-background-focus); - } -`; - -export const BoardColumn = styled.div` - margin-right: 24px; - margin-bottom: 24px; - - display: inline-flex; - flex-direction: column; - gap: 24px; -`; diff --git a/src/pages/dashboard/Executive.jsx b/src/pages/dashboard/Executive.jsx index 7592a37..1327a8e 100644 --- a/src/pages/dashboard/Executive.jsx +++ b/src/pages/dashboard/Executive.jsx @@ -1,14 +1,10 @@ -// 외부 라이브러리에서 import - -// 사용자가 생성한 컴포넌트 및 JS파일 import +// 사용자 정의 컴포넌트 +import { Text } from '../../components/typograph/Text'; import { Header } from './Dashboard.styled'; import { ManageExecutive } from './Executive.styled'; -import { Text } from '../../components/typograph/Text'; import { Menu } from './Executive.styled'; // svg 아이콘 -import { AddIcon } from '../../assets/icons'; -import { RefreshIcon } from '../../assets/icons'; import { useEffect } from 'react'; import useAlert from '../../stores/useAlert'; @@ -27,29 +23,12 @@ export default function Executive() { <>
임원진 추가/제거
- - 메인 페이지에 표시되는 임원진 - - - window.location.reload()} /> - {}} fill="#ffffff" /> - - - - 준비중 - - - - 별도 페이지에 표시되는 역대 임원진 - + 준비중 - window.location.reload()} /> - {}} fill="#ffffff" /> + {/* window.location.reload()} /> + {}} fill="#ffffff" /> */} - - 준비중 - ); } diff --git a/src/pages/dashboard/Executive.styled.js b/src/pages/dashboard/Executive.styled.js index d980a49..baac019 100644 --- a/src/pages/dashboard/Executive.styled.js +++ b/src/pages/dashboard/Executive.styled.js @@ -1,7 +1,7 @@ -// History.styled.js와 동일하게 스타일링합니다. - import styled from 'styled-components'; -import { Container } from './Dashboard.styled'; + +// 사용자 정의 컴포넌트 +import { Container } from '../../components/forms/Container'; export const ManageExecutive = styled(Container)` width: 100%; diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index 616c763..6b95a81 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -1,147 +1,22 @@ -import { forwardRef, useEffect, useRef } from 'react'; - +// 사용자 정의 컴포넌트 import { Text } from '../../components/typograph/Text'; import { Header } from './Dashboard.styled'; import { ManageHistory, Menu } from './History.styled'; -import { AddIcon, RefreshIcon } from '../../assets/icons'; -import { HistoryList } from '../../components/display/HistoryList'; -import { Input } from '../../components/forms/Input'; - -import { API } from '../../utils/api'; -import useAlert from '../../stores/useAlert'; -import useConfirm from '../../stores/useConfirm'; -import useLoading from '../../stores/useLoading'; - -/** - * ↓ API 요청 시 history 형식 ↓ - * { - * "year": "integer", - * "month": "integer", - * "description": "string" - * } - */ - -// 새로운 연혁을 추가하기 위한 폼입니다. -const NewHistoryInputForms = forwardRef((props, ref) => { - const { yearRef, monthRef, contentRef } = ref; - useEffect(() => { - // useEffect 외부에서 .focus()는 ref가 비어있는 채로 실행됩니다. - // 따라서 useEffect으로 컴포넌트의 마운트가 끝난 후 포커싱을 실행하도록 합니다. - if (yearRef) { - yearRef.current.focus(); - } - }, []); - - return ( - <> -
- - -
- - - ); -}); +// SVG 아이콘 +import { AddIcon, RefreshIcon } from '../../assets/icons'; export default function History() { - const refs = { - yearRef: useRef(), - monthRef: useRef(), - contentRef: useRef(), - }; - - const { openAlert, closeAlert } = useAlert(); - const { openConfirm, closeConfirm } = useConfirm(); - const { showLoading, hideLoading } = useLoading(); - - // 추가 버튼을 눌렀을 때 - const handleAddClick = () => { - openConfirm({ - title: '새로운 연혁 추가', - content: , - onConfirm: onConfirm, - onCancel: closeConfirm, - confirm_label: '추가', - cancel_label: '취소', - }); - }; - - // 유저가 confirm 모달에서 확인을 눌렀을 때 - const onConfirm = () => { - const newYear = parseInt(refs.yearRef.current.value); - const newMonth = parseInt(refs.monthRef.current.value); - const newContent = refs.contentRef.current.value; - - // 연도, 월, 내용 중 하나라도 비어있으면 API 요청 X - if (!newYear || !newMonth || !newContent) { - openAlert({ - title: '경고', - content: 모든 입력란을 채워주세요., - ok_label: '닫기', - onClose: closeAlert, - }); - return; - } - - // API 서버에 전송할 연혁 객체를 구성합니다. - const newHistory = { - year: newYear, - month: newMonth, - content: newContent, - }; - - closeConfirm(); - showLoading({ message: '연혁 정보를 전송하고 있어요...' }); // 서버 요청 하기전 로딩 표시 - - // 서버로 추가를 요청합니다. - API.POST('/histories', newHistory) - .then() - .then(() => { - hideLoading(); - openAlert({ - title: '연혁 추가 성공', - content: ( - <> - - {newYear}년 {newMonth}월 - {newContent} - -
- 페이지를 다시 불러올게요. - - ), - ok_label: '닫기', - onClose: () => { - window.location.reload(); - }, - }); - }); - }; - return ( <>
연혁 추가/제거
- - +를 눌러 연혁 추가 - + +를 눌러 연혁 추가 window.location.reload()} /> - + {}} fill="#ffffff" /> - ); } diff --git a/src/pages/dashboard/History.styled.js b/src/pages/dashboard/History.styled.js index 5c5303b..a5c239a 100644 --- a/src/pages/dashboard/History.styled.js +++ b/src/pages/dashboard/History.styled.js @@ -1,5 +1,7 @@ import styled from 'styled-components'; -import { Container } from './Dashboard.styled'; + +// 사용자 정의 컴포넌트 +import { Container } from '../../components/forms/Container'; export const ManageHistory = styled(Container)` width: 100%; diff --git a/src/pages/dashboard/Home.Loading.jsx b/src/pages/dashboard/Home.Loading.jsx index 8b4f382..b77292c 100644 --- a/src/pages/dashboard/Home.Loading.jsx +++ b/src/pages/dashboard/Home.Loading.jsx @@ -1,12 +1,10 @@ -// Home.Loading.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import styled from 'styled-components'; -// 사용자가 생성한 컴포넌트 및 JS파일 import -import { Container } from './Dashboard.styled'; -import { Header, BoardColumn } from './Dashboard.styled'; +// 사용자 정의 컴포넌트 +import { Container } from '../../components/forms/Container'; + +import { Header } from './Dashboard.styled'; +import { BoardColumn } from './Home.styled'; const SkeletonBox = styled(Container)` width: ${(props) => props.width}; diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx index e24033a..a8b01be 100644 --- a/src/pages/dashboard/Home.jsx +++ b/src/pages/dashboard/Home.jsx @@ -1,21 +1,14 @@ -// Home.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import useHome from '../../stores/dashboard/useHome'; -// 사용자가 생성한 컴포넌트 및 JS파일 import -import HomeLoading from './Home.Loading'; -import { - Header, - Container, - ContainerHeader, - Button, - BoardColumn, -} from './Dashboard.styled'; +// 사용자 정의 컴포넌트 +import { Header } from './Dashboard.styled'; +import { Container } from '../../components/forms/Container'; +import { ContainerHeader, Button, BoardColumn } from './Home.styled'; import { NumberDisplay } from '../../components/display/NumberDisplay'; +import HomeLoading from './Home.Loading'; + +import useHome from '../../stores/dashboard/useHome'; const HistoryBoard = ({ name, data, navigate }) => { return ( diff --git a/src/pages/dashboard/Home.styled.js b/src/pages/dashboard/Home.styled.js new file mode 100644 index 0000000..2eba31f --- /dev/null +++ b/src/pages/dashboard/Home.styled.js @@ -0,0 +1,50 @@ +import styled from 'styled-components'; + +// 사용자 정의 컴포넌트 +import { Span } from '../../components/typograph/Text'; + +/** + * 컨테이너 헤더 + */ +export const ContainerHeader = styled(Span).attrs({ + id: 'dashboard-container-header', + $size: 'l', + $weight: 'bold', +})``; + +/** + * 대시보드용 반투명 버튼 + */ +export const Button = styled.button` + transition: background-color 0.2s ease-out; + + position: relative; + cursor: pointer; + overflow: hidden; + + width: ${(props) => props.$width ?? 'fit-content'}; + height: ${(props) => props.$height ?? 'fit-content'}; + padding: 12px 20px; + border-radius: 26px; + + border: none; + outline: none; + color: var(--primary-text-color); + background-color: var(--transparent-button-background); + font-weight: 700; + + box-sizing: border-box; + + &:hover { + background-color: var(--transparent-button-background-focus); + } +`; + +export const BoardColumn = styled.div` + margin-right: 24px; + margin-bottom: 24px; + + display: inline-flex; + flex-direction: column; + gap: 24px; +`; diff --git a/src/pages/dashboard/Users.jsx b/src/pages/dashboard/Users.jsx index 4152972..b3e21db 100644 --- a/src/pages/dashboard/Users.jsx +++ b/src/pages/dashboard/Users.jsx @@ -1,9 +1,4 @@ -// Users.jsx -// 코드 작성자 : GiHhub @whitedev77773 - -// 외부 라이브러리에서 import - -// 사용자가 생성한 컴포넌트 및 JS파일 import +// 사용자 정의 컴포넌트 import { Header } from './Dashboard.styled'; export default function Users() { From 1547140c14404b68307c6f7688ff0db30d544a81 Mon Sep 17 00:00:00 2001 From: Giwon Date: Fri, 13 Sep 2024 22:09:44 +0900 Subject: [PATCH 34/97] =?UTF-8?q?feat:=20ERD=EC=97=90=20=EB=A7=9E=EC=B6=94?= =?UTF-8?q?=EC=96=B4=20=EC=97=B0=ED=98=81=20=EC=9E=AC=EA=B0=9C=EB=B0=9C=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/empty.svg | 64 ++++++ src/assets/icons/down.svg | 11 + .../display/{ => dashboard}/AdminCard.jsx | 12 +- src/components/display/dashboard/Empty.jsx | 33 +++ .../display/dashboard/history/AddHistory.jsx | 38 ++++ .../display/dashboard/history/EditHistory.jsx | 101 +++++++++ .../dashboard/history/HistoryElement.jsx | 196 ++++++++++++++++++ .../dashboard/history/UpdatedHistory.jsx | 68 ++++++ src/pages/dashboard/Admin.jsx | 2 +- src/pages/dashboard/History.jsx | 148 ++++++++++++- src/pages/dashboard/History.styled.js | 59 ++++++ src/pages/dashboard/Home.Loading.jsx | 4 +- src/pages/dashboard/Home.jsx | 28 +-- src/pages/dashboard/Home.styled.js | 30 +++ src/stores/dashboard/useHistory.js | 56 +++-- src/stores/useAlert.js | 2 +- src/stores/useConfirm.js | 4 +- src/utils/dashboard/refineHistoryRes.js | 22 -- 18 files changed, 798 insertions(+), 80 deletions(-) create mode 100644 src/assets/empty.svg create mode 100644 src/assets/icons/down.svg rename src/components/display/{ => dashboard}/AdminCard.jsx (81%) create mode 100644 src/components/display/dashboard/Empty.jsx create mode 100644 src/components/display/dashboard/history/AddHistory.jsx create mode 100644 src/components/display/dashboard/history/EditHistory.jsx create mode 100644 src/components/display/dashboard/history/HistoryElement.jsx create mode 100644 src/components/display/dashboard/history/UpdatedHistory.jsx delete mode 100644 src/utils/dashboard/refineHistoryRes.js diff --git a/src/assets/empty.svg b/src/assets/empty.svg new file mode 100644 index 0000000..31b9bff --- /dev/null +++ b/src/assets/empty.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/down.svg b/src/assets/icons/down.svg new file mode 100644 index 0000000..9ae2672 --- /dev/null +++ b/src/assets/icons/down.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/display/AdminCard.jsx b/src/components/display/dashboard/AdminCard.jsx similarity index 81% rename from src/components/display/AdminCard.jsx rename to src/components/display/dashboard/AdminCard.jsx index 58b61cc..9118a17 100644 --- a/src/components/display/AdminCard.jsx +++ b/src/components/display/dashboard/AdminCard.jsx @@ -1,15 +1,9 @@ -import { useRef } from 'react'; import styled from 'styled-components'; -import { Text } from '../typograph/Text'; +import { Text } from '../../typograph/Text'; -import { GenerateColorByString } from '../../utils/generateColor'; -import { ColorProfile } from './ColorProfile'; - -import useAlert from '../../stores/useAlert'; -import useConfirm from '../../stores/useConfirm'; -import useLoading from '../../stores/useLoading'; -import { API } from '../../utils/api'; +import { GenerateColorByString } from '../../../utils/generateColor'; +import { ColorProfile } from '../ColorProfile'; const CardWrapper = styled.div` transition: background-color 0.1s ease-in-out; diff --git a/src/components/display/dashboard/Empty.jsx b/src/components/display/dashboard/Empty.jsx new file mode 100644 index 0000000..03e16e4 --- /dev/null +++ b/src/components/display/dashboard/Empty.jsx @@ -0,0 +1,33 @@ +import styled from 'styled-components'; + +import { Text } from '../../typograph/Text'; + +import EmptySVG from '../../../assets/empty.svg'; +import { Container } from '../../forms/Container'; + +const Wrapper = styled(Container).attrs({ + id: 'dashboard-empty', +})` + margin: 0; + margin-top: 20px; + + width: 100%; + max-width: 1000px; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 20px; +`; + +export const Empty = () => { + return ( + + + + 텅! 비어있네요... + + + ); +}; diff --git a/src/components/display/dashboard/history/AddHistory.jsx b/src/components/display/dashboard/history/AddHistory.jsx new file mode 100644 index 0000000..90c8a01 --- /dev/null +++ b/src/components/display/dashboard/history/AddHistory.jsx @@ -0,0 +1,38 @@ +import { forwardRef, useState } from 'react'; +import styled from 'styled-components'; + +import { Input } from '../../../forms/Input'; + +const Wrapper = styled.div` + margin: 40px 0; +`; + +export const AddHistory = forwardRef(({ ...props }, ref) => { + return ( + + {/* 사용자가 입력하는 부분 */} +
+ + +
+ +
+ ); +}); diff --git a/src/components/display/dashboard/history/EditHistory.jsx b/src/components/display/dashboard/history/EditHistory.jsx new file mode 100644 index 0000000..0af722c --- /dev/null +++ b/src/components/display/dashboard/history/EditHistory.jsx @@ -0,0 +1,101 @@ +import { forwardRef, useState } from 'react'; +import styled from 'styled-components'; + +import { Span } from '../../../typograph/Text'; +import { Button } from '../../../forms/Button'; + +import { formatDate } from '../../../../utils/formatDate'; +import { HintedInput } from '../../../forms/HintedInput'; +import { Container } from '../../../forms/Container'; + +const Wrapper = styled.div` + margin: 40px 0; + + & > Button { + position: absolute; + left: 35px; + bottom: 35px; + } +`; + +const Preview = styled(Container)` + margin: 0; + margin-bottom: 30px; + + width: 100%; + padding: 30px; + border-radius: 20px; + + border: none; + background-color: var(--container-secondary-background); +`; + +const Description = styled(Span).attrs({ + $size: 'l', + $weight: 'bold', +})` + margin-bottom: 8px; +`; + +const Date = styled(Span).attrs({ + $size: 's', + $color: '--secondary-text-color', +})``; + +export const EditHistory = forwardRef( + ({ history, onDelete, ...props }, ref) => { + if (!history) { + console.error('history 객체가 없습니다.'); + return; + } + + const [previewDesc, setPreviewDesc] = useState(history.description); + + return ( + + {/* 수정할 타겟을 보여줌 */} + + + {previewDesc != '' ? previewDesc : '비어있음'} + + + 등록 {formatDate(history.created_at)}ㆍ수정{' '} + {formatDate(history.updated_at)} + + + {/* 사용자가 수정하는 부분 */} +
+ + +
+ { + // 사용자가 내용을 변경하면 미리보기의 내용도 변경합니다. + setPreviewDesc(e.target.value); + }} + /> + +
+ ); + }, +); diff --git a/src/components/display/dashboard/history/HistoryElement.jsx b/src/components/display/dashboard/history/HistoryElement.jsx new file mode 100644 index 0000000..8e09bed --- /dev/null +++ b/src/components/display/dashboard/history/HistoryElement.jsx @@ -0,0 +1,196 @@ +import { useRef } from 'react'; +import styled from 'styled-components'; + +import { Span, Text } from '../../../typograph/Text'; + +import { EditHistory } from './EditHistory'; + +import { API } from '../../../../utils/api'; +import useConfirm from '../../../../stores/useConfirm'; +import useAlert from '../../../../stores/useAlert'; +import useLoading from '../../../../stores/useLoading'; +import { UpdatedHistory } from './UpdatedHistory'; + +const CardWrapper = styled.div.attrs({ + id: 'dashboard-history-card', +})` + cursor: pointer; + + transition: opacity 0.1s ease-in-out; + + width: 50%; + min-width: 340px; + // flex-shrink로 flex로 인한 크기 변경을 방지합니다. + flex-shrink: 0; + + display: flex; + flex: 1 1 calc(50% - 10px); /* 2개씩 배치될 때 각 요소의 너비 */ + align-items: center; + gap: 10px; + + &:hover > span:first-child { + background-color: var(--success-color); + } + + &:hover > span:last-child { + color: var(--success-color); + } +`; + +const Month = styled(Span).attrs({ + id: 'dashboard-history-card-month', + $size: 's', + $weight: 'bold', +})` + transition: background-color 0.2s ease-in-out; + + margin-left: -4px; + + width: 40px; + padding: 8px 12px; + border-radius: 30px; + + border: 1px solid var(--container-border); + text-align: center; +`; + +const Description = styled(Span).attrs({ + id: 'dashboard-history-card-description', + $size: 's', +})` + transition: color 0.2s ease-in-out; +`; + +export const HistoryElement = ({ history }) => { + const { openConfirm, closeConfirm } = useConfirm(); + const { openAlert } = useAlert(); + const { showLoading, hideLoading } = useLoading(); + + // 연혁 편집을 위한 Reference + const refs = { + year: useRef(), + month: useRef(), + description: useRef(), + }; + + // 연혁 요소를 눌렀을 때 이벤트 + function onClick() { + openConfirm({ + title: '연혁 수정', + content: ( + + ), + onConfirm: () => UpdateHistory(), + confirm_label: '수정', + cancel_label: '취소', + }); + } + + // 연혁을 업데이트하는 이벤트 + function UpdateHistory() { + const updated_history = { + ...history, + year: parseInt(refs.year.current.value), + month: parseInt(refs.month.current.value), + description: refs.description.current.value, + }; + + // 만약 변경된 내용 없이 기존과 같다면 중단 + // 객체를 비교할 때 값이 아닌 메모리 주소를 기준으로 비교하므로 비교시 무조건 false가 반환됨 + // 따라서 JSON 문자열로 변환 후 비교해야함 (JS 객체는 Key가 자동으로 정렬되는 것을 이용함) + if (JSON.stringify(history) === JSON.stringify(updated_history)) { + openAlert({ + title: '변경할 내용 없음', + content: 기존 연혁과 동일합니다., + }); + return; + } + + if ( + !updated_history.year || + !updated_history.month || + !updated_history.description + ) { + openAlert({ + title: '정보 부족', + content: 모든 칸을 입력해주세요, + }); + return; + } + + // 문제가 없다면 서버 요청 시작 + showLoading({ message: '연혁을 수정하는 중...' }); + + API.PUT(`/histories/${history.id}`, updated_history) + .then((api_res) => { + closeConfirm(); + openAlert({ + title: '연혁 수정됨', + content: ( + + ), + onClose: () => window.location.reload(), + }); + }) + .catch((error) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: ( + + 오류가 발생했습니다. 다시 시도해주세요. +
+
+ 메시지 : {error.message} +
+ ), + }); + }) + .finally(() => { + hideLoading(); + }); + } + + // 연혁을 삭제하는 이벤트 + function DeleteHistory() { + // 변경할 내용이 있다면 서버 요청 시작 + closeConfirm(); + showLoading({ message: '연혁을 삭제하는 중...' }); + + API.DELETE(`/histories/${history.id}`) + .then((api_res) => { + openAlert({ + title: '연혁 삭제됨', + content: 연혁을 삭제했어요., + onClose: () => window.location.reload(), + }); + }) + .catch((error) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: ( + + 오류가 발생했습니다. 다시 시도해주세요. +
+
+ 메시지 : {error.message} +
+ ), + }); + }) + .finally(() => { + hideLoading(); + }); + } + + return ( + onClick()}> + {history?.month}월 + {history?.description} + + ); +}; diff --git a/src/components/display/dashboard/history/UpdatedHistory.jsx b/src/components/display/dashboard/history/UpdatedHistory.jsx new file mode 100644 index 0000000..d4ff7e1 --- /dev/null +++ b/src/components/display/dashboard/history/UpdatedHistory.jsx @@ -0,0 +1,68 @@ +import styled from 'styled-components'; + +import { Span } from '../../../typograph/Text'; + +import DownIcon from '../../../../assets/icons/down.svg'; + +const ID = styled(Span).attrs({ + $size: 's', + $weight: 'bold', + $color: '--secondary-text-color', +})` + margin-top: 30px; + margin-bottom: 6px; +`; + +const Description = styled(Span)` + margin-bottom: 30px; +`; + +const Display = styled.div` + width: 100%; + padding: 20px; + border-radius: 20px; + box-sizing: border-box; + + text-align: center; + background-color: var(--container-secondary-background); +`; + +const Date = styled(Span).attrs({ + $size: 's', + $weight: 'bold', + $color: '--secondary-text-color', +})` + margin-bottom: 8px; +`; + +const Content = styled(Span).attrs({ + $size: 'l', + $weight: 'extrabold', +})``; + +export const UpdatedHistory = ({ current_history, updated_history }) => { + return ( + <> + History ID {updated_history.id} + 연혁이 다음과 같이 수정되었습니다. + {/* 기존 연혁 */} + + + {current_history.year}년 {current_history.month}월 + + {current_history.description} + + {/* 화살표 */} +
+ +
+ {/* 변경된 연혁 */} + + + {updated_history.year}년 {updated_history.month}월 + + {updated_history.description} + + + ); +}; diff --git a/src/pages/dashboard/Admin.jsx b/src/pages/dashboard/Admin.jsx index 05e9e86..a5e8924 100644 --- a/src/pages/dashboard/Admin.jsx +++ b/src/pages/dashboard/Admin.jsx @@ -15,7 +15,7 @@ import { import { AdminCard, AdminCardLoading, -} from '../../components/display/AdminCard.jsx'; +} from '../../components/display/dashboard/AdminCard.jsx'; // SVG 아이콘 import { RefreshIcon } from '../../assets/icons'; diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index 6b95a81..f9c642b 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -1,12 +1,136 @@ +import { useEffect, useState, useRef } from 'react'; + // 사용자 정의 컴포넌트 import { Text } from '../../components/typograph/Text'; + import { Header } from './Dashboard.styled'; -import { ManageHistory, Menu } from './History.styled'; +import { + ManageHistory, + Menu, + YearContainer, + YearContainerLoading, +} from './History.styled'; +import { HistoryElement } from '../../components/display/dashboard/history/HistoryElement'; +import { AddHistory } from '../../components/display/dashboard/history/AddHistory'; + +// 외부 훅 +import { API } from '../../utils/api'; +import useHistory from '../../stores/dashboard/useHistory'; +import useAlert from '../../stores/useAlert'; +import useConfirm from '../../stores/useConfirm'; +import useLoading from '../../stores/useLoading'; // SVG 아이콘 import { AddIcon, RefreshIcon } from '../../assets/icons'; +import { Empty } from '../../components/display/dashboard/Empty'; export default function History() { + const { openAlert } = useAlert(); + const { openConfirm, closeConfirm } = useConfirm(); + const { showLoading, hideLoading } = useLoading(); + + const { saveHistory, histories } = useHistory(); // 불러온 데이터를 저장할 상태 + const [loading, setLoading] = useState(true); // 로딩 상태를 관리 + + // 연혁 추가를 위한 Reference + const refs = { + year: useRef(), + month: useRef(), + description: useRef(), + }; + + useEffect(() => { + // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 + if (Object.keys(histories).length === 0) { + API.GET('/histories') + .then((api_res) => { + saveHistory(api_res); // API 데이터를 Zustand 상태에 반영 + }) + .catch((error) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: ( + + 오류가 발생했습니다. 다시 시도해주세요. +
+
+ 메시지 : {error.message} +
+ ), + }); + }) + .finally(() => { + setLoading(false); + }); + } else { + setLoading(false); + console.info('이미 API 데이터가 있으므로 API 응답을 요청하지 않습니다.'); + } + }, []); + + // 연혁 추가 버튼을 눌렀을 때 이벤트 + function onAddHistory() { + openConfirm({ + title: '연혁 추가', + content: , + onConfirm: () => { + // 추가할 연혁의 객체를 구성합니다. + const new_history = { + year: refs.year.current.value, + month: refs.month.current.value, + description: refs.description.current.value, + }; + + // 만약 하나라도 미입력이라면 알림을 띄웁니다. + if ( + !new_history.year || + !new_history.month || + !new_history.description + ) { + openAlert({ + title: '정보 부족', + content: 모든 칸을 입력해주세요, + }); + return; + } + + // 문제가 없다면 연혁을 추가합니다. + closeConfirm(); + showLoading({ message: '연혁을 추가하는 중...' }); + + API.POST('/histories', new_history) + .then(() => { + hideLoading(); + openAlert({ + title: '연혁 추가 성공', + content: 연혁을 정상적으로 추가했어요., + onClose: () => window.location.reload(), + }); + }) + .catch((error) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: ( + + 오류가 발생했습니다. 다시 시도해주세요. +
+
+ 메시지 : {error.message} +
+ ), + }); + }) + .finally(() => { + hideLoading(); + }); + }, + confirm_label: '추가', + cancel_label: '취소', + }); + } + return ( <>
연혁 추가/제거
@@ -14,9 +138,29 @@ export default function History() { +를 눌러 연혁 추가 window.location.reload()} /> - {}} fill="#ffffff" /> + + {loading ? ( + <> + + + + + ) : Object.keys(histories).length === 0 ? ( + + ) : ( + Object.keys(histories) + .reverse() // history.year가 숫자이기 때문에 객체에서 자동으로 오름차순 정렬됩니다. 따라서 연도 key의 순서를 뒤집습니다. + .map((year) => ( + + {year}년 + {histories[year].map((history, index) => ( + + ))} + + )) + )} ); } diff --git a/src/pages/dashboard/History.styled.js b/src/pages/dashboard/History.styled.js index a5c239a..10561a3 100644 --- a/src/pages/dashboard/History.styled.js +++ b/src/pages/dashboard/History.styled.js @@ -4,9 +4,13 @@ import styled from 'styled-components'; import { Container } from '../../components/forms/Container'; export const ManageHistory = styled(Container)` + margin: 0px; + padding: 30px; + width: 100%; max-width: 1000px; height: 80px; + border-radius: 20px; display: flex; flex-direction: row; @@ -30,3 +34,58 @@ export const Menu = styled.div` cursor: pointer; } `; + +export const YearContainer = styled.div.attrs({ + id: 'dashboard-history-year-box', +})` + margin: 0; + margin-top: 20px; + + width: 100%; + max-width: 1000px; + + display: flex; + flex-wrap: wrap; + gap: 6px; + + padding: 30px; + box-sizing: border-box; + border-radius: 20px; + + border: 1px solid var(--container-border); + + // 연도 글자에 간격 추가 + & > span { + width: 100%; + // flex-shrink로 flex로 인한 크기 변경을 방지합니다. + flex-shrink: 0; + margin-bottom: 20px; + } +`; + +export const YearContainerLoading = styled(YearContainer).attrs({ + id: 'dashboard-history-year-box', +})` + @keyframes skeletonAnimation { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } + } + + height: 144px; + + background: linear-gradient( + 45deg, + var(--container-primary-background) 35%, + var(--container-secondary-background) 50%, + var(--container-primary-background) 65% + ); + background-size: 400% 400%; + animation: skeletonAnimation 2s infinite ease-in-out; +`; diff --git a/src/pages/dashboard/Home.Loading.jsx b/src/pages/dashboard/Home.Loading.jsx index b77292c..fc417de 100644 --- a/src/pages/dashboard/Home.Loading.jsx +++ b/src/pages/dashboard/Home.Loading.jsx @@ -1,12 +1,12 @@ import styled from 'styled-components'; // 사용자 정의 컴포넌트 -import { Container } from '../../components/forms/Container'; +import { HomeContainer } from './Home.styled'; import { Header } from './Dashboard.styled'; import { BoardColumn } from './Home.styled'; -const SkeletonBox = styled(Container)` +const SkeletonBox = styled(HomeContainer)` width: ${(props) => props.width}; height: ${(props) => props.height}; diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx index a8b01be..f75f329 100644 --- a/src/pages/dashboard/Home.jsx +++ b/src/pages/dashboard/Home.jsx @@ -3,8 +3,12 @@ import { useNavigate } from 'react-router-dom'; // 사용자 정의 컴포넌트 import { Header } from './Dashboard.styled'; -import { Container } from '../../components/forms/Container'; -import { ContainerHeader, Button, BoardColumn } from './Home.styled'; +import { + ContainerHeader, + HomeContainer, + Button, + BoardColumn, +} from './Home.styled'; import { NumberDisplay } from '../../components/display/NumberDisplay'; import HomeLoading from './Home.Loading'; @@ -12,7 +16,7 @@ import useHome from '../../stores/dashboard/useHome'; const HistoryBoard = ({ name, data, navigate }) => { return ( - + {name}
{ > 연혁 추가/제거로 이동 - + ); }; const ExecutiveBoard = ({ name, data, navigate }) => { return ( - + {name}
{ > 임원진 추가/제거로 이동 - + ); }; const AdminBoard = ({ name, data, navigate }) => { return ( - + {name}
{ > 관리자 추가/제거로 이동 - + ); }; const UserBoard = ({ name, data, navigate }) => { return ( - + {name}
{ > 회원 관리로 이동 - + ); }; const PostBoard = ({ name, data, navigate }) => { return ( - + {name}
{ > 소식지 페이지로 이동 - + ); }; diff --git a/src/pages/dashboard/Home.styled.js b/src/pages/dashboard/Home.styled.js index 2eba31f..c018065 100644 --- a/src/pages/dashboard/Home.styled.js +++ b/src/pages/dashboard/Home.styled.js @@ -2,6 +2,7 @@ import styled from 'styled-components'; // 사용자 정의 컴포넌트 import { Span } from '../../components/typograph/Text'; +import { Container } from '../../components/forms/Container'; /** * 컨테이너 헤더 @@ -12,6 +13,35 @@ export const ContainerHeader = styled(Span).attrs({ $weight: 'bold', })``; +export const HomeContainer = styled(Container).attrs({ + id: 'dashboard-home-container', +})` + @keyframes show { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + + & > * { + animation: show 0.75s ease-in-out; + } + + width: 360px; + + margin: 0; + padding: 30px; + border-radius: 20px; + box-sizing: border-box; + overflow: hidden; + + display: flex; + flex-direction: column; + gap: 30px; +`; + /** * 대시보드용 반투명 버튼 */ diff --git a/src/stores/dashboard/useHistory.js b/src/stores/dashboard/useHistory.js index c680d77..8dabd87 100644 --- a/src/stores/dashboard/useHistory.js +++ b/src/stores/dashboard/useHistory.js @@ -3,40 +3,38 @@ // 사용자가 최초 메뉴 접속 이후 새로운 데이터를 표시하려면 새로고침 등이 필요합니다. import { create } from 'zustand'; -import { refineHistoryRes } from '../../utils/dashboard/refineHistoryRes'; -const useHistory = create((set) => ({ - history: [], - refined_history: {}, +/** + * API 응답 형식에 맞는 history 오브젝트를 받으면 아래와 같이 재정렬 합니다. + * 1. 연도별로 구분 (2021,2023,2019...) + * 2. 연도 기준 내림차순 정렬 (2023,2021,2019...) + * 2. 연도 내부에서 월 기준 오름차순 정렬 (1, 2, 3, 4...) + * */ +const refineHistories = (histories) => { + const groupedByYear = histories.reduce((acc, item) => { + const year = item.year; + if (!acc[year]) { + acc[year] = []; + } + acc[year].push(item); + return acc; + }, {}); + + // 각각 연도의 요소를 month순으로 정렬 + Object.keys(groupedByYear).forEach((year) => { + groupedByYear[year].sort((a, b) => a.month - b.month); + }); - // // 연혁을 추가합니다. - // // newHistory는 API 명세서 참고 - // addHistory: (newHistory) => { - // set((state) => ({ - // history: [...state.history, { ...newHistory, id: state.history.length }], - // })); - // set((state) => ({ - // // 변경된 history를 다시 그루핑합니다. - // refined_history: refineHistoryRes(state.history), - // })); - // }, + return groupedByYear; +}; - // // 연혁을 제거 합니다. - // removeHistory: (id) => { - // set((state) => ({ - // // filter로 전달받은 id와 다른 것들만 저장합니다. - // history: state.history.filter((hist) => hist.id !== id), - // })); - // set((state) => ({ - // // 변경된 history를 다시 그루핑합니다. - // refined_history: refineHistoryRes(state.history), - // })); - // }, +const useHistory = create((set) => ({ + histories: {}, // 외부 컴포넌트에서 API 응답을 받고 저장하는 용도입니다. - saveHistory: (newList) => { - set({ history: newList }); - set({ refined_history: refineHistoryRes(newList) }); + saveHistory: (api_res) => { + const refined_histories = refineHistories(api_res); + set({ histories: refined_histories }); }, })); diff --git a/src/stores/useAlert.js b/src/stores/useAlert.js index fd4a01a..beef224 100644 --- a/src/stores/useAlert.js +++ b/src/stores/useAlert.js @@ -37,7 +37,7 @@ const useAlert = create((set, get) => ({ set({ isOpen: true, title: title, - onClose: onClose, + onClose: onClose ?? closeAlert, content: content, ok_label: ok_label, ok_color: ok_color, diff --git a/src/stores/useConfirm.js b/src/stores/useConfirm.js index e5acc34..cbd64cd 100644 --- a/src/stores/useConfirm.js +++ b/src/stores/useConfirm.js @@ -47,8 +47,8 @@ const useConfirm = create((set, get) => ({ isOpen: true, title: title, content: content, - onConfirm: onConfirm, - onCancel: onCancel, + onConfirm: onConfirm ?? closeConfirm, + onCancel: onCancel ?? closeConfirm, confirm_label: confirm_label, confirm_color: confirm_color, cancel_label: cancel_label, diff --git a/src/utils/dashboard/refineHistoryRes.js b/src/utils/dashboard/refineHistoryRes.js deleted file mode 100644 index 4cff864..0000000 --- a/src/utils/dashboard/refineHistoryRes.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * API 응답 형식에 맞는 history 오브젝트를 받으면 아래와 같이 재정렬 합니다. - * 1. 연도별로 구분 - * 2. 월별로 정렬 - * */ -export const refineHistoryRes = (history) => { - const groupedByYear = history.reduce((acc, item) => { - const year = item.year; - if (!acc[year]) { - acc[year] = []; - } - acc[year].push(item); - return acc; - }, {}); - - // 각 연도별로 month순으로 정렬 - Object.keys(groupedByYear).forEach((year) => { - groupedByYear[year].sort((a, b) => a.month - b.month); - }); - - return groupedByYear; -}; From 821d92111f4c31e68859249f707daa8f0cfb4179 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sun, 15 Sep 2024 18:30:04 +0900 Subject: [PATCH 35/97] =?UTF-8?q?feat:=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=B3=80=EA=B2=BD=20&=20=EA=B3=84=EC=A0=95=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MyPage.jsx | 140 +++++++++++++++++++++++++++++++++---------- 1 file changed, 108 insertions(+), 32 deletions(-) diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index 9471528..ee80744 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -3,8 +3,11 @@ import styled from 'styled-components'; import { useState, useEffect } from 'react'; +import { useForm } from 'react-hook-form'; import axios from 'axios'; +import { Button } from '../components/forms/Button'; + const Container = styled.div` font-family: 'Noto Sans KR', sans-serif; background-color: #0d0e14; @@ -145,7 +148,8 @@ const EditButton = styled.button` border: none; border-radius: 10px; cursor: pointer; - width: 100%; + width: 200px; + margin-left: 940px; `; const WarningMessage = styled.p` @@ -158,22 +162,26 @@ export default function MyPage() { const [userInfo, setUserInfo] = useState({ name: '', studentNumber: '', - profilePic: null, + profile: null, }); const [imagePreview, setImagePreview] = useState(null); - + const [passwordError, setPasswordError] = useState(''); + + const { register, handleSubmit, formState: { errors }, reset } = useForm(); + // Fetch user data after login useEffect(() => { const fetchUserData = async () => { try { - const response = await axios.get('/user'); + const response = await axios.get('/users'); setUserInfo({ + studentNumber: response.data.student_id, name: response.data.name, - studentNumber: response.data.studentNumber, - profilePic: response.data.profilePic || '../assets/icons/menu/Executive.png', + email: response.data.email, + profilePic: response.data.profile_picture || '../assets/icons/menu/Executive.png', }); - setImagePreview(response.data.profilePic || '../assets/icons/menu/Executive.png'); + setImagePreview(response.data.profile_picture || '../assets/icons/menu/Executive.png'); } catch (error) { console.error('Failed to fetch user data:', error); } @@ -181,6 +189,7 @@ export default function MyPage() { fetchUserData(); }, []); + const handleImageUpload = (event) => { const file = event.target.files[0]; if (file) { @@ -189,7 +198,7 @@ export default function MyPage() { const formData = new FormData(); formData.append('profilePic', file); - axios.post('/upload-profile-pic-endpoint', formData) + axios.post(`/passwords/${userInfo.studentNumber}`, formData) .then(response => { console.log('Image uploaded successfully'); }) @@ -200,9 +209,9 @@ export default function MyPage() { }; const handleDeleteImage = () => { - setImagePreview('../assets/menu/Executive.png'); // Reset to default + setImagePreview('../assets/menu/Executive.png'); - axios.post('/delete-profile-pic-endpoint') + axios.delete(`/users/${userInfo.studentNumber}/profile_picture`) .then(response => { console.log('Image deleted successfully'); }) @@ -211,6 +220,45 @@ export default function MyPage() { }); }; + const onSubmit = async (data) => { + setPasswordError(''); + + if (data.newPassword !== data.confirmPassword) { + setPasswordError('새로운 비밀번호가 일치하지 않습니다.'); + return; + } + + try { + // 서버로 로그인 정보를 전송 + const response = await axios.post('155.230.118.35', data); + console.log('로그인 성공:', response.data); + } catch (error) { + // 404 상태 코드가 반환되면 로그인 불일치 처리 + if (error.response && error.response.status === 404) { + console.error('로그인 정보가 일치하지 않습니다.'); + alert('로그인 정보가 일치하지 않습니다. 다시 시도해주세요.'); + } else { + console.error('오류 발생:', error); + alert('로그인에 실패했습니다. 다시 시도해주세요.'); + } + } + }; + + const handleDeleteAccount = async () => { + const confirmDelete = window.confirm("계정을 삭제하면 복구할 수 없습니다. 정말로 삭제하시겠습니까?"); + if (confirmDelete) { + try { + await axios.delete(`/users/${userInfo.studentNumber}`); + alert("계정이 성공적으로 삭제되었습니다."); + + } catch (error) { + console.error('계정 삭제 실패:', error); + alert("계정 삭제에 실패했습니다. 다시 시도해주세요."); + } + } + }; + + return ( @@ -265,46 +313,74 @@ export default function MyPage() { 비밀번호 변경 Change Password -
+ - + + {errors.currentPassword && {errors.currentPassword.message}} - - + + + {errors.newPassword && {errors.newPassword.message}} - - + + + {errors.confirmPassword && {errors.confirmPassword.message}} - 저장 + + {passwordError && {passwordError}} + + 비밀번호 변경 + {/* */}
{/* Delete Account Section */}
- 계정 탈퇴 Delete Account + 계정 삭제 Delete Account - - KERT 계정을 삭제합니다. 삭제된 계정은 복구가 불가능하며 동일 이메일로 계정을 새로 생성해야 합니다. -
- - - - - - - - - - - 계정 삭제 + 계정을 삭제하면 복구할 수 없습니다. 신중히 선택하세요. + 계정 삭제
From 96a257075cdded7bf294157f7596728a9c404525 Mon Sep 17 00:00:00 2001 From: Giwon Date: Mon, 16 Sep 2024 01:26:01 +0900 Subject: [PATCH 36/97] =?UTF-8?q?feat:=20ERD=EC=97=90=20=EB=A7=9E=EC=B6=94?= =?UTF-8?q?=EC=96=B4=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=9E=AC=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/empty.svg | 72 +++--- src/components/display/ColorProfile.jsx | 18 +- .../display/dashboard/AdminCard.jsx | 86 ------- src/components/display/dashboard/Empty.jsx | 4 +- .../display/dashboard/ErrorModal.jsx | 12 + .../display/dashboard/admin/AddAdmin.jsx | 30 +++ .../display/dashboard/admin/AdminElement.jsx | 214 ++++++++++++++++++ .../display/dashboard/admin/DeleteAdmin.jsx | 105 +++++++++ .../display/dashboard/admin/EditAdmin.jsx | 198 ++++++++++++++++ .../display/dashboard/admin/UpdatedAdmin.jsx | 68 ++++++ .../dashboard/history/HistoryElement.jsx | 25 +- .../{display => forms}/HoverToReveal.jsx | 0 src/pages/dashboard/Admin.jsx | 162 ++++++------- src/pages/dashboard/Executive.jsx | 18 +- src/pages/dashboard/History.jsx | 23 +- src/pages/dashboard/Home.jsx | 17 +- src/utils/api.js | 2 +- src/utils/regex.js | 7 + 18 files changed, 802 insertions(+), 259 deletions(-) delete mode 100644 src/components/display/dashboard/AdminCard.jsx create mode 100644 src/components/display/dashboard/ErrorModal.jsx create mode 100644 src/components/display/dashboard/admin/AddAdmin.jsx create mode 100644 src/components/display/dashboard/admin/AdminElement.jsx create mode 100644 src/components/display/dashboard/admin/DeleteAdmin.jsx create mode 100644 src/components/display/dashboard/admin/EditAdmin.jsx create mode 100644 src/components/display/dashboard/admin/UpdatedAdmin.jsx rename src/components/{display => forms}/HoverToReveal.jsx (100%) create mode 100644 src/utils/regex.js diff --git a/src/assets/empty.svg b/src/assets/empty.svg index 31b9bff..65969c1 100644 --- a/src/assets/empty.svg +++ b/src/assets/empty.svg @@ -1,64 +1,64 @@ - + - - + + - - - - - + + + + + - - + + - - - - - + + + + + - - + + - - - - - + + + + + - + - - - - - - - - - + + + + + + + + + - + - + - + - + diff --git a/src/components/display/ColorProfile.jsx b/src/components/display/ColorProfile.jsx index d838bb4..dbabd85 100644 --- a/src/components/display/ColorProfile.jsx +++ b/src/components/display/ColorProfile.jsx @@ -8,7 +8,7 @@ const ColorProfile_ = styled.div` width: ${(props) => props.width}; height: ${(props) => props.height}; - border-radius: 100%; + border-radius: ${(props) => props.radius}; background-color: ${(props) => props.color}; @@ -31,6 +31,18 @@ const ColorProfile_ = styled.div` } `; -export const ColorProfile = ({ width = '48px', height = '48px', color }) => { - return ; +export const ColorProfile = ({ + width = '48px', + height = '48px', + color, + radius = '100%', +}) => { + return ( + + ); }; diff --git a/src/components/display/dashboard/AdminCard.jsx b/src/components/display/dashboard/AdminCard.jsx deleted file mode 100644 index 9118a17..0000000 --- a/src/components/display/dashboard/AdminCard.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import styled from 'styled-components'; - -import { Text } from '../../typograph/Text'; - -import { GenerateColorByString } from '../../../utils/generateColor'; -import { ColorProfile } from '../ColorProfile'; - -const CardWrapper = styled.div` - transition: background-color 0.1s ease-in-out; - - min-width: 400px; - max-width: 460px; - padding: 20px; - box-sizing: border-box; - - display: flex; - align-items: center; - gap: 12px; - - flex-grow: 1; - flex-basis: 0; - - border-radius: 10px; - - cursor: pointer; - - &:hover { - background-color: var(--transparent-button-background); - } -`; - -const Info = styled.div` - display: flex; - flex-direction: column; - gap: 7px; -`; - -export const AdminCardLoading = styled(CardWrapper)` - min-height: 88px; - - cursor: default; - - background: linear-gradient( - 45deg, - var(--container-primary-background) 35%, - var(--container-secondary-background) 50%, - var(--container-primary-background) 65% - ); - background-size: 400% 400%; - animation: skeletonAnimation 1.5s infinite ease-in-out; - - @keyframes skeletonAnimation { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } - } -`; - -export const AdminCard = ({ admin }) => { - const profile_color = GenerateColorByString( - admin?.student_id, - admin?.generation, - admin?.role, - admin?.description, - ); - - return ( - {}}> - - - - {admin?.role} - - - {admin?.student_id} · {admin?.description} - - - - ); -}; diff --git a/src/components/display/dashboard/Empty.jsx b/src/components/display/dashboard/Empty.jsx index 03e16e4..51cece0 100644 --- a/src/components/display/dashboard/Empty.jsx +++ b/src/components/display/dashboard/Empty.jsx @@ -21,12 +21,12 @@ const Wrapper = styled(Container).attrs({ gap: 20px; `; -export const Empty = () => { +export const Empty = ({ message = '텅! 비어있네요...' }) => { return ( - 텅! 비어있네요... + {message} ); diff --git a/src/components/display/dashboard/ErrorModal.jsx b/src/components/display/dashboard/ErrorModal.jsx new file mode 100644 index 0000000..f8fb808 --- /dev/null +++ b/src/components/display/dashboard/ErrorModal.jsx @@ -0,0 +1,12 @@ +import { Text } from '../../typograph/Text'; + +export const ErrorModal = ({ error }) => { + return ( + <> + 오류가 발생했습니다. 다시 시도해주세요. +
+
+ {error.message} + + ); +}; diff --git a/src/components/display/dashboard/admin/AddAdmin.jsx b/src/components/display/dashboard/admin/AddAdmin.jsx new file mode 100644 index 0000000..91b697a --- /dev/null +++ b/src/components/display/dashboard/admin/AddAdmin.jsx @@ -0,0 +1,30 @@ +import { forwardRef, useState } from 'react'; +import styled from 'styled-components'; + +import { Input } from '../../../forms/Input'; + +const Wrapper = styled.div` + margin: 40px 0; +`; + +export const AddAdmin = forwardRef(({ ...props }, ref) => { + return ( + + {/* 사용자가 입력하는 부분 */} + +
+ + +
+ +
+ ); +}); diff --git a/src/components/display/dashboard/admin/AdminElement.jsx b/src/components/display/dashboard/admin/AdminElement.jsx new file mode 100644 index 0000000..49f1820 --- /dev/null +++ b/src/components/display/dashboard/admin/AdminElement.jsx @@ -0,0 +1,214 @@ +import { useRef } from 'react'; +import styled from 'styled-components'; + +import { Text } from '../../../typograph/Text'; + +import { GenerateColorByString } from '../../../../utils/generateColor'; +import { ColorProfile } from '../../ColorProfile'; +import { EditAdmin } from './EditAdmin'; +import { UpdatedAdmin } from './UpdatedAdmin'; +import { ErrorModal } from '../ErrorModal'; + +import { GENERATION_REGEX } from '../../../../utils/regex'; +import { API } from '../../../../utils/api'; +import useAlert from '../../../../stores/useAlert'; +import useConfirm from '../../../../stores/useConfirm'; +import useLoading from '../../../../stores/useLoading'; + +const CardWrapper = styled.div` + transition: background-color 0.1s ease-in-out; + + min-width: 400px; + max-width: 460px; + padding: 20px; + box-sizing: border-box; + + display: flex; + align-items: center; + gap: 12px; + + flex-grow: 1; + flex-basis: 0; + + border-radius: 10px; + + cursor: pointer; + + &:hover { + background-color: var(--transparent-button-background); + } +`; + +const Info = styled.div` + display: flex; + flex-direction: column; + gap: 7px; +`; + +export const AdminElementLoading = styled(CardWrapper)` + min-height: 88px; + + cursor: default; + + background: linear-gradient( + 45deg, + var(--container-primary-background) 35%, + var(--container-secondary-background) 50%, + var(--container-primary-background) 65% + ); + background-size: 400% 400%; + animation: skeletonAnimation 1.5s infinite ease-in-out; + + @keyframes skeletonAnimation { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } + } +`; + +export const AdminElement = ({ admin }) => { + const { showLoading, hideLoading } = useLoading(); + const { openAlert } = useAlert(); + const { openConfirm, closeConfirm } = useConfirm(); + + // 만약 admin이 없다면 반환 + if (!admin) { + console.warn('admin 객체를 받지 못했습니다.'); + return <>; + } + + // 관리자 편집을 위한 Reference + const refs = { + generation: useRef(), + role: useRef(), + description: useRef(), + }; + + const profile_color = GenerateColorByString( + admin.student_id, + admin.generation, + admin.role, + ); + + // 관리자 요소를 눌렀을 때 이벤트 + function onClick() { + openConfirm({ + title: '관리자 수정', + content: , + onConfirm: () => UpdateAdmin(), + confirm_label: '수정', + cancel_label: '취소', + }); + } + + // 관리자를 업데이트하는 이벤트 + function UpdateAdmin() { + // 그냥 admin은 name, email 등 추가적인 정보가 있기 때문에 새로운 객체를 생성합니다. + const current_admin = { + student_id: admin.student_id, + generation: admin.generation, + role: admin.role, + description: admin.description, + }; + + // 사용자 입력을 기반으로 새로운 객체를 생성합니다. + const updated_admin = { + student_id: admin.student_id, + generation: refs.generation.current.value, + role: refs.role.current.value, + description: refs.description.current.value, + }; + + // 만약 변경된 내용 없이 기존과 같다면 중단 + // 객체를 비교할 때 값이 아닌 메모리 주소를 기준으로 비교하므로 비교시 무조건 false가 반환됨 + // 따라서 JSON 문자열로 변환 후 비교해야함 (JS 객체는 Key가 자동으로 정렬되는 것을 이용함) + if (JSON.stringify(current_admin) === JSON.stringify(updated_admin)) { + openAlert({ + title: '변경할 내용 없음', + content: 기존 관리자 정보와 동일합니다., + }); + return; + } + + // 게이트 1 - 모든 칸이 입력됬는지 확인 + if ( + !updated_admin.generation || + !updated_admin.role || + !updated_admin.description + ) { + openAlert({ + title: '정보 부족', + content: 모든 칸을 입력해주세요, + }); + return; + } + + // 게이트 2 - 동아리 가입연월이 이상하게 적혔다면 중단 + if (!GENERATION_REGEX.test(updated_admin.generation)) { + openAlert({ + title: '경고', + content: 동아리 가입연월을 올바르게 적어주세요., + }); + return; + } + + // 문제가 없다면 서버 요청 시작 + showLoading({ message: '관리자 정보를 수정하는 중...' }); + + API.PUT(`/admin/${admin.student_id}`, updated_admin) + .then((api_res) => { + closeConfirm(); + openAlert({ + title: '관리자 정보 수정됨', + content: ( + + ), + onClose: () => window.location.reload(), + }); + }) + .catch((err) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: , + }); + }) + .finally(() => { + hideLoading(); + }); + } + + return ( + + {/* 프로필 사진이 없으면 Color Profile로 대체 */} + {!admin.profile_picture ? ( + + ) : ( + + )} + {/* 계정 정보 */} + + + {admin.name} ({admin.student_id}) + + + {admin.role} · {admin.email} + + + + ); +}; diff --git a/src/components/display/dashboard/admin/DeleteAdmin.jsx b/src/components/display/dashboard/admin/DeleteAdmin.jsx new file mode 100644 index 0000000..3e4f248 --- /dev/null +++ b/src/components/display/dashboard/admin/DeleteAdmin.jsx @@ -0,0 +1,105 @@ +import { forwardRef, useRef, useState } from 'react'; +import styled from 'styled-components'; + +import { Span, Text } from '../../../typograph/Text'; +import { Container } from '../../../forms/Container'; + +import { ColorProfile } from '../../ColorProfile'; + +import { GenerateColorByString } from '../../../../utils/generateColor'; + +import { HoverToReveal } from '../../../forms/HoverToReveal'; +import { Input } from '../../../forms/Input'; + +const Preview = styled(Container)` + margin: 0; + margin-bottom: 30px; + + width: 100%; + padding: 30px; + border-radius: 20px; + + display: flex; + align-items: center; + gap: 20px; + + border: none; + background-color: var(--container-secondary-background); +`; + +const Description = styled(Span).attrs({ + $size: 'l', + $weight: 'bold', +})` + margin-bottom: 8px; +`; + +const Info = styled(Span).attrs({ + $size: 's', + $color: '--secondary-text-color', +})``; + +export const DeleteAdmin = forwardRef(({ admin }, ref) => { + const profile_color = GenerateColorByString( + admin.student_id, + admin.generation, + admin.role, + admin.description, + ); + + return ( + <> + {/* 수정할 타겟을 보여줌 */} + + {/* 프로필 사진이 없으면 Color Profile로 대체 */} + {!admin.profile_picture ? ( + + ) : ( + + )} +
+ + {admin.name != '' ? admin.name : '비어있음'} + + + 학번 {admin.student_id} +
+ 메일 {admin.email} +
+
+
+
+ + 위 관리자를 삭제하려면 학번을 입력하세요. + + + {admin.student_id} + +
+ + + ); +}); diff --git a/src/components/display/dashboard/admin/EditAdmin.jsx b/src/components/display/dashboard/admin/EditAdmin.jsx new file mode 100644 index 0000000..bb4d714 --- /dev/null +++ b/src/components/display/dashboard/admin/EditAdmin.jsx @@ -0,0 +1,198 @@ +import { forwardRef, useRef, useState } from 'react'; +import styled from 'styled-components'; + +import { Span, Text } from '../../../typograph/Text'; +import { Button } from '../../../forms/Button'; +import { HintedInput } from '../../../forms/HintedInput'; +import { Container } from '../../../forms/Container'; + +import { ColorProfile } from '../../ColorProfile'; +import { DeleteAdmin } from './DeleteAdmin'; + +import { ErrorModal } from '../ErrorModal'; + +import { API } from '../../../../utils/api'; +import { GenerateColorByString } from '../../../../utils/generateColor'; +import useConfirm from '../../../../stores/useConfirm'; +import useAlert from '../../../../stores/useAlert'; +import useLoading from '../../../../stores/useLoading'; + +const Wrapper = styled.div` + margin: 40px 0; + + & > Button { + position: absolute; + left: 35px; + bottom: 35px; + } +`; + +const Preview = styled(Container)` + margin: 0; + margin-bottom: 30px; + + width: 100%; + padding: 30px; + border-radius: 20px; + + display: flex; + align-items: center; + gap: 20px; + + border: none; + background-color: var(--container-secondary-background); +`; + +const Description = styled(Span).attrs({ + $size: 'l', + $weight: 'bold', +})` + margin-bottom: 8px; +`; + +const Info = styled(Span).attrs({ + $size: 's', + $color: '--secondary-text-color', +})``; + +export const EditAdmin = forwardRef(({ admin, ...props }, ref) => { + const { showLoading, hideLoading } = useLoading(); + const { openAlert } = useAlert(); + const { openConfirm, closeConfirm } = useConfirm(); + + if (!admin) { + console.error('admin 객체가 없습니다.'); + return; + } + + const [generation, setGeneration] = useState(admin.generation); + const [role, setRole] = useState(admin.role); + + const refs = { + id_confirm: useRef(), + }; + + const profile_color = GenerateColorByString( + admin.student_id, + generation, + role, + ); + + // 관리자 삭제 이벤트 + function onDelete() { + openConfirm({ + title: '관리자 삭제', + content: , + onConfirm: deleteAdmin, + confirm_label: '삭제', + confirm_color: 'var(--danger-color)', + cancel_label: '취소', + }); + } + + // 서버로 삭제 요청 + function deleteAdmin() { + // 게이트 1 - 입력한 학번이 삭제하려는 관리자의 학번과 일치하지 않을 떄 + if (refs.id_confirm.current.value != admin.student_id.toString()) { + openAlert({ + title: '학번 불일치', + content: 삭제하려는 관리자의 학번을 일치하게 적어주세요., + }); + return; + } + + // 서버로 요청 시도 + closeConfirm(); + showLoading({ message: '관리자를 삭제하는 중...' }); + + API.DELETE(`/admin/${admin.student_id}`) + .then((api_res) => { + openAlert({ + title: '관리자 삭제 완료', + content: ( + + 관리자 목록에서 {admin.name}({admin.student_id})를 삭제했어요. + + ), + onClose: () => window.location.reload(), + }); + }) + .catch((err) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: , + }); + }) + .finally(() => { + hideLoading(); + }); + } + + return ( + + {/* 수정할 타겟을 보여줌 */} + + {/* 프로필 사진이 없으면 Color Profile로 대체 */} + {!admin.profile_picture ? ( + + ) : ( + + )} +
+ + {admin.name != '' ? admin.name : '비어있음'} + + + 학번 {admin.student_id} +
+ 메일 {admin.email} +
+
+
+ {/* 사용자가 수정하는 부분 */} +
+ { + setGeneration(e.target.value); + }} + /> + { + setRole(e.target.value); + }} + /> +
+ + +
+ ); +}); diff --git a/src/components/display/dashboard/admin/UpdatedAdmin.jsx b/src/components/display/dashboard/admin/UpdatedAdmin.jsx new file mode 100644 index 0000000..06ddfdc --- /dev/null +++ b/src/components/display/dashboard/admin/UpdatedAdmin.jsx @@ -0,0 +1,68 @@ +import styled from 'styled-components'; + +import { Span } from '../../../typograph/Text'; + +import DownIcon from '../../../../assets/icons/down.svg'; + +const ID = styled(Span).attrs({ + $size: 's', + $weight: 'bold', + $color: '--secondary-text-color', +})` + margin-top: 30px; + margin-bottom: 6px; +`; + +const Description = styled(Span)` + margin-bottom: 30px; +`; + +const Display = styled.div` + width: 100%; + padding: 20px; + border-radius: 20px; + box-sizing: border-box; + + text-align: center; + background-color: var(--container-secondary-background); +`; + +const Info = styled(Span).attrs({ + $size: 's', + $weight: 'bold', + $color: '--secondary-text-color', +})` + margin-bottom: 8px; +`; + +const Content = styled(Span).attrs({ + $size: 'l', + $weight: 'extrabold', +})``; + +export const UpdatedAdmin = ({ current_admin, updated_admin }) => { + return ( + <> + Admin ID {updated_admin.student_id} + 관리자가 다음과 같이 수정되었습니다. + {/* 기존 관리자 */} + + + {current_admin.generation}ㆍ{current_admin.name}ㆍ{current_admin.role} + + {current_admin.description} + + {/* 화살표 */} +
+ +
+ {/* 변경된 관리자 */} + + + {updated_admin.generation}ㆍ{updated_admin.name}ㆍ{updated_admin.role} + + {updated_admin.description} + + + ); +}; diff --git a/src/components/display/dashboard/history/HistoryElement.jsx b/src/components/display/dashboard/history/HistoryElement.jsx index 8e09bed..3fdc2e2 100644 --- a/src/components/display/dashboard/history/HistoryElement.jsx +++ b/src/components/display/dashboard/history/HistoryElement.jsx @@ -4,12 +4,13 @@ import styled from 'styled-components'; import { Span, Text } from '../../../typograph/Text'; import { EditHistory } from './EditHistory'; +import { UpdatedHistory } from './UpdatedHistory'; +import { ErrorModal } from '../ErrorModal'; import { API } from '../../../../utils/api'; import useConfirm from '../../../../stores/useConfirm'; import useAlert from '../../../../stores/useAlert'; import useLoading from '../../../../stores/useLoading'; -import { UpdatedHistory } from './UpdatedHistory'; const CardWrapper = styled.div.attrs({ id: 'dashboard-history-card', @@ -135,18 +136,11 @@ export const HistoryElement = ({ history }) => { onClose: () => window.location.reload(), }); }) - .catch((error) => { + .catch((err) => { // 오류 발생 시 안내 openAlert({ title: '통신 에러', - content: ( - - 오류가 발생했습니다. 다시 시도해주세요. -
-
- 메시지 : {error.message} -
- ), + content: , }); }) .finally(() => { @@ -168,18 +162,11 @@ export const HistoryElement = ({ history }) => { onClose: () => window.location.reload(), }); }) - .catch((error) => { + .catch((err) => { // 오류 발생 시 안내 openAlert({ title: '통신 에러', - content: ( - - 오류가 발생했습니다. 다시 시도해주세요. -
-
- 메시지 : {error.message} -
- ), + content: , }); }) .finally(() => { diff --git a/src/components/display/HoverToReveal.jsx b/src/components/forms/HoverToReveal.jsx similarity index 100% rename from src/components/display/HoverToReveal.jsx rename to src/components/forms/HoverToReveal.jsx diff --git a/src/pages/dashboard/Admin.jsx b/src/pages/dashboard/Admin.jsx index a5e8924..3507635 100644 --- a/src/pages/dashboard/Admin.jsx +++ b/src/pages/dashboard/Admin.jsx @@ -1,9 +1,10 @@ import { useEffect, useRef, useState } from 'react'; +import { GENERATION_REGEX, STUDENT_ID_REGEX } from '../../utils/regex.js'; + // 사용자 정의 컴포넌트 import { Text } from '../../components/typograph/Text.jsx'; import { Button } from '../../components/forms/Button.jsx'; -import { Input } from '../../components/forms/Input.jsx'; import { Header } from './Dashboard.styled.js'; import { @@ -13,9 +14,11 @@ import { ControlBox, } from './Admin.styled.js'; import { - AdminCard, - AdminCardLoading, -} from '../../components/display/dashboard/AdminCard.jsx'; + AdminElement, + AdminElementLoading, +} from '../../components/display/dashboard/admin/AdminElement.jsx'; +import { AddAdmin } from '../../components/display/dashboard/admin/AddAdmin.jsx'; +import { ErrorModal } from '../../components/display/dashboard/ErrorModal.jsx'; // SVG 아이콘 import { RefreshIcon } from '../../assets/icons'; @@ -32,21 +35,40 @@ export default function Admin() { const { showLoading, hideLoading } = useLoading(); const { openConfirm, closeConfirm } = useConfirm(); - const { openAlert, closeAlert } = useAlert(); + const { openAlert } = useAlert(); - const IdRef = useRef(); - const GenerationRef = useRef(); - const RoleRef = useRef(); - const DescriptionRef = useRef(); + const refs = { + student_id: useRef(), + generation: useRef(), + role: useRef(), + description: useRef(), + }; // API로부터 데이터를 가져와 Zustand 상태를 업데이트합니다. useEffect(() => { - // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 + // admin 데이터가 Store에 없는 경우 API 요청을 보냅니다. if (admins.length === 0) { + // 1. 모든 관리자를 불러옵니다. API.GET('/admin') - .then((res) => { - saveAdmins(res); // API 서버에서 가져온 데이터를 상태에 반영 - setLoading(false); + .then((adminRes) => { + // 2. 각 admin.student_id에 대해 추가 데이터를 가져옵니다. + const userRequests = adminRes.map((admin) => + API.GET(`/users/${admin.student_id}`).then((userRes) => ({ + ...userRes, // 추가로 가져온 사용자 데이터 + ...admin, // 기존 admin 데이터 + })), + ); + // 3. 모든 요청이 완료된 후 상태에 저장 + Promise.all(userRequests) + .then((adminsWithDetails) => { + saveAdmins(adminsWithDetails); // 병합된 데이터를 저장 + }) + .catch((error) => { + console.error('Error fetching data:', error); + }) + .finally(() => { + setLoading(false); + }); }) .catch((error) => { setLoading(false); @@ -56,96 +78,85 @@ export default function Admin() { setLoading(false); console.info('이미 API 데이터가 있으므로 API 응답을 요청하지 않습니다.'); } - }, []); + }, [admins, saveAdmins]); - const onClickAddAdmin = () => { + // 새로운 관리자 추가를 눌렀을 때 + const onClick = () => { openConfirm({ title: '관리자 추가', - content: ( -
- -
- - -
- -
- ), + content: , onConfirm: () => addAdmin(), - onCancel: () => closeConfirm(), confirm_label: '추가', confirm_color: 'var(--primary-color)', cancel_label: '취소', }); }; + // 관리자 입력 폼에서 추가를 눌렀을 때 const addAdmin = () => { - // 무언가를 입력하지 않았을 때 + const new_admin = { + student_id: parseInt(refs.student_id.current.value), + generation: refs.generation.current.value, + role: refs.role.current.value, + description: refs.description.current.value, + }; + + // 게이트 1 - 무언가를 입력하지 않았을 때 if ( - !IdRef.current.value || - !GenerationRef.current.value || - !RoleRef.current.value || - !DescriptionRef.current.value + !new_admin.student_id || + !new_admin.generation || + !new_admin.role || + !new_admin.description ) { openAlert({ title: '경고', content: 모든 입력란을 채워주세요., - onClose: () => closeAlert(), }); return; } - // 학번이 10자리가 아니라면 & 숫자가 아니라면 - const IdRegex = /\d\d\d\d\d\d\d\d\d\d/i; - if (!IdRegex.test(IdRef.current.value)) { + // 게이트 2 - 학번이 10자리가 아니라면 & 숫자가 아니라면 + if (!STUDENT_ID_REGEX.test(new_admin.student_id)) { openAlert({ title: '경고', content: 학번을 올바르게 적어주세요., - onClose: () => closeAlert(), }); return; } - // 동아리 가입연월이 이상하게 적혔다면 중단 - const GenerationRegex = /\d\d\d\d\.[1-9]+/i; // 2024.1와 같은 패턴인지 확인하는 정규식 - if (!GenerationRegex.test(GenerationRef.current.value)) { + // 게이트 3 - 동아리 가입연월이 이상하게 적혔다면 중단 + if (!GENERATION_REGEX.test(new_admin.generation)) { openAlert({ title: '경고', content: 동아리 가입연월을 올바르게 적어주세요., - onClose: () => closeAlert(), }); return; } - // 로딩 ON + // 모든 게이트 통과 후 로딩 ON closeConfirm(); showLoading({ message: '새로운 관리자를 추가하고 있어요...' }); // 위 if에 걸리지 않으면 서버 POST 요청 - API.POST('/admin', { - student_id: parseInt(IdRef.current.value), - generation: GenerationRef.current.value, - role: RoleRef.current.value, - description: DescriptionRef.current.value, - }).then((res) => { - hideLoading(); - openAlert({ - title: '관리자 추가 성공', - content: 페이지를 다시 불러올게요., - ok_label: '닫기', - onClose: () => { - window.location.reload(); - }, + API.POST('/admin', new_admin) + .then((res) => { + openAlert({ + title: '관리자 추가 성공', + content: 페이지를 다시 불러올게요., + ok_label: '닫기', + onClose: () => window.location.reload(), + }); + }) + .catch((err) => { + // 오류 발생 시 안내 + openAlert({ + title: '통신 에러', + content: , + }); + }) + .finally(() => { + hideLoading(); }); - }); }; return ( @@ -164,27 +175,16 @@ export default function Admin() {
window.location.reload()} /> - + {/* 관리자 리스트 */} - {loading ? ( - <> - - - - - - - ) : ( - admins.map((admin) => ( - - )) - )} + {loading + ? [0, 1, 2, 3, 4].map((e, i) => ) + : admins.map((admin, index) => ( + + ))} diff --git a/src/pages/dashboard/Executive.jsx b/src/pages/dashboard/Executive.jsx index 1327a8e..59efa49 100644 --- a/src/pages/dashboard/Executive.jsx +++ b/src/pages/dashboard/Executive.jsx @@ -1,11 +1,11 @@ +import { useEffect } from 'react'; + // 사용자 정의 컴포넌트 import { Text } from '../../components/typograph/Text'; import { Header } from './Dashboard.styled'; -import { ManageExecutive } from './Executive.styled'; -import { Menu } from './Executive.styled'; -// svg 아이콘 -import { useEffect } from 'react'; +import { Empty } from '../../components/display/dashboard/Empty'; + import useAlert from '../../stores/useAlert'; export default function Executive() { @@ -14,7 +14,7 @@ export default function Executive() { useEffect(() => { openAlert({ title: '개발중', - content: 임원진 관리는 준비중입니다., + content: 임원진 관리는 준비중이에요... 뚝딱뚝딱..., onClose: () => closeAlert(), }); }, []); @@ -22,13 +22,7 @@ export default function Executive() { return ( <>
임원진 추가/제거
- - 준비중 - - {/* window.location.reload()} /> - {}} fill="#ffffff" /> */} - - + ); } diff --git a/src/pages/dashboard/History.jsx b/src/pages/dashboard/History.jsx index f9c642b..b31d8df 100644 --- a/src/pages/dashboard/History.jsx +++ b/src/pages/dashboard/History.jsx @@ -12,6 +12,7 @@ import { } from './History.styled'; import { HistoryElement } from '../../components/display/dashboard/history/HistoryElement'; import { AddHistory } from '../../components/display/dashboard/history/AddHistory'; +import { ErrorModal } from '../../components/display/dashboard/ErrorModal'; // 외부 훅 import { API } from '../../utils/api'; @@ -46,18 +47,11 @@ export default function History() { .then((api_res) => { saveHistory(api_res); // API 데이터를 Zustand 상태에 반영 }) - .catch((error) => { + .catch((err) => { // 오류 발생 시 안내 openAlert({ title: '통신 에러', - content: ( - - 오류가 발생했습니다. 다시 시도해주세요. -
-
- 메시지 : {error.message} -
- ), + content: , }); }) .finally(() => { @@ -108,18 +102,11 @@ export default function History() { onClose: () => window.location.reload(), }); }) - .catch((error) => { + .catch((err) => { // 오류 발생 시 안내 openAlert({ title: '통신 에러', - content: ( - - 오류가 발생했습니다. 다시 시도해주세요. -
-
- 메시지 : {error.message} -
- ), + content: , }); }) .finally(() => { diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx index f75f329..2847aee 100644 --- a/src/pages/dashboard/Home.jsx +++ b/src/pages/dashboard/Home.jsx @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; // 사용자 정의 컴포넌트 +import { Text } from '../../components/typograph/Text'; import { Header } from './Dashboard.styled'; import { ContainerHeader, @@ -13,6 +14,7 @@ import { NumberDisplay } from '../../components/display/NumberDisplay'; import HomeLoading from './Home.Loading'; import useHome from '../../stores/dashboard/useHome'; +import useAlert from '../../stores/useAlert'; const HistoryBoard = ({ name, data, navigate }) => { return ( @@ -157,11 +159,24 @@ export default function Home() { // 다른 컴포넌트에서 URL 이동을 할 수 있도록 navigate를 넙깁니다. const navigate = useNavigate(); - // API 요청을 날리기 전 isLoading을 True로 설정합니다. + const { openAlert } = useAlert(); const [isLoading, setLoading] = useState(true); // 컴포넌트가 마운트되면 useEffect(() => { + openAlert({ + title: '준비중', + content: ( + <> + Home은 아직 준비하고 있어요!, + + 빨리 만들어 달라고요? 싫어요 (장난) + + , + + ), + }); + // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 if (home == null) { console.log('API 데이터가 없으므로 API 응답을 요청합니다.'); diff --git a/src/utils/api.js b/src/utils/api.js index 6903ffe..0842899 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -21,7 +21,7 @@ async function request(endpoint, method = 'GET', data = null, headers = {}) { // 응답이 성공적이지 않은 경우 오류를 던집니다. if (!response.ok) { - throw new Error(`서버 오류 : ${response.status}`); + throw new Error(`${response.status} ${response.statusText}`); } // 응답 데이터를 JSON으로 반환합니다. diff --git a/src/utils/regex.js b/src/utils/regex.js new file mode 100644 index 0000000..6d36d23 --- /dev/null +++ b/src/utils/regex.js @@ -0,0 +1,7 @@ +/** 정규식 저장소 */ + +// 학번 검사 (숫자가 연속된 10글자인지 확인) +export const STUDENT_ID_REGEX = /\d\d\d\d\d\d\d\d\d\d/i; + +// 기수 검사 (연도.월 인지 확인 => 2024.1) +export const GENERATION_REGEX = /\d\d\d\d\.[1-9]+/i; From 9edf0e9ddf0317c6cb7ba1637dd009a977fac711 Mon Sep 17 00:00:00 2001 From: huisuu Date: Thu, 19 Sep 2024 22:46:51 +0900 Subject: [PATCH 37/97] =?UTF-8?q?fix:=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MyPage.jsx | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index ee80744..ce185ce 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -6,8 +6,6 @@ import { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import axios from 'axios'; -import { Button } from '../components/forms/Button'; - const Container = styled.div` font-family: 'Noto Sans KR', sans-serif; background-color: #0d0e14; @@ -174,7 +172,7 @@ export default function MyPage() { useEffect(() => { const fetchUserData = async () => { try { - const response = await axios.get('/users'); + const response = await axios.get('http://155.230.118.35/users'); setUserInfo({ studentNumber: response.data.student_id, name: response.data.name, @@ -198,7 +196,7 @@ export default function MyPage() { const formData = new FormData(); formData.append('profilePic', file); - axios.post(`/passwords/${userInfo.studentNumber}`, formData) + axios.post('http://155.230.118.35/passwords/${userInfo.studentNumber}', formData) .then(response => { console.log('Image uploaded successfully'); }) @@ -211,13 +209,19 @@ export default function MyPage() { const handleDeleteImage = () => { setImagePreview('../assets/menu/Executive.png'); - axios.delete(`/users/${userInfo.studentNumber}/profile_picture`) - .then(response => { + axios.put(`http://155.230.118.35/users/${userInfo.studentNumber}`, { + name: userInfo.name, + email: userInfo.email, + profile_picture: "", // 빈 문자열로 설정하여 이미지 제거 + generation: userInfo.generation, + major: userInfo.major, + }) + .then(response => { console.log('Image deleted successfully'); - }) - .catch(error => { - console.error('Image deletion failed:', error); - }); + }) + .catch(error => { + console.error('Image deletion failed:', error); + }); }; const onSubmit = async (data) => { @@ -229,11 +233,11 @@ export default function MyPage() { } try { - // 서버로 로그인 정보를 전송 - const response = await axios.post('155.230.118.35', data); + // 서버로 비밀번호 정보를 전송 + const response = await axios.post('http://155.230.118.35/users/${userInfo.studentNumber}', data); console.log('로그인 성공:', response.data); } catch (error) { - // 404 상태 코드가 반환되면 로그인 불일치 처리 + // 404 상태 코드가 반환되면 비밀번호 불일치 처리 if (error.response && error.response.status === 404) { console.error('로그인 정보가 일치하지 않습니다.'); alert('로그인 정보가 일치하지 않습니다. 다시 시도해주세요.'); From 9c0ed7f9320e1fabbda1d1202d880ab37cc2acc8 Mon Sep 17 00:00:00 2001 From: huisuu Date: Thu, 19 Sep 2024 23:07:37 +0900 Subject: [PATCH 38/97] =?UTF-8?q?feat:=20styled-components=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 2 +- src/pages/Login.jsx | 202 +++++++++++++++++++++++++++++++------------ src/pages/MyPage.jsx | 2 +- src/styles/Login.css | 115 ------------------------ 4 files changed, 149 insertions(+), 172 deletions(-) delete mode 100644 src/styles/Login.css diff --git a/src/App.jsx b/src/App.jsx index f054d09..5b4c84b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -39,7 +39,7 @@ export default function App() { } /> } /> } /> - } /> + } /> } /> } /> }> diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 608d31f..15d0257 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -1,72 +1,164 @@ -// Login.jsx -// 코드 작성자 : GiHhub @huisuu - +import { useState } from 'react'; +import styled from 'styled-components'; import { useForm } from 'react-hook-form'; import axios from 'axios'; import { useNavigate, Link } from 'react-router-dom'; -import '../styles/Login.css'; -import '../styles/font.css'; +const Container = styled.div` + background-color: #080f17; + font-family: 'NanumSquare', Helvetica; + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + height: 100vh; + width: 100%; +`; -export default function Login() { - const { - register, - handleSubmit, - formState: { errors }, - } = useForm(); +const LoginContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + position: relative; +`; + +const LoginBox = styled.div` + background-color: #10141c; + padding: 50px; + border-radius: 10px; + width: 450px; +`; + +const LoginHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: flex-start; + position: relative; + padding-bottom: 20px; + + h1 { + margin: 0; + font-size: 20px; + font-weight: 300; + color: #ffffff; + } + + h2 { + margin: 10px 0 20px 0; + font-size: 28px; + font-weight: 700; + color: #ffffff; + } +`; + +const KertLogo = styled.div` + position: absolute; + top: 0; + right: 0; + + img { + width: 80px; + height: 80px; + border-radius: 50%; + } +`; + +const InputGroup = styled.div` + margin-right: 25px; + margin-bottom: 20px; + + label { + display: block; + margin-bottom: 5px; + font-size: 18px; + color: #ffffff; + } + + input { + width: 100%; + padding: 15px; + border: 1px solid #ccc; + border-radius: 5px; + background-color: #1c1f25; + color: white; + } +`; + +const ErrorMessage = styled.p` + color: #ff4d4d; + font-size: 14px; + margin-top: 10px; +`; + +const LoginButton = styled.button` + width: 100%; + padding: 15px; + background-color: #4a90e2; + border: none; + border-radius: 5px; + color: white; + font-size: 20px; + cursor: pointer; + margin-top: 20px; + margin-right: 25px; +`; +const SignupLink = styled.div` + margin-top: 20px; + text-align: center; + font-size: 14px; + color: #ccc; +`; + +export default function Login() { + const { register, handleSubmit, formState: { errors } } = useForm(); const navigate = useNavigate(); + const [error, setError] = useState(''); const onSubmit = async (data) => { try { - // 서버로 로그인 정보를 전송합니다. - const response = await axios.post('155.230.118.35', data); - console.log('Sign up successful:', response.data); - - // 로그인 성공 시 메인 페이지로 이동합니다. + const response = await axios.post('http://155.230.118.35/login', data); + console.log('Login successful:', response.data); + setError(''); navigate('/Mainpage'); } catch (error) { console.error('Error:', error); + setError('로그인에 실패했습니다. 다시 시도해주세요.'); } }; return ( -
-
-
-
-

Login to KERT

-

로그인

-
-
- kert-logo -
-
-
+ + + + +
+

Login to KERT

+

로그인

+
+ + kert-logo + +
- {/* student number */} -
+ - {errors.student && ( -

{errors.student.message}

- )} -
- {/* pw */} -
+ {errors.student && {errors.student.message}} + + + - {errors.password && ( -

{errors.password.message}

- )} -
- + {errors.password && {errors.password.message}} + + + 로그인
-
- 계정이 없으신가요? 회원가입 -
-
-
-
+ + + 계정이 없으신가요? 회원가입 + + + +
); } diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index ce185ce..9da2c9d 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -7,7 +7,7 @@ import { useForm } from 'react-hook-form'; import axios from 'axios'; const Container = styled.div` - font-family: 'Noto Sans KR', sans-serif; + font-family: 'NanumSquare', sans-serif; background-color: #0d0e14; color: #ffffff; margin: 0; diff --git a/src/styles/Login.css b/src/styles/Login.css deleted file mode 100644 index 2d61ff8..0000000 --- a/src/styles/Login.css +++ /dev/null @@ -1,115 +0,0 @@ -/* - Login.jsx - 코드 작성자 : GiHhub @huisuu -*/ - -body { - background-color: #080f17; - font-family: "NanumSquare", Helvetica; - margin: 0; - padding: 0; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - height: 100%; - width: 100%; -} - -.login-container { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 100%; - position: relative; - top: 250px; -} - -.login-box { - background-color: #10141c; - padding: 50px; - border-radius: 10px; - width: 450px; -} - -.login-header { - display: flex; - justify-content: space-between; - align-items: flex-start; - position: relative; - padding-bottom: 20px; -} - -.login-header h1 { - margin: 0; - font-size: 20px; - font-weight: 300; - color: #ffffff; -} - -.login-header h2 { - margin: 10px 0 20px 0; - font-size: 28px; - font-weight: 700; - color: #ffffff; -} - -.login-form .input-group { - margin-right: 25px; - margin-bottom: 20px; -} - -.kert-logo { - position: absolute; - top: 0; - right: 0; -} - -.kert-logo img { - width: 80px; - height: 80px; - border-radius: 50%; -} - -.login-form .input-group label { - display: block; - margin-bottom: 5px; - font-size: 18px; - color: #ffffff; -} - -.login-form .input-group input { - width: 100%; - padding: 15px; - border: 1px solid #ccc; - border-radius: 5px; - background-color: #1c1f25; - color: white; -} - -.error-message { - color: #ff4d4d; - font-size: 14px; - margin-top: 10px; -} - -.login-button { - width: 100%; - padding: 15px; - background-color: #4A90E2; - border: none; - border-radius: 5px; - color: white; - font-size: 20px; - cursor: pointer; - margin-top: 20px; - margin-right: 25px; -} - -.signup-link { - margin-top: 20px; - text-align: center; - font-size: 14px; - color: #ccc; -} \ No newline at end of file From cbbb6a398e3df3851355de956755984902b66bfd Mon Sep 17 00:00:00 2001 From: huisuu Date: Fri, 20 Sep 2024 15:00:11 +0900 Subject: [PATCH 39/97] =?UTF-8?q?fix:=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/navigation/Navigation.jsx | 29 +++++++++++++- src/pages/Login.jsx | 6 +-- src/pages/MyPage.jsx | 51 ++++++++++++++++-------- 3 files changed, 66 insertions(+), 20 deletions(-) diff --git a/src/components/navigation/Navigation.jsx b/src/components/navigation/Navigation.jsx index 810798f..96dc8e6 100644 --- a/src/components/navigation/Navigation.jsx +++ b/src/components/navigation/Navigation.jsx @@ -29,6 +29,11 @@ const Logo = styled.div` height: 30px; `; +const AuthLinks = styled.div` + display: flex; + gap: 20px; +`; + const menu_style = { textDecoration: 'none', color: 'var(--primary-text-color)', @@ -44,6 +49,8 @@ const Menus = styled.div` font-weight: lighter; `; +const isLoggedIn = false; + export const Navigation = () => { const { theme, toggleTheme } = useTheme(); @@ -64,7 +71,27 @@ export const Navigation = () => { 문의 - + + {isLoggedIn ? ( + <> + + 마이페이지 + + + 로그아웃 + + + ) : ( + <> + + 로그인 + + + 회원가입 + + + )} + ); }; diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 15d0257..e8593c8 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -27,7 +27,7 @@ const LoginContainer = styled.div` `; const LoginBox = styled.div` - background-color: #10141c; + background-color: #1b1e27; padding: 50px; border-radius: 10px; width: 450px; @@ -121,8 +121,8 @@ export default function Login() { const onSubmit = async (data) => { try { - const response = await axios.post('http://155.230.118.35/login', data); - console.log('Login successful:', response.data); + const response = await axios.post(`http://155.230.118.35/login`, data); + console.log('서버로 전송:', response.data); setError(''); navigate('/Mainpage'); } catch (error) { diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index 9da2c9d..6b1dedb 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -158,9 +158,12 @@ const WarningMessage = styled.p` export default function MyPage() { const [userInfo, setUserInfo] = useState({ - name: '', studentNumber: '', - profile: null, + name: '', + email: '', + generation: '', + major: '', + profilePic: null, }); const [imagePreview, setImagePreview] = useState(null); @@ -172,11 +175,13 @@ export default function MyPage() { useEffect(() => { const fetchUserData = async () => { try { - const response = await axios.get('http://155.230.118.35/users'); + const response = await axios.get(`http://155.230.118.35/users`); setUserInfo({ studentNumber: response.data.student_id, name: response.data.name, email: response.data.email, + generation: response.data.generation, + major: response.data.major, profilePic: response.data.profile_picture || '../assets/icons/menu/Executive.png', }); setImagePreview(response.data.profile_picture || '../assets/icons/menu/Executive.png'); @@ -191,13 +196,21 @@ export default function MyPage() { const handleImageUpload = (event) => { const file = event.target.files[0]; if (file) { - setImagePreview(URL.createObjectURL(file)); + setImagePreview(URL.createObjectURL(file)); // Update image preview const formData = new FormData(); formData.append('profilePic', file); - axios.post('http://155.230.118.35/passwords/${userInfo.studentNumber}', formData) + axios.post(`http://155.230.118.35/users/${userInfo.studentNumber}`, formData) .then(response => { + setUserInfo({ + studentNumber: response.data.student_id, + name: response.data.name, + email: response.data.email, + generation: response.data.generation, + major: response.data.major, + profilePic: response.data.profile_picture || '../assets/icons/menu/Executive.png', + }); console.log('Image uploaded successfully'); }) .catch(error => { @@ -212,12 +225,20 @@ export default function MyPage() { axios.put(`http://155.230.118.35/users/${userInfo.studentNumber}`, { name: userInfo.name, email: userInfo.email, - profile_picture: "", // 빈 문자열로 설정하여 이미지 제거 generation: userInfo.generation, major: userInfo.major, + profile_picture: "", // 빈 문자열로 설정하여 이미지 제거 }) .then(response => { - console.log('Image deleted successfully'); + setUserInfo({ + studentNumber: response.data.student_id, + name: response.data.name, + email: response.data.email, + generation: response.data.generation, + major: response.data.major, + profilePic: response.data.profile_picture || '../assets/menu/Executive.png', + }); + console.log('Image deleted successfully'); }) .catch(error => { console.error('Image deletion failed:', error); @@ -234,16 +255,16 @@ export default function MyPage() { try { // 서버로 비밀번호 정보를 전송 - const response = await axios.post('http://155.230.118.35/users/${userInfo.studentNumber}', data); - console.log('로그인 성공:', response.data); + const response = await axios.post(`http://155.230.118.35/users/${userInfo.studentNumber}`, data); + console.log('서버로 전송:', response.data); } catch (error) { // 404 상태 코드가 반환되면 비밀번호 불일치 처리 if (error.response && error.response.status === 404) { - console.error('로그인 정보가 일치하지 않습니다.'); - alert('로그인 정보가 일치하지 않습니다. 다시 시도해주세요.'); + console.error('비밀번호 정보가 일치하지 않습니다.'); + alert('비밀번호 정보가 일치하지 않습니다. 다시 시도해주세요.'); } else { console.error('오류 발생:', error); - alert('로그인에 실패했습니다. 다시 시도해주세요.'); + alert('비밀번호 재설정에 실패했습니다. 다시 시도해주세요.'); } } }; @@ -254,7 +275,6 @@ export default function MyPage() { try { await axios.delete(`/users/${userInfo.studentNumber}`); alert("계정이 성공적으로 삭제되었습니다."); - } catch (error) { console.error('계정 삭제 실패:', error); alert("계정 삭제에 실패했습니다. 다시 시도해주세요."); @@ -262,7 +282,6 @@ export default function MyPage() { } }; - return ( @@ -327,8 +346,8 @@ export default function MyPage() { {...register('currentPassword', { required: '현재 비밀번호를 입력해주세요.', pattern: { - value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/, - message: '비밀번호는 숫자, 대문자, 소문자, 특수문자를 포함한 8자 이상이어야 합니다.', + value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/, + message: '비밀번호는 숫자, 대문자, 소문자, 특수문자를 포함한 8자 이상이어야 합니다.', } })} /> From 43f3a08a0dede32f4b645c84c0775df77fce7348 Mon Sep 17 00:00:00 2001 From: huisuu Date: Fri, 20 Sep 2024 15:17:11 +0900 Subject: [PATCH 40/97] =?UTF-8?q?feat:=20onSubmit=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 2 +- src/pages/SignUp.jsx | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 54fc41a..ab87bf6 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -38,7 +38,7 @@ export default function App() { } /> } /> } /> - } /> + } /> } /> }> } /> diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index 383ebd9..9e99209 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -30,7 +30,7 @@ const SignUpContainer = styled.div` `; const SignUpBox = styled.div` - background-color: #10141c; + background-color: #1b1e27; padding: 50px; border-radius: 10px; width: 500px; @@ -119,13 +119,23 @@ export default function SignUp() { const onSubmit = async (data) => { try { - const response = await axios.post('http://155.230.118.35', data); - console.log('Sign up successful:', response.data); + const formData = { + student_id: data.student, + name: data.username, + email: data.mail, + profile_picture: '', + generation: data.generation, + major: data.major, + password: data.password, + }; + + const response = await axios.post('http://155.230.118.35/register', formData); + console.log('서버로 전송:', response.data); + alert('회원가입 요청이 완료되었습니다!'); navigate('/Mainpage'); } catch (error) { console.error('Error:', error); } - alert('회원가입 요청이 완료되었습니다!'); }; return ( @@ -241,7 +251,7 @@ export default function SignUp() { {...register('password', { required: '비밀번호를 입력해주세요.', pattern: { - value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{8}$/, + value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{8,}$/, message: '비밀번호는 숫자, 대문자, 소문자, 특수문자를 포함한 8자 이상이어야 합니다.', }, })} From a91ad5e0758e89ecaf9ce1c5436548c0210f8f03 Mon Sep 17 00:00:00 2001 From: Giwon Date: Fri, 20 Sep 2024 15:32:00 +0900 Subject: [PATCH 41/97] =?UTF-8?q?chore:=20=EC=9E=A1=EC=86=8C=EB=A6=AC=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20/=20svg=20"current"=20=EB=8C=80=EC=9D=91?= =?UTF-8?q?=20/=20useAlert,Confirm,Loading=20index=EB=A1=9C=20=EB=AC=B6?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/empty.svg | 89 ++++++------------- .../display/dashboard/admin/DeleteAdmin.jsx | 5 +- src/pages/dashboard/Home.jsx | 6 +- src/stores/index.js | 3 + 4 files changed, 32 insertions(+), 71 deletions(-) create mode 100644 src/stores/index.js diff --git a/src/assets/empty.svg b/src/assets/empty.svg index 65969c1..114ff25 100644 --- a/src/assets/empty.svg +++ b/src/assets/empty.svg @@ -1,64 +1,29 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/display/dashboard/admin/DeleteAdmin.jsx b/src/components/display/dashboard/admin/DeleteAdmin.jsx index 3e4f248..dada440 100644 --- a/src/components/display/dashboard/admin/DeleteAdmin.jsx +++ b/src/components/display/dashboard/admin/DeleteAdmin.jsx @@ -44,7 +44,6 @@ export const DeleteAdmin = forwardRef(({ admin }, ref) => { admin.student_id, admin.generation, admin.role, - admin.description, ); return ( @@ -72,9 +71,7 @@ export const DeleteAdmin = forwardRef(({ admin }, ref) => { {admin.name != '' ? admin.name : '비어있음'} - 학번 {admin.student_id} -
- 메일 {admin.email} + {admin.role}ㆍ{admin.description}
diff --git a/src/pages/dashboard/Home.jsx b/src/pages/dashboard/Home.jsx index 2847aee..b66c640 100644 --- a/src/pages/dashboard/Home.jsx +++ b/src/pages/dashboard/Home.jsx @@ -168,11 +168,7 @@ export default function Home() { title: '준비중', content: ( <> - Home은 아직 준비하고 있어요!, - - 빨리 만들어 달라고요? 싫어요 (장난) - - , + Home은 아직 준비하고 있어요! ), }); diff --git a/src/stores/index.js b/src/stores/index.js new file mode 100644 index 0000000..77ae5f2 --- /dev/null +++ b/src/stores/index.js @@ -0,0 +1,3 @@ +export { default as useAlert } from './useAlert'; +export { default as useConfirm } from './useConfirm'; +export { default as useLoading } from './useLoading'; From 6007ad924a093b70bd883ff948e745e68973f814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=8C=ED=8C=8C?= Date: Fri, 20 Sep 2024 17:44:52 +0900 Subject: [PATCH 42/97] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=ED=8C=90=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=99=84?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 4 ++-- src/pages/{NewArticle.jsx => NewArticleEditor.jsx} | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) rename src/pages/{NewArticle.jsx => NewArticleEditor.jsx} (96%) diff --git a/src/App.jsx b/src/App.jsx index 503c213..21b2e0c 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -23,7 +23,7 @@ import { import DevDocument from './pages/DevDocument'; import Board from './pages/Board'; import Article from './pages/Article'; -import NewArticle from './pages/NewArticle'; +import NewArticleEditor from './pages/NewArticleEditor'; export default function App() { return ( @@ -35,7 +35,7 @@ export default function App() { } /> } /> - } /> + } /> } /> } /> diff --git a/src/pages/NewArticle.jsx b/src/pages/NewArticleEditor.jsx similarity index 96% rename from src/pages/NewArticle.jsx rename to src/pages/NewArticleEditor.jsx index 98d36e7..fc802af 100644 --- a/src/pages/NewArticle.jsx +++ b/src/pages/NewArticleEditor.jsx @@ -1,5 +1,5 @@ import styled from 'styled-components'; -import { useEffect, useLayoutEffect } from 'react'; +import { useEffect } from 'react'; import useTheme from '../hooks/useTheme'; import { Editor } from '@toast-ui/react-editor'; @@ -49,10 +49,7 @@ const Container = styled.div` export default function NewArticle() { const theme = useTheme(); - console.log(theme); - useEffect(() => { - console.log(theme); const editorEl = document.getElementsByClassName( 'toastui-editor-defaultUI', )[0]; From 9078862e6dc0e21ca76f2134aeb66150690bb282 Mon Sep 17 00:00:00 2001 From: Giwon Date: Fri, 20 Sep 2024 21:15:30 +0900 Subject: [PATCH 43/97] =?UTF-8?q?feat:=20404=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1073 ++++++++++++++++++++++++- package.json | 3 +- src/assets/404.svg | 58 ++ src/assets/kert_logos/Square.svg | 14 + src/components/layouts/MainLayout.jsx | 1 + src/pages/NotFound.jsx | 119 ++- vite.config.js | 9 +- 7 files changed, 1248 insertions(+), 29 deletions(-) create mode 100644 src/assets/404.svg create mode 100644 src/assets/kert_logos/Square.svg diff --git a/package-lock.json b/package-lock.json index 819360a..563ecaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,370 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.3.3", - "vite": "^5.3.4" + "vite": "^5.3.4", + "vite-plugin-svgr": "^4.2.0" + } + }, + "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.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "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.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "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.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@emotion/is-prop-valid": { @@ -506,6 +869,59 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "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/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -562,6 +978,29 @@ "node": ">=14.0.0" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "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/rollup-android-arm-eabi": { "version": "4.19.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz", @@ -752,23 +1191,248 @@ "ia32" ], "dev": true, - "optional": true, - "os": [ - "win32" - ] + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", + "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "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/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", - "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", - "cpu": [ - "x64" - ], + "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, - "optional": true, - "os": [ - "win32" - ] + "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/@swc/core": { "version": "1.7.1", @@ -1280,6 +1944,39 @@ "concat-map": "0.0.1" } }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "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.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1308,6 +2005,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/camelize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", @@ -1316,6 +2026,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001662", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", + "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", + "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", @@ -1367,6 +2098,40 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "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/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1532,6 +2297,47 @@ "node": ">=6.0.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/electron-to-chromium": { + "version": "1.5.26", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.26.tgz", + "integrity": "sha512-Z+OMe9M/V6Ep9n/52+b7lkvYEps26z4Yz3vjWL1V61W0q+VLF1pOHhMY17sa4roz4AWmULSI8E6SAojZA5L0YQ==", + "dev": true, + "license": "ISC" + }, + "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.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -1728,6 +2534,16 @@ "@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", @@ -1982,6 +2798,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", @@ -2170,6 +2993,16 @@ "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.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -2450,6 +3283,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.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -2816,12 +3656,32 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "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", @@ -2834,6 +3694,19 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "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", @@ -2871,6 +3744,13 @@ "node": ">= 0.8.0" } }, + "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", @@ -2903,6 +3783,26 @@ "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", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2963,6 +3863,24 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "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.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "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", @@ -3128,6 +4046,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", @@ -3161,11 +4098,34 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "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.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -3627,6 +4587,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.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -3827,6 +4798,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.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", @@ -3850,6 +4828,16 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -3967,6 +4955,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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.1.2", + "picocolors": "^1.0.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", @@ -4039,6 +5058,21 @@ } } }, + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4148,6 +5182,13 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "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", diff --git a/package.json b/package.json index 615a685..0bddde6 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.3.3", - "vite": "^5.3.4" + "vite": "^5.3.4", + "vite-plugin-svgr": "^4.2.0" } } diff --git a/src/assets/404.svg b/src/assets/404.svg new file mode 100644 index 0000000..0a1f4b8 --- /dev/null +++ b/src/assets/404.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/kert_logos/Square.svg b/src/assets/kert_logos/Square.svg new file mode 100644 index 0000000..a918faf --- /dev/null +++ b/src/assets/kert_logos/Square.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/components/layouts/MainLayout.jsx b/src/components/layouts/MainLayout.jsx index 3e5708e..1e2032c 100644 --- a/src/components/layouts/MainLayout.jsx +++ b/src/components/layouts/MainLayout.jsx @@ -5,6 +5,7 @@ import { Navigation } from '../navigation/Navigation'; export const Main = styled.main` width: 100vw; + height: 100vh; margin: 0px auto; `; diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx index 6bba396..0b66d64 100644 --- a/src/pages/NotFound.jsx +++ b/src/pages/NotFound.jsx @@ -1,14 +1,117 @@ -// 정의되지 않은 페이지를 접속했을 때 보이는 페이지입니다. -import { useEffect } from 'react'; +// 정의되지 않은 페이지를 접속했을 때 보이는 페이지 -import useDashboard from '../stores/dashboard'; +import { useState } from 'react'; +import styled from 'styled-components'; +import { keyframes } from 'styled-components'; + +import { Span } from '../components/typograph/Text'; + +import Square from '../assets/kert_logos/Square.svg?react'; +import NotFoundIcon from '../assets/404.svg?react'; + +const Wrapper = styled.div` + position: relative; + + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + gap: 30px; + + user-select: none; +`; + +const Title = styled(Span).attrs({ + $size: 'sxl', + $weight: 'extrabold', +})` + display: block; + margin-bottom: 8px; +`; + +const Subtitle = styled(Span).attrs({ + $size: 'l', + $color: '--secondary-text-color', +})``; + +const URL = styled(Span).attrs({ + $size: 's', + $color: '--secondary-text-color', +})` + position: absolute; + left: 50%; + bottom: 50px; + transform: translateX(-50%); +`; + +const Background = styled.div` + position: absolute; + width: 100%; + height: 100%; + z-index: -100; + overflow: hidden; + + opacity: 0.5; + + & > svg { + position: absolute; + width: 758px; + height: 758px; + } + + & > svg:first-child { + position: absolute; + left: -258px; + bottom: -136px; + + mask-image: linear-gradient( + 61deg, + rgba(255, 255, 255, 0.3) -100%, + rgba(255, 255, 255, 0) 100% + ); + } + + & > svg:last-child { + position: absolute; + top: calc(-258px + 80px); + right: -136px; + + mask-image: linear-gradient( + 230deg, + rgba(255, 255, 255, 0.3) -100%, + rgba(255, 255, 255, 0) 100% + ); + } +`; export default function NotFound() { - const { notFound } = useDashboard(); + const example = [ + '해킹 시도는 아니시죠?', + 'URL 오타라고 생각할게요', + '보여드릴 내용이 없네요...', + ]; - useEffect(() => { - notFound(); - }, []); + const [message] = useState( + // example에서 랜덤으로 가져옴 + example[Math.floor(Math.random() * example.length)], + ); - return <>찾을 수 없는 페이지; + return ( + + + + + + +
+ 찾을 수 없는 페이지 + {message} +
+ {window.location.href} +
+ ); } diff --git a/vite.config.js b/vite.config.js index 861b04b..3aa997d 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,7 +1,8 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react-swc' +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react-swc'; +import svgr from 'vite-plugin-svgr'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], -}) + plugins: [react(), svgr()], +}); From c4a6826581e1240b871fbdd687792aa7804f36a9 Mon Sep 17 00:00:00 2001 From: Village_Water Date: Sun, 22 Sep 2024 17:32:24 +0900 Subject: [PATCH 44/97] fix: npm ci error resolve --- package-lock.json | 2382 ++++++++++----------------------------------- 1 file changed, 537 insertions(+), 1845 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a3d4b4..a68390c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,8 +33,6 @@ }, "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": { @@ -47,8 +45,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "license": "MIT", "dependencies": { @@ -61,18 +57,14 @@ }, "node_modules/@babel/compat-data": { "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, - "license": "MIT + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "license": "MIT", "dependencies": { @@ -101,12 +93,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz", - "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==", + "version": "7.25.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.4", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -117,8 +108,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "license": "MIT", "dependencies": { @@ -134,8 +123,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "license": "MIT", "dependencies": { @@ -148,8 +135,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "license": "MIT", "dependencies": { @@ -167,8 +152,6 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "license": "MIT", "dependencies": { @@ -181,8 +164,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "license": "MIT", "engines": { @@ -191,8 +172,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "license": "MIT", "engines": { @@ -201,8 +180,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "license": "MIT", "engines": { @@ -210,13 +187,12 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -224,8 +200,6 @@ }, "node_modules/@babel/highlight": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "license": "MIT", "dependencies": { @@ -240,8 +214,6 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -253,8 +225,6 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -268,8 +238,6 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -278,15 +246,11 @@ }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -295,8 +259,6 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -305,8 +267,6 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -317,12 +277,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz", - "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==", + "version": "7.25.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.4" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -332,9 +291,8 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", - "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", + "version": "7.25.6", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -344,8 +302,6 @@ }, "node_modules/@babel/template": { "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -358,17 +314,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz", - "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==", + "version": "7.25.6", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.4", - "@babel/parser": "^7.25.4", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.4", - + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -378,8 +332,6 @@ }, "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": { @@ -388,8 +340,6 @@ }, "node_modules/@babel/types": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "license": "MIT", "dependencies": { @@ -403,1013 +353,242 @@ }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", - "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.8.1" } }, "node_modules/@emotion/memoize": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + "license": "MIT" }, "node_modules/@emotion/unitless": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "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, - "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, - "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, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/android-x64": { + "node_modules/@esbuild/win32-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" + "win32" ], "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" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "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" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "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" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "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" - ], + "node_modules/@eslint/js": { + "version": "8.57.1", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "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" - ], + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=12" + "node": ">=10.10.0" } }, - "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" - ], + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "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" - ], + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "BSD-3-Clause" }, - "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" - ], + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "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" - ], + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "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" - ], + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "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" - ], + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "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" - ], + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "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" - ], + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "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" - ], + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT", "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, - "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, - "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, - "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, - "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, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "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/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" + "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@remix-run/router": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.18.0.tgz", - "integrity": "sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "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/rollup-android-arm-eabi": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz", - "integrity": "sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz", - "integrity": "sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz", - "integrity": "sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz", - "integrity": "sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz", - "integrity": "sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz", - "integrity": "sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz", - "integrity": "sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz", - "integrity": "sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz", - "integrity": "sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz", - "integrity": "sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz", - "integrity": "sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz", - "integrity": "sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz", - "integrity": "sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz", - "integrity": "sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz", - "integrity": "sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", - "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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" + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=14" + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://opencollective.com/unts" } }, - "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==", + "node_modules/@remix-run/router": { + "version": "1.19.2", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", "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" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "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==", + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "1.0.6", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "MIT" }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz", - "integrity": "sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==", + "version": "4.22.4", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1417,8 +596,6 @@ }, "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": { @@ -1434,8 +611,6 @@ }, "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": { @@ -1451,8 +626,6 @@ }, "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": { @@ -1468,8 +641,6 @@ }, "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": { @@ -1485,8 +656,6 @@ }, "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": { @@ -1502,8 +671,6 @@ }, "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": { @@ -1519,8 +686,6 @@ }, "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": { @@ -1536,8 +701,6 @@ }, "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": { @@ -1553,8 +716,6 @@ }, "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": { @@ -1580,8 +741,6 @@ }, "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": { @@ -1601,8 +760,6 @@ }, "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": { @@ -1619,8 +776,6 @@ }, "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": { @@ -1641,11 +796,10 @@ } }, "node_modules/@swc/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.1.tgz", - "integrity": "sha512-M4gxJcvzZCH+QQJGVJDF3kT46C05IUPTFcA1wA65WAdg87MDzpr1mwtB/FmPsdcRFRbJIxET6uCsWgubn+KnJQ==", + "version": "1.7.26", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.12" @@ -1658,16 +812,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.1", - "@swc/core-darwin-x64": "1.7.1", - "@swc/core-linux-arm-gnueabihf": "1.7.1", - "@swc/core-linux-arm64-gnu": "1.7.1", - "@swc/core-linux-arm64-musl": "1.7.1", - "@swc/core-linux-x64-gnu": "1.7.1", - "@swc/core-linux-x64-musl": "1.7.1", - "@swc/core-win32-arm64-msvc": "1.7.1", - "@swc/core-win32-ia32-msvc": "1.7.1", - "@swc/core-win32-x64-msvc": "1.7.1" + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26" }, "peerDependencies": { "@swc/helpers": "*" @@ -1678,158 +832,13 @@ } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.1.tgz", - "integrity": "sha512-CuifMhtBNdIq6sHElOcu8E8SOO0BUlLyRw52wC+aiHrb5gR+iGlbi4L9sUhbR5bWoxD0Bz9ZJcE5uUhcLP+lJQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.1.tgz", - "integrity": "sha512-IKtddGei7qGISSggN9WGmzoyRcLS0enT905K9GPB+7W5k8SxtNP3Yt2TKcKvfF8hzICk986kKt8Fl/QOTXV9mA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.1.tgz", - "integrity": "sha512-GQJydSLM7OVsxcFPJKe22D/h4Vl7FhDsPCTlEaPo+dz7yc2AdoQFJRPSFIRlBz0qm5CxXycDxU9yfH4Omzfxmg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.1.tgz", - "integrity": "sha512-Tp94iklMBAgtvlMVWbp9O+qADhNebS90zG835IucKEQB5rd3fEfWtiLP/3vz4hixJT63+yyeXQYs/Hld3vm7HQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.1.tgz", - "integrity": "sha512-rbauhgFzeXNmg1jPUeiVkEMcoSHP0HvTklUOn1sUc4U0tu73uvPZI2e3TU1fo6sxE6FJeDJHZORatf+pAEo0fQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.1.tgz", - "integrity": "sha512-941tua/RtD/5GxHZOdLiRp/RIloqIlkJKy9ogbdSEI9VJ3Z5x1LznvxHfOI1mTifJMBwNSJLxtL9snUwxwLgEg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.1.tgz", - "integrity": "sha512-Iuh0XnOQcoeDsJvh8eO73fVldMU/ucZs2qBxr/9TkgpiGBdaluKxymo2MBBopmxqfBwxEdHUa0TDLgEFyZK6bw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.1.tgz", - "integrity": "sha512-H7Q44RZvDCPrKit202+NK014eOjd2VcsVxUX7Dk5D55sqgWgWskzGo7PzrosjiFgw5iVmpm4gDeaXCIS0FCE5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.1.tgz", - "integrity": "sha512-zbvjPX2hBu+uCEAvqQBc86yBLtWhRSkh4uLGWUQylCHi1CccRfBww9S4RjXzXxK9bCgZSWbXUmfzJTiFuuhgHQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.1.tgz", - "integrity": "sha512-pVh/IIdKujW8QxNIAI/van8nOB6sb1fi7QMSteSxjOkL0GGDWpx7t3qm1rDboCdS+9iUXEHv+8UJnpya1ko+Dw==", + "version": "1.7.26", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1840,36 +849,31 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", - "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true + "version": "15.7.13", + "devOptional": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "version": "18.3.8", "devOptional": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1877,29 +881,25 @@ }, "node_modules/@types/react-dom": { "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/stylis": { "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", - "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + "license": "MIT" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz", - "integrity": "sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==", "dev": true, + "license": "MIT", "dependencies": { "@swc/core": "^1.5.7" }, @@ -1909,9 +909,8 @@ }, "node_modules/acorn": { "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1921,18 +920,16 @@ }, "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", @@ -1946,18 +943,16 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1970,15 +965,13 @@ }, "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 + "dev": true, + "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -1992,9 +985,8 @@ }, "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", @@ -2012,9 +1004,8 @@ }, "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", @@ -2032,9 +1023,8 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2050,9 +1040,8 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2068,9 +1057,8 @@ }, "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", @@ -2084,9 +1072,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -2106,14 +1093,12 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "license": "MIT" }, "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" }, @@ -2125,9 +1110,8 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.7", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2136,15 +1120,13 @@ }, "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 + "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" @@ -2152,8 +1134,6 @@ }, "node_modules/browserslist": { "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -2185,9 +1165,8 @@ }, "node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2204,18 +1183,15 @@ }, "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/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2226,16 +1202,13 @@ }, "node_modules/camelize": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001662", "dev": true, "funding": [ { @@ -2255,9 +1228,8 @@ }, "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" @@ -2271,9 +1243,8 @@ }, "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" }, @@ -2283,14 +1254,12 @@ }, "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 + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2300,21 +1269,16 @@ }, "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 + "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/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": { @@ -2340,9 +1304,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2354,16 +1317,14 @@ }, "node_modules/css-color-keywords": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/css-to-react-native": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", @@ -2372,14 +1333,12 @@ }, "node_modules/csstype": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "license": "MIT" }, "node_modules/data-view-buffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -2394,9 +1353,8 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -2411,9 +1369,8 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -2427,12 +1384,11 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2445,15 +1401,13 @@ }, "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 + "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", @@ -2468,9 +1422,8 @@ }, "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", @@ -2485,28 +1438,25 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-helpers": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -2514,8 +1464,6 @@ }, "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": { @@ -2524,17 +1472,12 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", - "dev": true + "version": "1.5.27", "dev": true, "license": "ISC" }, "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": { @@ -2546,8 +1489,6 @@ }, "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": { @@ -2556,9 +1497,8 @@ }, "node_modules/es-abstract": { "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -2616,9 +1556,8 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -2628,18 +1567,16 @@ }, "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.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2662,9 +1599,8 @@ }, "node_modules/es-object-atoms": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -2674,9 +1610,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -2688,18 +1623,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==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -2714,10 +1647,9 @@ }, "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" }, @@ -2751,9 +1683,7 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", "dev": true, "license": "MIT", "engines": { @@ -2762,9 +1692,8 @@ }, "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" }, @@ -2773,16 +1702,15 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -2829,8 +1757,6 @@ }, "node_modules/eslint-config-prettier": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", "bin": { @@ -2842,8 +1768,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "license": "MIT", "dependencies": { @@ -2872,10 +1796,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", - "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "version": "7.36.1", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -2905,9 +1828,8 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2916,31 +1838,17 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz", - "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==", + "version": "0.4.12", "dev": true, + "license": "MIT", "peerDependencies": { "eslint": ">=7" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -2954,9 +1862,8 @@ }, "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" }, @@ -2964,11 +1871,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -2983,9 +1900,8 @@ }, "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" }, @@ -2995,9 +1911,8 @@ }, "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" }, @@ -3007,68 +1922,57 @@ }, "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/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", - "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 + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "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 + "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 + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -3078,9 +1982,8 @@ }, "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" @@ -3094,9 +1997,8 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -3108,20 +2010,18 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3133,17 +2033,15 @@ }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3155,38 +2053,21 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "license": "ISC" }, "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.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3202,17 +2083,14 @@ }, "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": { @@ -3221,9 +2099,8 @@ }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -3240,9 +2117,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -3257,10 +2133,8 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3278,9 +2152,8 @@ }, "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" }, @@ -3290,9 +2163,8 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -3305,9 +2177,8 @@ }, "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" @@ -3321,9 +2192,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -3333,33 +2203,29 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "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" }, @@ -3369,9 +2235,8 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3381,9 +2246,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3393,9 +2257,8 @@ }, "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" }, @@ -3408,9 +2271,8 @@ }, "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" }, @@ -3419,19 +2281,17 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3445,19 +2305,16 @@ }, "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/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3465,15 +2322,13 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/internal-slot": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -3485,9 +2340,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -3501,16 +2355,13 @@ }, "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.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3523,9 +2374,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -3535,9 +2385,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3551,9 +2400,8 @@ }, "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" }, @@ -3562,10 +2410,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -3578,9 +2425,8 @@ }, "node_modules/is-data-view": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -3593,9 +2439,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3608,18 +2453,16 @@ }, "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.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -3629,9 +2472,8 @@ }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3644,9 +2486,8 @@ }, "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" }, @@ -3656,9 +2497,8 @@ }, "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" }, @@ -3668,9 +2508,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3680,9 +2519,8 @@ }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3695,18 +2533,16 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3720,9 +2556,8 @@ }, "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" }, @@ -3732,9 +2567,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -3747,9 +2581,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3762,9 +2595,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -3777,9 +2609,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -3792,9 +2623,8 @@ }, "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" }, @@ -3804,9 +2634,8 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -3816,9 +2645,8 @@ }, "node_modules/is-weakset": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -3832,21 +2660,18 @@ }, "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 + "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 + "dev": true, + "license": "ISC" }, "node_modules/iterator.prototype": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -3857,14 +2682,12 @@ }, "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" }, @@ -3874,8 +2697,6 @@ }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "license": "MIT", "bin": { @@ -3887,33 +2708,26 @@ }, "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 + "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", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "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 + "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": { @@ -3925,9 +2739,8 @@ }, "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", @@ -3940,18 +2753,16 @@ }, "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" @@ -3962,16 +2773,13 @@ }, "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", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -3984,14 +2792,12 @@ }, "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 + "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" }, @@ -4001,8 +2807,6 @@ }, "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": { @@ -4011,8 +2815,6 @@ }, "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": { @@ -4021,16 +2823,14 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -4040,9 +2840,8 @@ }, "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" }, @@ -4051,21 +2850,19 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -4075,14 +2872,11 @@ }, "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 + "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": { @@ -4092,24 +2886,20 @@ }, "node_modules/node-releases": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "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==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4119,18 +2909,16 @@ }, "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.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -4146,9 +2934,8 @@ }, "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", @@ -4160,9 +2947,8 @@ }, "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", @@ -4178,9 +2964,8 @@ }, "node_modules/object.values": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4195,18 +2980,16 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "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", @@ -4221,9 +3004,8 @@ }, "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" }, @@ -4236,9 +3018,8 @@ }, "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" }, @@ -4251,9 +3032,8 @@ }, "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" }, @@ -4263,8 +3043,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": { @@ -4282,41 +3060,35 @@ }, "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-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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 + "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": { @@ -4324,14 +3096,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -4343,18 +3112,14 @@ }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", - "dev": true, + "version": "8.4.38", "funding": [ { "type": "opencollective", @@ -4369,9 +3134,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", + "picocolors": "^1.0.0", "source-map-js": "^1.2.0" }, "engines": { @@ -4380,22 +3146,18 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "license": "MIT" }, "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/prettier": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", "bin": { @@ -4410,8 +3172,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -4423,8 +3183,7 @@ }, "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==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -4433,22 +3192,18 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "license": "MIT" }, "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/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -4463,12 +3218,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "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" }, @@ -4478,8 +3233,7 @@ }, "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" @@ -4490,15 +3244,13 @@ }, "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==" + "license": "MIT" }, "node_modules/react-router": { - "version": "6.25.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.25.1.tgz", - "integrity": "sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw==", + "version": "6.26.2", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.18.0" + "@remix-run/router": "1.19.2" }, "engines": { "node": ">=14.0.0" @@ -4508,12 +3260,11 @@ } }, "node_modules/react-router-dom": { - "version": "6.25.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.25.1.tgz", - "integrity": "sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ==", + "version": "6.26.2", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.18.0", - "react-router": "6.25.1" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { "node": ">=14.0.0" @@ -4525,8 +3276,7 @@ }, "node_modules/react-transition-group": { "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -4540,9 +3290,8 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4561,14 +3310,12 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -4584,9 +3331,8 @@ }, "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", @@ -4601,18 +3347,16 @@ }, "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/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -4620,10 +3364,8 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -4635,10 +3377,9 @@ } }, "node_modules/rollup": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz", - "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==", + "version": "4.22.4", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -4650,29 +3391,27 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.19.0", - "@rollup/rollup-android-arm64": "4.19.0", - "@rollup/rollup-darwin-arm64": "4.19.0", - "@rollup/rollup-darwin-x64": "4.19.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.0", - "@rollup/rollup-linux-arm-musleabihf": "4.19.0", - "@rollup/rollup-linux-arm64-gnu": "4.19.0", - "@rollup/rollup-linux-arm64-musl": "4.19.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.0", - "@rollup/rollup-linux-riscv64-gnu": "4.19.0", - "@rollup/rollup-linux-s390x-gnu": "4.19.0", - "@rollup/rollup-linux-x64-gnu": "4.19.0", - "@rollup/rollup-linux-x64-musl": "4.19.0", - "@rollup/rollup-win32-arm64-msvc": "4.19.0", - "@rollup/rollup-win32-ia32-msvc": "4.19.0", - "@rollup/rollup-win32-x64-msvc": "4.19.0", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -4688,15 +3427,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -4712,9 +3451,8 @@ }, "node_modules/safe-regex-test": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4729,26 +3467,23 @@ }, "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", @@ -4763,9 +3498,8 @@ }, "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", @@ -4778,14 +3512,12 @@ }, "node_modules/shallowequal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "license": "MIT" }, "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" }, @@ -4795,18 +3527,16 @@ }, "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.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4822,8 +3552,6 @@ }, "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": { @@ -4832,18 +3560,16 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/string.prototype.matchall": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4867,9 +3593,8 @@ }, "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" @@ -4877,9 +3602,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4895,9 +3619,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4909,9 +3632,8 @@ }, "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", @@ -4926,9 +3648,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4938,9 +3659,8 @@ }, "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" }, @@ -4949,9 +3669,8 @@ } }, "node_modules/styled-components": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.12.tgz", - "integrity": "sha512-n/O4PzRPhbYI0k1vKKayfti3C/IGcPf+DqcrOB7O/ab9x4u/zjqraneT5N45+sIe87cxrCApXM8Bna7NYxwoTA==", + "version": "6.1.13", + "license": "MIT", "dependencies": { "@emotion/is-prop-valid": "1.2.2", "@emotion/unitless": "0.8.1", @@ -4975,43 +3694,18 @@ "react-dom": ">= 16.8.0" } }, - "node_modules/styled-components/node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" }, "node_modules/stylis": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", - "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + "license": "MIT" }, "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" }, @@ -5021,9 +3715,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" }, @@ -5033,15 +3726,11 @@ }, "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.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "license": "MIT", "dependencies": { @@ -5057,14 +3746,11 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "license": "MIT", "engines": { @@ -5072,15 +3758,14 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.7.0", + "dev": true, + "license": "0BSD" }, "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" }, @@ -5090,9 +3775,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5102,9 +3786,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -5116,9 +3799,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -5135,9 +3817,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -5155,9 +3836,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -5175,9 +3855,8 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -5190,8 +3869,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -5221,30 +3898,27 @@ }, "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/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "version": "1.2.2", + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/vite": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", - "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "version": "5.4.7", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.39", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -5263,6 +3937,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -5280,6 +3955,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -5293,8 +3971,6 @@ }, "node_modules/vite-plugin-svgr": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", - "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", "dev": true, "license": "MIT", "dependencies": { @@ -5306,11 +3982,37 @@ "vite": "^2.6.0 || 3 || 4 || 5" } }, + "node_modules/vite/node_modules/postcss": { + "version": "8.4.47", + "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.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "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" }, @@ -5323,9 +4025,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -5338,13 +4039,12 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.1.4", "dev": true, + "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", @@ -5353,8 +4053,8 @@ "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -5365,9 +4065,8 @@ }, "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", @@ -5383,9 +4082,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -5402,31 +4100,26 @@ }, "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/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "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" }, @@ -5435,11 +4128,10 @@ } }, "node_modules/zustand": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.4.tgz", - "integrity": "sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg==", + "version": "4.5.5", + "license": "MIT", "dependencies": { - "use-sync-external-store": "1.2.0" + "use-sync-external-store": "1.2.2" }, "engines": { "node": ">=12.7.0" From b8645da440f4da0dba7eeb2bdaa3c0448a731771 Mon Sep 17 00:00:00 2001 From: Village_Water Date: Sun, 22 Sep 2024 17:35:08 +0900 Subject: [PATCH 45/97] fix: npm build error resolve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @rollup/rollup-linux-x64-gnu 추가 --- package-lock.json | 17 +++++++++++++++++ package.json | 3 +++ 2 files changed, 20 insertions(+) diff --git a/package-lock.json b/package-lock.json index a68390c..673cf65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "fe", "version": "0.0.0", "dependencies": { + "@rollup/rollup-linux-x64-gnu": "*", "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -29,6 +30,9 @@ "prettier": "^3.3.3", "vite": "^5.3.4", "vite-plugin-svgr": "^4.2.0" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.22.4" } }, "node_modules/@ampproject/remapping": { @@ -582,6 +586,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.22.4", "cpu": [ diff --git a/package.json b/package.json index 3168f92..c0c3f27 100644 --- a/package.json +++ b/package.json @@ -32,5 +32,8 @@ "prettier": "^3.3.3", "vite": "^5.3.4", "vite-plugin-svgr": "^4.2.0" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.22.4" } } From d865d6c0ac094d25541627f4a2aecfaffa8a2a8f Mon Sep 17 00:00:00 2001 From: Village_Water Date: Sun, 22 Sep 2024 17:42:35 +0900 Subject: [PATCH 46/97] ci: retry resolve npm build error --- package-lock.json | 152 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + 2 files changed, 148 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 673cf65..3d68806 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "fe", "version": "0.0.0", "dependencies": { - "@rollup/rollup-linux-x64-gnu": "*", + "@swc/core": "^1.7.26", "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -814,7 +814,8 @@ }, "node_modules/@swc/core": { "version": "1.7.26", - "dev": true, + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", + "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -849,12 +850,155 @@ } } }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", + "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", + "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", + "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", + "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", + "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", + "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", + "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", + "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", + "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-win32-x64-msvc": { "version": "1.7.26", "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -866,12 +1010,10 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", - "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.12", - "dev": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" diff --git a/package.json b/package.json index c0c3f27..3f79e7b 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "format": "prettier --write ./src" }, "dependencies": { + "@swc/core": "^1.7.26", "axios": "^1.7.4", "react": "^18.3.1", "react-dom": "^18.3.1", From 21d060043258b0514a74cdde7add5c79be509382 Mon Sep 17 00:00:00 2001 From: huisuu Date: Mon, 23 Sep 2024 10:16:03 +0900 Subject: [PATCH 47/97] =?UTF-8?q?fix:=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/menu/User.png | Bin 0 -> 29442 bytes src/pages/MyPage.jsx | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/assets/icons/menu/User.png diff --git a/src/assets/icons/menu/User.png b/src/assets/icons/menu/User.png new file mode 100644 index 0000000000000000000000000000000000000000..0420c74a838c84ecfb4ed8a4e31129d36415eaea GIT binary patch literal 29442 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%0DF5eoXCE6b!rDvx~96cUgC-69ng+x>&>JT zVwM3aspkS@oypg;-XyCfvMBd)oZr&CW`7X<=Nlwtt=LHfJH$ZCU;)y z*MKGMrKF8hJ}Mt53xd9c znbv9FY1|}$@8H?ov06m4&qra8@|(=` zE=eAYxVAIvdNUt*b5Wf;l$2T*!O{M|DBMrueVF@t8x>&lI`> zPWuytpjkflQ%(jUWeb5k*TAfSC}JU>S533&Ko6-dtz4x9{<83IDtug6kR-*J!Ic83 z;Cgo(K%1b}Dl$q1F;kEoj*f1bS;PfF_NGSy8I%)5EKrmt15tFF>!37uC9hc;f1an* zosG+BZZC0>ZNn5!RWque-=>PJ+YOWg2iI^cnwWJc0kPrz*Gux)=`-y~&qB*#No9PA zL6Yl=RPJm)$cM}U7kpG32Rn;1{H+fgB~8lP{ks4h95Wy@=WxE_T;^hOg3w>Z8ZSc? zIO-?`?UNnjfYa6E&yfWAfRgS7aPW&R!Q++>hOyOzOpge8b=(pe+FYC93&WD!eUC4g z$vC?yp@^%Gg?M}uTjU1Kl-U%H7uNn4c}!si`H>%_zTITGfh(HZwa)XpvBhVQKsP4I zdl40j=EI$K#Bh%QUVc>5HV~>*rVk$)JxHXq`5ol#xsmW#i(|Q_V^I1NjwTuQah5HH zI3lrpp&~iORvxXg8C>WaB;I-ljWga(9$O$rsU%B3XUetbgC_qiOJm6)gy&XyPJG|- zvyKCxl!}2q7Ejo~op$y3d;T*35-^3oG%BTJ9ofl!gJAWbdARI;$WzJiiL^Q&=R^?) zo&o%mX9WhbPaw7w6zsU zaZ>#5-Ocano{%clnOV@xnBm-lW3WnG4%I|!QBI2FMq5&7Ryp7y1a2y%8f!F?)*-}BLNJG(t2HDIQ0qr-g{;9%nHNilkTJ98ZRU6Z;_n#xG|Vf2ZF)GvOZYRRmdO6vUT zmRzCbdpq;pc!-a0l=wHFp(Gar0)twQ^J9Us zdQI$^vd-z7p`1?}HslBz_CMBun7()&vyIfQ3kZTA&3Tit0Ga~s@4E|D`;(S9-e2lC z?NAB`sAOG}er^)Q`?XJmvKC$$^*-wIbxE-QC%3!%#iOk)IWyFUeo_=B?>HaGpt9(? zVP#%eMd-x=0=SJPl**{tF!^^sxW`wCWV0|(d?4?Am$wg~e7OI4O>dCE`2t<1YSQL; z`ATH~c?=CCVeRe1)p)3Cr(*V*Kw0sRWoi&ajOdhe1W^7aMpjN5Z1MfK_yDE!L;{Ws zGOKP&CKy5Sg`%KycP*L&G#LHly(bf^LiVs=We~ z`l=Hw2v?!(84);&>Y5(c9MXFO9K7Ng8?YOR8=Z4D4*8v7Y-5NE(HehMJ3cmUC`@HK zc!mc-cZRd=Ps)>2LrTfHuBD{S@yji5DPLkPbZI1CI0-^$@q?M>ci2_5Ih9NmTx zg10)8f-m@RyDbeqreWq}8Dv(cObDAc;6<1Eej|T1gc{VXm{(zewo!dFEiomn{KMch z2th<}jP?di>mLa^My5XMCA1{~1nJ;;m+ri0Q-w1n$Spk6A>Nbx1>pkvx zIy!(TUKM3B0dO#h>bTu(*}x2pOoDCj+tO#);KYD^!3vgDkT~!#VaSI{s0t9uqGU=a zEs2jiyS41)7y2PswY)HH`tqU@9d*R(__3!{uI(j)uG?wM>HFzjhit%4Gu&@-eZB(B z`p{a^xh6!7uA zExx;cPPegk-OY z7zO2<*vAneHZ?J8T7I}%#z87?-9&HZW*}PrTCnurN6KJl_K*P#)cQWQRaW6f%xLnM z;2=E~s5KDDd}GEYE7{>uM0WZO({bn0IG*_xTk?Z*dzbXfPMjCQ<$>P5LE3b=K|~wo z#!-g^a2mW(OF|s`JEhTn87}~YL z@F-y_zn<)0+WG^b2G`*k#V}j*V3W2INKP7gFFL^gnWhE-39a4-mJIJNPW#v178YSq|ng7VSo>ORG-uavQ!|ELUNb(?YtC(DU#g9Gg# zp5Fu^2rD$hRg1QmUJ`MwhEWG&aBEyqvo<$k`f-~8MLn?ndp>EH{<1^yg; z0_RNbp-cC=$9?)Y8Zy->jZ;sZ%-+IBfOAB5O`n?mGbOvz*u@J5VB2egvlg0~8JjvO z&z=giMCE`bWa1VXGm7&D}Wf^Y%l?<;G+ z2&M#WEcZ;+*mjPE6TrU}Wm;jekvw_BGPqnf7g7HV*OQ1HbnzHpqJ7AggN^F#k2)Xj z+ay;Q;6WzzxfPN!kia_AZGuT20=TjKv?ttJNG@d4ytU_Ke1t(~--5{J$nW#3hu<$I zChmZ^x$$W}$gY(`RV%0G7(`&li>|6UmVtp8Lebq@1$rY4h@*WG<0a2F{xSX0Vdj2l(3gShE2 zLQx8YnJNPGNR_mwZAR-29&iC?CRjcc-kWXGZ2fwaCXE#Jn;|Gr%wPXYi%qD^+ z5lC%DzV!r+W|}3cK?I$H^Bs-VPo>8)1Mw=p*gN$8+|e_^V$;b>3a<%#45#~G8+as7 zQgSl5j^0;+vQ`p8a+9+9T>j4xfdHPNMJz*lrcMqG!u)sin}_?(uS0h{Y$Ovj z=_epf>>l9mashhODc{6(I4Y}P`Q93gYoR_-{Ugu9IZ+nK0TArcmL!MA2__qK1G_?u9x9>| z$JHjs>}};`2<#WM-qq9L*7St9l@Q z7YK^GIUB z-nS_FiQ?v>G$d5kz^jGVE2@3YBnj2slc+m?N z*E8|qIEYYv;jBQIk<$N5`kKhO)1FGQN~)n^#r=4*c}6r)8mt+N6BMPpNX=8jwi)%9 zk=khD@w{jLneIWncfQ!-rk0&$t-t-wFK+U!j5?yQh@cEE>X->681Pth39Y=*Mu(hy zEZ^ZR#n@fmBm>!Zkc#tK?s7kc8+-o{gYZcUt=Er_jh)={((j~@mJGwbYMd9WDRggC zoJ0Wm_s(~6v~z63i=rTi>E}>J=*b1u2q%)3+VfK-jx-N!`b1X&FqCmIq$AmH{()G) z+w!zNkm;tt^d%U|V_@tF2ZW*qHL|hOcg*Lv^sjkJZ!~G->5>H)Fer7n%{uJ!^7FH^ z)iQpFMBn0iB~JztvEm>x%bO3K@S;Fha+VYk5R&*a<4>PQm2r^_Q51OY!gUN$9ac4_ zA0FRO8=E^I$pjTetVGO>g|xux>qKDb3`SAGrprR;$4r4HzlHaP-7{d5Z}t@ZS+JCx zBZ=TB9SeG+Amm)~w^v?;HAxjanxn8p=BCuE{O%*iYkCiU*j;i~c+@{@!a{fY*)KU+ zr2J(O!{laoY6C2*jqT1s?|OQ+p~BRo{A$8YeZ5!oR=z9wkf&=Z+J1kO53aKU(sQnw z-%JkH{ivge(68DFjRa=x>bmegrqUI|^&Dn6DR}Z`;2*(b<721mrgb>R3Ag%s?Wd`h zrBBiMIVujj0zm8Ec8sWPaeUWkma(+oQWK$;DmO~M&E^LBKmiI=zvt)Q z_JyHH#fQpCboWCU>LcS!)QH6)d}n_aFWsu8AO23d_J*+ZO1OJy(o9Qy!`>KH!a6_9 zFk5aiwJsX{%r|jDL}aj2QeY`3)q||2B&<|VBL-W2480ZM$0XQouJj!0{NP{xm?g(6 z)co-JCGQ{LGk^W(KEj}}HClN8<+RYA1umTCspQP=Y^~{t=bct6l=eI5MSoUZ*~<$6 z4zgllr}3o_801v(kK!J@?%+GuQxs2FKXRE1r+%05<)(&FDH)>9z@*x`jlv36KXprC(y;fW+a2MO|&kWow--EymERQ!tDUE}{4CSe*-?<1@R9 zqZN|;Sc%b%cr&Jp_a{;0DHMsc>BK!b-R2&G&;$c`nZSb;j_R+w)RXql zqQ0Fx7VhyZkC)pdy=6ATW3oyoDvlg)wTKvONUNW8E6KVXThwvk{fTe121JSi%FE4? zlk2SMr!#;@&-Yv08EwptmHY8~T7{b7` zTlFW5#;iMJ@+&Kv=^J|t<|hvGk1@Fm4w82s$;g(Blq#hiaF$U=;z( zFfBQu7DEp-$MU-?k|rSsLcdt6f?^XGaunYMUb?KwbgwVAeAqhrq~>&H{pkP1n*RL+ zUSU&7;Jl^)z2YPfU6(K53aHo7YD@DGM@vk=<#Bh;)pYq~5(20NPM0B(N}>CX!8Vap z-uUNqL|YrGg^-C#IAtQ@x=U`|_-(F#gAex>N$+mNc!h}jMy?gbZ~V~_hWG|KJs)WS z4sOmC7x|$Wj~f`GC}FY*XG(n01d%XC_5gLH8W7q=9ys0;(KC}XDO^pCXV=`Rw%z?j z^A;D*`B8t!Fcvs{83VwDTm%ok`0JcT;ee2@c|P<6j@p_R7S`Fvda<}~KzUWJ>VEgd zy+??l!<|v-Co@KBaEih+MPw(K_ojOGLRpcNS9U8+HuHFIkafL_+=P%8Fpo8GB5aO4 zTTBy@rw0f3+AHdoD&w4(-uu3eW4u3bBC^)S64vOdL2mfEz*5g(meY#ay6v(P?nx0RSV}OmMB1MS1*$8yfgoHc z$ruJPTW_XPf!wvzt6fhA5y00vIZ?|qxDy&-VCY|kd&HM5)zo0()nDqQ)#ZPkpS`I0 z!W8e-FzKTJiE}Vppi@-zO=Y@glO}CZAmix1Ndj+!&P9I>%dLQ3XzJ{p1f5IPnDRd8 zozW)HPBVT)2f#=J{6Dqu*sXNmeb*zhZc4MgUrM}9`1>Y1L8ZYN1e@T7Wy#{5nVgKn z`eV~dn0b-skbk65s!rDP7H+R>zs!a_g_fdI9O1R*xmDzo(f82D0 zrIj`y6baOv<*KdOv?2!>*!UReFTYp(umqGGPA-c1^dN(Trn9~OKq0$t9yz>2q}ZHS z6D20E0Q2VXvgY!kYMm?aR+tVAm^pc3u0--HJgQtW^uD-niI0|;3D@&mLC~BW7UY?n zE$l`(7Dxum^+z-UO`j4+gm$tiPMk5;7a!0eBY86G!&{qnaw5Tr@<18-wA2(rjf65O zo&~Y2$6lM6Oqm~Zm2+Y_Cn4hv%AVdBTS-fVRFi70{e2}-t5 zAFO;-(9zL>*bO!!vhg)qPa%Q5(BLmZ=^68!Q;o+9Qay+yaNp{$xHx^Qc_Rf=pK8vR zH(ivz&>-5-kExI>$^qhLx0?wI)3dVz0z8T+3C^FwtD1*(vVznRHn^Ibdv~ed3}fYo zkgMQ?Q{SC$1st$=J%W0Zco1xt>aIwC)=xkcp-Gky^+ouZ9KK3H`+|~@$eN#Ifi&uG zgKB<=dKdm<&ZR%9tccKCHhNLg;HY%`@OVn);enA}b{`FmANtRsf`dFizs0uti=9uG z$hJMP?XHKVn>*>TPN%#k6s`t+vg%yg||qB>2S5Wa3BwbL@qjZL=($f zXL$HV_T}aLxld0sr_o4$qm7f(^>i19L~u|!hhpwn9EMW`zZGF+`9)HVWxwA@i&+CQKy@kF}2>?F4OV7cNNQIXa>|i;X?q$cO`o+b?{jCed!hoCz z8;&5N7%F}C!_=@c;TF+1&EYx+VQxgoe$J3p33sgY+Fmp&a% z0etDr;D8Sk8$Sg&@2e=vIXCxAn=NjH$fEiZZc;zUu*lHS)8hhL8pyBzPLu7TLt(_T zvq;V^Q;rn|$c%2lX=Y7$QutabcnFXU%?R5zIpqp^Lj*PKC-wKR4@-ZB$AdYCrV#e$ zEx0!^anv~|NPIC3^@#(x;qT?tV7CqhLfc9k5Ask$5M)9?E#{k$pjEEV9>9S2?)>Or zGLG~?bq)0dLeos!SL1sugoxqoPPBT4u#UFtiUzd7zzWw8Z67oMuBI8f!UcAIS&OAR zN?Ck6GpMy$l(c{quf4bI-YR&dl7IbDs0elfI3O-VpGL5-Hje481aXZMLTb`n(9`##VuU z$eBLS%%1FCeVl`}Ar@+3pPA`ZBY1ACllB8gO`Lwt<%QQ#-@3-fcQ__GbK*5eNB4fq!Y~&OO1eAP<>o3F05iK zjC*n*^y?>fdGcyRNe&C=E)Pyuw-Ws=^Niksbq)oyd+|Ip*ry^qUK{W6F?blVAb1Y0 zuJCK#b#e;F*g_INF07!TrGnl5op8uw?^w;HYW3SU>7lznqC70{lmxE6tOQ6MrPFN9 zj7y6iE4-YL9Uy0zAVQa?Xa zUu?bp2SQ|xh_HHB`hiTqtLyDY08yQLd)!g8z>cYfWp{Sw#Qb5&_Dmrydhp0%UgS^6 zk(jY^|3%!9__jgan^-9q161O%AwBnv=~c00NjCU!iM`l8=vB`))Z}mVt}ZWv=zdM5 z=`^_~%Oz`!nv99SJ!-7Mce7h0d`f8%2*%(o-hp*oNYA@_usX-2z~WG5Xcz{9$hXZ14F=(%z<-`1}SnM!)Mto!Y;YnxLh?L zqI8iWiQ$(OGGjz&Cz}j4&rEZt*ByTRD|XQ|fQk3VQ!SRuXQ6mVsy-CD^63WMzNfBj zkhgbXdtCwl-%U#P8DQ&qy6RvBt>v^B zBT5tg_*yOhfcvmP;r)E&6X!4a9R=pKKFpH~*}I*4d2qze?zRg(V%OzW@h7gE@K>Xy z51_C1c3od9seI#KiQY0HBpiVYy$c}awjkrHA_Bl+C}>Ze~pLGh>}#-wp^*9??_$d&_BI_ANY1sSL?muQTT1XPJm-`=xGCw%-(@8+v^teiqqL~ z2YxO_l{W5K-np+hE}%T|SblaP5mx`3!|9RC#V10nX_~60lSV%XSblrqFLDPi6lh%M z1V-R`3-b!0-6RO;1t=^=MQM&@a=M)6Y2&!B24X|snx5(05F(6&Pawaha#is-y^-aY zvK!#})@|Tddg?245z#l^Z^V?8MyE(gVddLthJkhEmj0zda=Q2DwbMe6{UdoNw6}i%6Gw# z#imid3LsMoVUj!y`>}o|gQ}T~T3a;rX72R^E86WoW1aHYUOn2*ec5P8XtnD+=Jg~d zaWUYlHtmQ#L~uvri?>(d`bKx4Kham+)PN?@E;pr825ok%@~QWu_`Tmc@XJ$O`wcPd z&+|5tJQ==am3j|9efH(7{NEsD6Ee~g*4r3{v~Q*er8g$2huPu&RV@DOXNC_%)x41B zVfh@odg!dC>_UqH#ocO*xs73qjFPUz5nnT58jtQh>eJ5;%`e26`?1!(pYDt*KBXwp zN3c&_zSz0P6wg)&LrkzM=-XDlEwB!{d291>=-*a|OdpR4U~7cu*t7M*%{(T$do$nz z@`D7pTjm5lUrLr{gBq34scNLSIyr0sFo#_nk`G5cblm|_Ja06ccRY73tMv>bZdZY2 zfe1|{_~qqQeJH!%B_cJsAoQQ)NVD=+CJ|wX3X`FWGc5C!_En9DehK^IipL?xOuBM) znVAKKGGc~fE;qOc>37|K&YZ?bqraQJJlm>;y(u1L`fmFO7`XTj*hDr;Z|2;yjWTP0 z$9&m!aK&34WWA>7F{N&qk9Y6%jgVBlGCO>9t1CFp6GKY9BUxxoL6(7Q{#kJkaQ&tr zaLGa@*6jAmTh$ofwZ(ZU;hqmjZ#H?bP6 z^czrZ+uz*$C4Na?zvd<0t8xGp8)2WEHd{Kt(=w&NGXP8#Wd6OsjM)tE@p%!D^bm`* zyu6<(sqL)4HZ>Hw8}Nc8hL|x?ihdD;|DJ>9joq37>FbUjL!dgJUTpG^FV_1YWzFus z6{TX)luEd|{3_n+u@VnH-G(I&T|8a9$1i)Xq6j;7C!L<)iA{wVsh|I-a+sU4DRXRX zpwL-u$|;wmJPlRNbGMR4kVd>>Y(%#_@Zq z=_GU5XQ<*F$G7kNyJRF7$H#EV2*(#bz|#6q_IS^g7$}!6(rQ$C2kA92N$dAWBQ!4I z6Bo(C;fpFiPTU*;eNqUaswwa4%1Wo-7i_`x!a7(1gpy%!yc@dW!+C)SLR}U_WQGrC0k5PJFSaG ztGdTGIh7^2+k$4X*S0?UkW6H=UUi%<87`U%^y`7xzuXRXeyz6|)|P6`l5_FbklS(w>*i(SY-6ouwX#q@BmDZZpasP;D6*?l`V^VzU^acMThqIG`Etzi)X1sM zejGvY*)}tGljm1-Nme||_=#4={*5GueNEwQS~3K= zyWHVs5K4T3ALU0eLj^zy_rE%(ogVo7%0Ez2TXS{AWScUeR-E1ZCi^Q6f4lHH0eO?2 zLyts59f2M)7P+*QG(2lqz7>Q z{yRI?N-+qgAxhFQAtswSS*wHfd|sgWZLlk^&+b?a}IgF>>1M(OJ{%^X18`T_fHAck5A&6ct6# zk^A(*f*5N1q35{tMqtI}g(0Y#gAv0>oW9DQuu8Y>XT_0)5aL2B8-0nnPgdY?)V=KJ zC4sjqavx9H+}SJRR>g4h%U?7erOnUjr08FtK4g!q%js)`^%~?585NiA#=I@~3rR== zJ#fmq+R2pYz7N2IuL@XSR5J3KgmOOqfGL_HfbjJvr##6Snz-;kJed*bDh9*!*)0O- zit6iKKSU<+^LkO&Z9NG)J*j`N|Jl85f98ecZT?EyVoXH%(oGCDQ)TM8drQ-tcRB`5 zSoJzNugWIJ)qiaSei&s6R^LRUejlxM7i?eFiT;fF6#yfjs`Dc)q0w1HP!+M1@bzh32R=G|j*reuX=hK?m56XV;+Z{mllLxPzwhI-4g@BQo#{smj zKZQbh@^p-3P9PoIhItb4~8_eraL*a~y?DJif zV`RNWbpiaGhS$EhNarU`(3efFBwct<>0$=^Bk>n8WptN}AnjD9GHW>L0Wn`KSDPk9 zfo8A+0FzpE&jx=0iE2F3Ekvp#6Nu*pq1Lar_Dop`DJ|ARftpeL$hqZUrVtmMUOyj! zml@Is{XH^jWzK_j;2LK%bfGE0*`D8yQEjPGF(+$Z3R+)0 zttun@ZDBGR#^N$@38;ZKzP`k~m^GG3+8D~)46@)rmX0wkqDkZFtiT24Y*N)1 z$k!4OI>D5OZw&}hd=z%35%M4@in(hX@}(ZpU$9 z*7O)t>v@f%7Ds-yp%3MfB{{8c-xo&-Cr)6sPnG6)7Fd;mQOaGN9dWP4^H}Cyzd0x)T^Qm( z(2yWFCgjCqgKkbzlc(F`(nSiM^C}8iai~<`H=V3>323Ww4Y`3;qT8u3k@9LIv?0Ni z{F^OF_h4#cu80o#jQl@+o&l&MT77rMfnRkRfG~omj-;$u1G_y_jCIEEDVN|B*B~0(TUUMov z%<xWMDQ`j8Y0d( z%s%Iigvc4EZVx0{_Y=j|(UB(v17qciOt47<8#S8mw!F5J07LOd3nv;y0OT(Sw=neq zzj%Va`~bUeIqpY~rI9ZL(N9Hc-JS%*3D_#jlUc6;gsv}Fe}Kv4C99FvUT!P(zWP=1 z@Xw^qgZa2+|I|@47EYJgJXR!v~?IqWYgpu%q&dP_T-Tc?^V{a!kOK>-i5-Ly7O5gepPYlR%9re<{ec;%bhOQB%>0a?OY znoRzVZ;H>(Oj#g5)ggHlZ5Xr*n~4Y`JfS#ZIs5{^h`vMDdFB50#j^v{+NuGCfCoYj zP`8gJR6p96UOmMIjZ{7}>7F00-pB&5WK8%5X#zWA0NM;ftQTYU z2rTGs+P3Lxd?EYnp>EuAQw(QSP0!5_Lv~z`C9=|722U%sQL^4clIWKr)y?m%Nla(r zU^ayK$5kVD7(Rx3D8(mV#YbM3?~Y>4h8sq8R<7z9+>O#An=$;-Q3i|{fp~^NXt^Hw z+w%@o!q)L4kGNaa&(``Zhavibt=h8+B*Rnox?$=`ACNYB&{s7zobvu*lPpblg4K`i zEz(5==0{M9GpzT`Q@m2auP^6{_j*)_&2y$Fc|HUv*>X&lZ;8biGm!?W_==Cyy*7N- z0C;!)fgs({R%L5OKq1J26g>mqPaOKhEu=ti8!0B(-|&vKe>P!(Z+zNQ<1)*sQ%<-Z zDRckpwwwfSjjsh5{ORpKZ`q``kNS7rX;?z)LCAAb_(+P4ZqSNkKzt1t`J)doCwTwM z|Mo!kYCStB;h1|E<`$sqR$SjUtPsCEzhnT#pK({9gi{(Z!YOk)kA|$~Y;KX^!Hmv> z+sy<=eNdo&TFcP)1S?o25Y`f$TUxQ|(|o^YrJEd}XqTkv&vub|u42 zb9^f@t2dU?9)#YP%6%!w6)N;YKMo2xFZTCJZ`1fh2&$S>NB# zU-_c-cy_Ma=Db2J-l(loJxfibf3|4KLeMRYn(RPa+mhLN%8*0^gtVhm$v+e%2*P4$ zre&96y2f9s3u<;%n0CMa4x>r~5Q>B@>~Tk{40MFywCnQ2XYUP&e0TKj*xPmk_CpVu zfpmk2lNt~v{E}^N)xD`CW^BVb_58xxmNkaTw7sRfE#ew<4x!4Lj`o_*}5~z+V}hfJ`*HVsikYA96e=CPgfz zzejvBUlsDctgm*JSmxsXPY@azGxfN72g#P{ybupoy<`Tdrlex`JU9pj`jR{7W8q=< zIW!fV{qXrW8w4e`v#aac7dT8HHQ6)WX_uD$gpcxtHI9h%<%tk|s}O(?_iGdmG`(_w zIMbJ;KVG4H{>j2}O2cQ(K7D%#RJBZq;0@Oa1N_h!B964}KzPsqgivraUHJ03#Ht8& zU6H>w1bSa@NkY%+ClKirP?j!MI3sxHKA%Zl@7P)(eUH36N^>=t)Adc9YQ)v_;Hfby z0^I{(gq(=rl*y*^DM>DpuI;)pLZi(yNlDixIv1qOD1H$a;1goes$-wl?% zpuT5=Rrw21tvx28KFNoJ zbKGyFM)!3!x|h?2(%A2*#jE&mzkD$jDLsmVb6v>y{YS<;oviN$Ay6(| zTJDLmx96*Ub}wZ=d8Xvgnd}%qkaXIAI+S>?b|x1@Bd&ktsoK21wy6IHLfbiYR_W#7 zq4F9d-nF=uMY-BqtID#YY`@^_;5fc{M!8&(*JD2ITH%bgr)Z0Ro8e5DK>SlRO>w?R z;PCQNWt1XO{xPg}SCAiN)@Pn5^!(;(ul3J%dW7o4!&~FGus9HUPKth?mY*cs0zs{6xsXM+klSeabY9?0R^AU!Ub97>R#>$F z$jZnmvV4R&09SGuGtGK>eLSkuWu+x#B_e9G{8$i$bAE0>JJ!&~AaKFA@Cy|myxcJN zIFCOp@?c)PxsXON#LFX%%Gb}KE?%wtM8;8`AEo@(c3#ZF@86l8YZU(_zVp3Mw&Nht zT|Qo1CjcW{4CDvhY+2e%l1ffseIDF4@+5tX$|YaB=_p5Aq$VOz)p*ZrRMg!W4nnV% zWXx9mD^bY6H>jzK**>M0B0;TaL>`}$i8$EKchrlhwhhSI?PRIQ3$FZ)34R)9+8iWA&T~ zJLJ|L-|{edL125T&G=CFus%aYLzjtkg=$-+aAN94uzU9Xd=5Az+Ll9^=IYnhd_oyx zv~Fd(>HA>G9wWMnUD-zwDF@rcaCGPj%mX-uw%1cd?69`537uJo$9zuQg;*sL58mMo z`d$`I^r%KKpnF|ve;yC^LXKg5zXi(QZH68zw&4`bd_O!6Eg`Ym)Th|QfsHw@nb(-I z-oy<;yZZc?#?rHyE2A_@Rf4n59>CyoIXKAM{be#!eqF0%NbVk&0^7{zLWf1ZjpP;; zm2wc0$>8Y%JN>iauV{dtYi~p^@fBDVF zn^O?_hWq{`mtt_%&RiIt+-k?b>R#*B;F|r_;aAcZi9WCDn-ApX<02_Oy%pTErt+&k z+=O{NGG(}T4^3rY&MZ9AGE~7a{@LlQ`YZ#c`$a|Y?akk1{AXswRbnvAZ@P!iClSHI z2qK#J`{XmjZu3pPiOu?!D|MG(dT8;_N+XXKKpE|CPJ*oE&kmNK!rs&l_UGEC{5~t1 z@8RhkaLsy$hb&URfhw@6iD&YcemzW$kxT@u(e0XTo~XuH+1x!%o{kQp&D4R~g!$$p z=%ETdvTc=RnK#;ly!*5!$(A=43Vu3K-Y87bkt+UG#=RDS-rw0t00pqonKpN;uqoar zvM4cPKfPjED_*LJ2LnCE{&#wfyFd&@lz^1X{L@H@_2~Hnk_kcvYKYiEz@7OU5C7-T zHOd9pza?mIma}YFjcadS1T@$K{`02>dJKHsJ|p&BLW^W}HkrwEWl=ec&@k;p{?{41 zlX&zRu_80xI{>3F7U?%sfRI3Zm=rqk{pCxA^7lO*(G21wL+eb(UOpg$eSZ0CH~y2( zrBrEMj6-Vk8cqrr`k5kBylBe)GF0ha!1!WjmiH$TbkR;WZuB}Bi5ijlSvsZz*i!R6 z&RW++?X@1H2LfDYY9HVXJmOJrT{SXrM0<$3?#<{NkzUfrxu)ZmSYsqS@%1+P8Eh5O42Ril{NE62+7235Kuu=dxJBQ{({;?nt(uB5;Hyi^|e9#0=@a zFFjb`ZU#bBQ+50ZK3#I{8GV`>u@CXZU-*+K^kcYcw%}I}a}dRu2D^fy|7BrSBn}h( z4-lX0Bd3-Zmo>h4%4}1$UQbtPBa=AHg(%lcW!1k*7(X7>qm2Eb5S#^W1}H&)Eh^5n zziGz^+>@zD*J0dG5V~wI^tqHE6XS+R3JZ?L*2s=m8v+~SKXV2?PJFFzN-BIMH5Kq# z;6ZYP!L!T^f~PSAXvv;7Dcqa5IZOSZSFHhnt^BXf6E!^mwZZ}qwn3req#0v*1<%^! zALb6Q<7-IgW7(+pVl0Y+_^pAs3dLVy4#;rLC&hTq{JNDK8keVB1)fONTQJf|gZ zm_ls2Rwz}kVH;1d!<5fF&BBOM(PkMhMDmMirQ%alRNi4&D5tux17jgg8jxNBHN$~v zeNc|3VkagNBnlPzA?Ym2&@E|J$^eFz>hmncXav7Rg%#>W#+>1JkfKp$$&1&nJIX(C z@D|G)KDNb+m6zsKpS!0JL2sO~jzmR25fx7;`!J&7ZB1`c>lS2WwwJ0;*B)`=YTc zh9qkS)}1z`*1Dy$RJ&F$K&?wRzC|zII6WhJXFRGT=8Pr!7Yj~8CoXr?4_}77F0tJ^ zIQsz^7;`nzOvj~#Sr1Gm2Tb0nQ>Zm-LK47|H+_2+VOZY*&9iy8^Fv!=}^ox54BHn7TTinm=WgLlKG?oCJXFs4m@gG|Be;ub2{7Awiy0Z3PFhfOG&BfM!)-@Lh6v2p8l; zd|16NSzu=>g!_E@sr|rHjlU80@fibVDNPlc<=hBqDNq{|Y?YYyt4nWhQ828Z9M}l^ zaHFVeMT`=4(=3o}1goSt&J9PWO*M%Tf$zLh8{uiR?34$kgo%+@*RZU8~|i}T{yj^Pr$RrD zk0Qm|{=FRO&(2%RZW*4WV(ite`eJ*u*a?`%>lwg_J^a;y5zEjA#d@0lbadba zs&jnwzw4DgOJF)+n13;A%byO^a$p3H;23IrPt{6=9sJJqkmL~&YFmMgu0JHe$d0#ov{L{3-BI?PZP48jmM!n&w9a$U zSiN#z@QBFn`Oo%II-1a#Eob}83B{{ehOD6B05i^>u(E`g3K%r>;+a8u48C6el|}xZ2Kgp zB#v#N*-GzY2e@=O@yOrNb zIvdXo4YWOGXzZ>Ty)V@rVBgEXG;zT3Ex0b%&G&gU5ykuNx_Dg)g!jdi? zN|Ojv)nWY)6!Dq`FiF-oKd_RO1*NN(FZA`5ZZ~Ib3ZpvsvRnsTIbvO9Gkr!4_p}Rk z)Frh;!4PhQB|DGsRZ7#Jh531;lWgDZdh4Bx-_2%z8IO25*>!tUh<9c113(J(?a?b- z#3@XpHp)>@#l5Qv8Qb3=CEtp<9X|X@Yl?dSa-c;fE@@cj?^wH7jVp{?@su_TJujEV zJ&b!u+~w6iS!ro^cYD_ALd1HXt}N(xT8xhOt6Xfemm#XM^n4s!H;bK}RRH|NIJzDUtla zkDu3lC?Nqu*@z?=3!CFRfm2o^n z-v+8*Oco7H5xmME8^Sbpl1o-G@cT;3W?_*}&2#2b4f%0;vPnl8Gq1rbM0#Z@U+}Qy zN@ckHg!@^oAm!-3R{#33k*Xkv_3BJzl6AQeSZ4W9%=z>KFn1%onqggv*Xl`>(jQ3i zFtD5{QMsL_Mo6R1G9iw{ib+rdW2@4%&Ksf~U3jVO@2CaE%Q1M+n#2#VUwmfkr1W_d?#30|J+hY};U43YgZE51;N z%f(B*BDo%Sk`?ufzTf>NGncv9)iwix7rTvn{Vow8I!kMGVOF;6yMK*u)W>SbP-PJn z3wfK-1D_PKt|oGQ`Ffb%OU-5DrU4vE=&c0qX-WIx!bYutL?5%KOhkFFKCMcO^WF># zpBe|SWbh1Nj?>e37I*%f=csOEWrLx9A-N3DGdc@G&zm$965c6g{iN+U2J z`Y$RrvjI<1*nkUUm%y|wWkD%zNUcBgBM9B4N22o08OdGqYqGvVLA`%|AdtmPi) zwlI9Js}mCwOkWOLw6w9)gl=HtDCAWYFpshtsrj=*u}B=>fB;vBG;Q|7ezT%tJ7`+< zKZvwFmNko`-PT+x%IhihP5-&1U{Mc7lh8tZ93DcV$gF!>NRf;Y})+nKFBLhv53R z_>Ejrm@Gr@MV)#229%Xq!&G);n-&#sBH-`F#)to(=pW4VtjW^Gzv6ALzG&^H0z^9FCW#ydr#6J+^ zW-(PRo1gK_u;sO4I?|w}y1Y&j;!6&A3p%4&)7Je%*`XZZLFmK+>dD$)b7dS(GIkBo z(GX8M))LSAkQ>5o4Ni;63^zMn#z;`0f^iWesF5~SvDbtA>dbLdU4JQaK$OoDC_ksF z+Z)Ij5T2c#);v;sS4RB4v?@2(riKBbZmUpsa)R>(ZB2-br(+G2;l^eo6=J*O+`r~h zO-vju4bOsfCr(?O=ciwsYb|%@sps{FUmJqc`e%K|2qY;JgE?+et~Z)QR&si~cAtHu zSU)R6TzIwpe3F^@Oh41xWs@a$5cz?)AxAscv{C3g=u4oBd@DzEmKF*OLf?lj$#UwU z>$xT!!@EqY5sgc@91fU4WBY?`^vwfdc%pInj?< zpGlfE?N4l2^c=U7M@Db8oga!^Y#PtlO_6uQ%>W|cV^pn>k}#wBVO1hE?xwuT@*xop z;^C73Qa&wux%U`fP#{>#a91WKkjtv6@8vfaWdlmC1P90osB zQo!(a-tX&K!>13P$r0gjoh}Z?zxo78sy#cFJoEms67`Xl{mcdRG58D0?b&Ih48!Yg z?Re)b5z2vDEw#vwkYk(>wsk|ha4Wb|KUQ;lS|k-`P>6;cUC1LyJ(Fhtv+c=1rQc;T%g zDCd*NckBAF=|F|rT#Ii=wE51(``YvWI(03b+Z_BY5Bk?hT2jO#jXJ%$(M24Rc z{~rO%LFig>z{!F7gmLC~q(nHlCAv^7JU^LDTNexcPWVr6uTz{NK5huu2s>c^I|_4g zlT$ra!}_?wwpR6XC|Dtw2ivSnG5`I2DgvT17iFlJrOAcC+D@@;qwFU WpGzy2uwpOm0Ms69D_1C5h5QeP|H={o literal 0 HcmV?d00001 diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index 6b1dedb..a78fb97 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -201,7 +201,7 @@ export default function MyPage() { const formData = new FormData(); formData.append('profilePic', file); - axios.post(`http://155.230.118.35/users/${userInfo.studentNumber}`, formData) + const response = axios.post(`http://155.230.118.35/users/${userInfo.studentNumber}`, formData) .then(response => { setUserInfo({ studentNumber: response.data.student_id, From 885a68b9d63cd9e25e9420ea4aba3fda9f404688 Mon Sep 17 00:00:00 2001 From: huisuu Date: Mon, 23 Sep 2024 10:28:36 +0900 Subject: [PATCH 48/97] =?UTF-8?q?style:=20user=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/menu/User.png | Bin 0 -> 29442 bytes src/pages/MyPage.jsx | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 src/assets/icons/menu/User.png diff --git a/src/assets/icons/menu/User.png b/src/assets/icons/menu/User.png new file mode 100644 index 0000000000000000000000000000000000000000..0420c74a838c84ecfb4ed8a4e31129d36415eaea GIT binary patch literal 29442 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%0DF5eoXCE6b!rDvx~96cUgC-69ng+x>&>JT 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 WpGzy2uwpOm0Ms69D_1C5h5QeP|H={o literal 0 HcmV?d00001 diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index ce185ce..72a07ba 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -1,13 +1,13 @@ // MyPage.jsx // 코드 작성자 : GiHhub @huisuu -import styled from 'styled-components'; import { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; +import styled from 'styled-components'; +import '../font/main_font.css'; import axios from 'axios'; const Container = styled.div` - font-family: 'Noto Sans KR', sans-serif; background-color: #0d0e14; color: #ffffff; margin: 0; @@ -75,6 +75,7 @@ const PicButtons = styled.div` border: none; border-radius: 8px; cursor: pointer; + font-size: 16px; } `; @@ -177,9 +178,9 @@ export default function MyPage() { studentNumber: response.data.student_id, name: response.data.name, email: response.data.email, - profilePic: response.data.profile_picture || '../assets/icons/menu/Executive.png', + profilePic: response.data.profile_picture || '../assets/icons/menu/User.png', }); - setImagePreview(response.data.profile_picture || '../assets/icons/menu/Executive.png'); + setImagePreview(response.data.profile_picture || '../assets/icons/menu/User.png'); } catch (error) { console.error('Failed to fetch user data:', error); } @@ -207,7 +208,7 @@ export default function MyPage() { }; const handleDeleteImage = () => { - setImagePreview('../assets/menu/Executive.png'); + setImagePreview('../assets/menu/User.png'); axios.put(`http://155.230.118.35/users/${userInfo.studentNumber}`, { name: userInfo.name, @@ -262,7 +263,6 @@ export default function MyPage() { } }; - return ( @@ -327,8 +327,8 @@ export default function MyPage() { {...register('currentPassword', { required: '현재 비밀번호를 입력해주세요.', pattern: { - value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/, - message: '비밀번호는 숫자, 대문자, 소문자, 특수문자를 포함한 8자 이상이어야 합니다.', + value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/, + message: '비밀번호는 숫자, 대문자, 소문자, 특수문자를 포함한 8자 이상이어야 합니다.', } })} /> From fe054982d42e99da3dcec2bec736f911181eaf98 Mon Sep 17 00:00:00 2001 From: huisuu Date: Tue, 24 Sep 2024 12:33:09 +0900 Subject: [PATCH 49/97] =?UTF-8?q?chore:=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/navigation/Navigation.jsx | 2 +- src/pages/Login.jsx | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/navigation/Navigation.jsx b/src/components/navigation/Navigation.jsx index 96dc8e6..d053f17 100644 --- a/src/components/navigation/Navigation.jsx +++ b/src/components/navigation/Navigation.jsx @@ -77,7 +77,7 @@ export const Navigation = () => { 마이페이지 - + 로그아웃 diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index e8593c8..1100706 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -1,12 +1,15 @@ +// Login.jsx +// 코드 작성자 : GiHhub @huisuu + import { useState } from 'react'; -import styled from 'styled-components'; import { useForm } from 'react-hook-form'; import axios from 'axios'; import { useNavigate, Link } from 'react-router-dom'; +import styled from 'styled-components'; +import '../styles/font.css'; const Container = styled.div` background-color: #080f17; - font-family: 'NanumSquare', Helvetica; margin: 0; padding: 0; display: flex; @@ -121,10 +124,10 @@ export default function Login() { const onSubmit = async (data) => { try { - const response = await axios.post(`http://155.230.118.35/login`, data); - console.log('서버로 전송:', response.data); + // const response = await axios.post(`/login`, data); + // console.log('서버로 전송:', response.data); setError(''); - navigate('/Mainpage'); + navigate('/'); } catch (error) { console.error('Error:', error); setError('로그인에 실패했습니다. 다시 시도해주세요.'); From 49314c9e64345f4a412423336d24bd7c348be281 Mon Sep 17 00:00:00 2001 From: huisuu Date: Tue, 24 Sep 2024 12:38:34 +0900 Subject: [PATCH 50/97] =?UTF-8?q?style:=20container,=20button=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EB=B0=8F=20=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MyPage.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index 72a07ba..b3e15e6 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -11,14 +11,14 @@ const Container = styled.div` background-color: #0d0e14; color: #ffffff; margin: 0; - padding-top: 60px; + padding-top: 100px; display: flex; justify-content: center; `; const MyPageContainer = styled.div` width: 100%; - max-width: 1200px; + max-width: 1000px; margin: 0 auto; padding: 50px; `; @@ -148,7 +148,7 @@ const EditButton = styled.button` border-radius: 10px; cursor: pointer; width: 200px; - margin-left: 940px; + margin-left: 740px; `; const WarningMessage = styled.p` From cecd9ba5645cdb349983d1c6f847ad4e4e8acee7 Mon Sep 17 00:00:00 2001 From: Yeonwoo Sea <62321953+Village-GG-Water@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:09:03 +0900 Subject: [PATCH 51/97] fix: resolve package-lock.json conflict (#39) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: resolve package-lock.json conflict 통합 후 npm 10.8.2로 install 다시 함 * fix: add @swc/core swc/core missing 문제 --- package-lock.json | 133 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 70 insertions(+), 65 deletions(-) diff --git a/package-lock.json b/package-lock.json index 871b10c..3f8a19c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,10 @@ "name": "fe", "version": "0.0.0", "dependencies": { + "@swc/core": "^1.7.28", "@toast-ui/editor-plugin-code-syntax-highlight": "^3.1.0", "@toast-ui/editor-plugin-color-syntax": "^3.1.0", "@toast-ui/react-editor": "^3.2.3", - "@swc/core": "^1.7.26", "axios": "^1.7.4", "prismjs": "^1.29.0", "react": "^18.3.1", @@ -301,6 +301,8 @@ }, "node_modules/@babel/runtime": { "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -818,9 +820,9 @@ } }, "node_modules/@swc/core": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", - "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.28.tgz", + "integrity": "sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -835,16 +837,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.26", - "@swc/core-darwin-x64": "1.7.26", - "@swc/core-linux-arm-gnueabihf": "1.7.26", - "@swc/core-linux-arm64-gnu": "1.7.26", - "@swc/core-linux-arm64-musl": "1.7.26", - "@swc/core-linux-x64-gnu": "1.7.26", - "@swc/core-linux-x64-musl": "1.7.26", - "@swc/core-win32-arm64-msvc": "1.7.26", - "@swc/core-win32-ia32-msvc": "1.7.26", - "@swc/core-win32-x64-msvc": "1.7.26" + "@swc/core-darwin-arm64": "1.7.28", + "@swc/core-darwin-x64": "1.7.28", + "@swc/core-linux-arm-gnueabihf": "1.7.28", + "@swc/core-linux-arm64-gnu": "1.7.28", + "@swc/core-linux-arm64-musl": "1.7.28", + "@swc/core-linux-x64-gnu": "1.7.28", + "@swc/core-linux-x64-musl": "1.7.28", + "@swc/core-win32-arm64-msvc": "1.7.28", + "@swc/core-win32-ia32-msvc": "1.7.28", + "@swc/core-win32-x64-msvc": "1.7.28" }, "peerDependencies": { "@swc/helpers": "*" @@ -856,9 +858,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", - "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.28.tgz", + "integrity": "sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==", "cpu": [ "arm64" ], @@ -872,9 +874,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", - "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.28.tgz", + "integrity": "sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==", "cpu": [ "x64" ], @@ -888,9 +890,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", - "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.28.tgz", + "integrity": "sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==", "cpu": [ "arm" ], @@ -904,9 +906,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", - "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.28.tgz", + "integrity": "sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==", "cpu": [ "arm64" ], @@ -920,9 +922,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", - "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.28.tgz", + "integrity": "sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==", "cpu": [ "arm64" ], @@ -936,9 +938,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", - "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.28.tgz", + "integrity": "sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==", "cpu": [ "x64" ], @@ -952,9 +954,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", - "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.28.tgz", + "integrity": "sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==", "cpu": [ "x64" ], @@ -968,9 +970,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", - "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.28.tgz", + "integrity": "sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==", "cpu": [ "arm64" ], @@ -984,9 +986,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", - "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.28.tgz", + "integrity": "sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==", "cpu": [ "ia32" ], @@ -1000,7 +1002,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.26", + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.28.tgz", + "integrity": "sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==", "cpu": [ "x64" ], @@ -1076,16 +1080,14 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true + "version": "15.7.13", + "dev": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dev": true + "version": "18.3.8", + "dev": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1668,19 +1670,20 @@ }, "node_modules/dom-helpers": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, - "node_modules/dompurify": { "version": "2.5.6", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", "license": "(MPL-2.0 OR Apache-2.0)" - + }, "node_modules/dot-case": { "version": "3.0.4", "dev": true, @@ -1713,7 +1716,6 @@ "dependencies": { "is-arrayish": "^0.2.1" } - }, "node_modules/es-abstract": { "version": "1.23.3", @@ -3498,9 +3500,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.34.2", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.2.tgz", - "integrity": "sha512-tPX/V2Xd70vrAGQ/V9CppJtPKnQyQMypJGlLylvdI94k6JaG+4P6fVmXPR1zc1eVTW0gq3c6zsfqwJKCRLaG9Q==", + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", + "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", @@ -3564,6 +3566,7 @@ "version": "7.53.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -3609,6 +3612,8 @@ }, "node_modules/react-transition-group": { "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", @@ -3643,6 +3648,8 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, "node_modules/regexp.prototype.flags": { @@ -4314,13 +4321,6 @@ } } }, - - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "license": "MIT" - "node_modules/vite-plugin-svgr": { "version": "4.2.0", "dev": true, @@ -4333,7 +4333,6 @@ "peerDependencies": { "vite": "^2.6.0 || 3 || 4 || 5" } - }, "node_modules/vite/node_modules/postcss": { "version": "8.4.47", @@ -4362,6 +4361,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, "node_modules/which": { "version": "2.0.2", "dev": true, diff --git a/package.json b/package.json index 43c1c88..4485088 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "format": "prettier --write ./src" }, "dependencies": { + "@swc/core": "^1.7.28", "@toast-ui/editor-plugin-code-syntax-highlight": "^3.1.0", "@toast-ui/editor-plugin-color-syntax": "^3.1.0", "@toast-ui/react-editor": "^3.2.3", - "@swc/core": "^1.7.26", "axios": "^1.7.4", "prismjs": "^1.29.0", "react": "^18.3.1", From f73ae403b9f24ac397d50c5f16283d09c09d5889 Mon Sep 17 00:00:00 2001 From: huisuu Date: Wed, 25 Sep 2024 16:29:34 +0900 Subject: [PATCH 52/97] fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js --- package-lock.json | 5778 ++++++++++++++++++++++++++------------------- package.json | 2 + 2 files changed, 3319 insertions(+), 2461 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f8a19c..b8aa53d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.5.0", + "esbuild": "^0.24.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -37,6 +38,7 @@ "vite-plugin-svgr": "^4.2.0" }, "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "^4.22.4", "@rollup/rollup-linux-x64-gnu": "^4.22.4" } }, @@ -377,237 +379,299 @@ "version": "0.8.1", "license": "MIT" }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=18" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "node": ">=18" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=18" } }, - "node_modules/@remix-run/router": { - "version": "1.19.2", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.0.0" + "node": ">=18" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -615,618 +679,1292 @@ "license": "MIT", "optional": true, "os": [ - "win32" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=14" + "dependencies": { + "eslint-visitor-keys": "^3.3.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "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" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@svgr/core": { - "version": "8.1.0", + "node_modules/@eslint/js": { + "version": "8.57.1", "dev": true, "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "license": "Apache-2.0", "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" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=14" + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/gregberge" + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=6.0.0" } }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "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": ">=6.0.0" } }, - "node_modules/@swc/core": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.28.tgz", - "integrity": "sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==", - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.12" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=10" + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@remix-run/router": { + "version": "1.19.2", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.28", - "@swc/core-darwin-x64": "1.7.28", - "@swc/core-linux-arm-gnueabihf": "1.7.28", - "@swc/core-linux-arm64-gnu": "1.7.28", - "@swc/core-linux-arm64-musl": "1.7.28", - "@swc/core-linux-x64-gnu": "1.7.28", - "@swc/core-linux-x64-musl": "1.7.28", - "@swc/core-win32-arm64-msvc": "1.7.28", - "@swc/core-win32-ia32-msvc": "1.7.28", - "@swc/core-win32-x64-msvc": "1.7.28" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@swc/helpers": "*" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@swc/helpers": { + "rollup": { "optional": true } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.28.tgz", - "integrity": "sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==", + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], - "license": "Apache-2.0 AND MIT", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">=10" - } + ] }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.28.tgz", - "integrity": "sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], - "license": "Apache-2.0 AND MIT", + "license": "MIT", "optional": true, "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } + "linux" + ] }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.28.tgz", - "integrity": "sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.22.4", "cpu": [ - "arm" + "x64" ], - "license": "Apache-2.0", + "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" - ], + "win32" + ] + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.28.tgz", - "integrity": "sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.28.tgz", - "integrity": "sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.28.tgz", - "integrity": "sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.28.tgz", - "integrity": "sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.28.tgz", - "integrity": "sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.28.tgz", - "integrity": "sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.28.tgz", - "integrity": "sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "license": "Apache-2.0" - }, - "node_modules/@swc/types": { - "version": "0.1.12", - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@toast-ui/editor": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@toast-ui/editor/-/editor-3.2.2.tgz", - "integrity": "sha512-ASX7LFjN2ZYQJrwmkUajPs7DRr9FsM1+RQ82CfTO0Y5ZXorBk1VZS4C2Dpxinx9kl55V4F8/A2h2QF4QMDtRbA==", - "license": "MIT", - "dependencies": { - "dompurify": "^2.3.3", - "prosemirror-commands": "^1.1.9", - "prosemirror-history": "^1.1.3", - "prosemirror-inputrules": "^1.1.3", - "prosemirror-keymap": "^1.1.4", - "prosemirror-model": "^1.14.1", - "prosemirror-state": "^1.3.4", - "prosemirror-view": "^1.18.7" - } - }, - "node_modules/@toast-ui/editor-plugin-code-syntax-highlight": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-code-syntax-highlight/-/editor-plugin-code-syntax-highlight-3.1.0.tgz", - "integrity": "sha512-OgX5pZiTnHREoTTXDAFu1k6RzEspGOxeJNRlt/Lnoi1GvLbIpUTTbBcls9becpXT/Qdls++8G3r5C60cVdellA==", - "license": "MIT", - "dependencies": { - "prismjs": "^1.23.0" - } - }, - "node_modules/@toast-ui/editor-plugin-color-syntax": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-color-syntax/-/editor-plugin-color-syntax-3.1.0.tgz", - "integrity": "sha512-UVKfMBPV+3snSaJn9RUKGbxJbgi92D2t68ow8wAjGezvMp1ht4UVETrvomdTGr+RYhXSeH3JvSwN9nmQqw0qzA==", - "license": "MIT", - "dependencies": { - "tui-color-picker": "^2.2.6" - } - }, - "node_modules/@toast-ui/react-editor": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@toast-ui/react-editor/-/react-editor-3.2.3.tgz", - "integrity": "sha512-86QdgiOkBeSwRBEUWRKsTpnm6yu5j9HNJ3EfQN8EGcd7kI8k8AhExXyUJ3NNgNTzN7FfSKMw+1VaCDDC+aZ3dw==", + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "@toast-ui/editor": "^3.2.2" + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "react": "^17.0.1" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/stylis": { - "version": "4.2.5", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "3.7.0", + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@swc/core": "^1.5.7" + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "vite": "^4 || ^5" + "@babel/core": "^7.0.0-0" } }, - "node_modules/acorn": { - "version": "8.12.1", + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "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": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/ajv": { - "version": "6.12.6", + "node_modules/@svgr/core": { + "version": "8.1.0", "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" + "@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/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@babel/types": "^7.21.3", + "entities": "^4.4.0" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "@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": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" } }, - "node_modules/array-includes": { - "version": "3.1.8", - "dev": true, - "license": "MIT", + "node_modules/@swc/core": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.28.tgz", + "integrity": "sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==", + "hasInstallScript": true, + "license": "Apache-2.0", "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" + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.12" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.7.28", + "@swc/core-darwin-x64": "1.7.28", + "@swc/core-linux-arm-gnueabihf": "1.7.28", + "@swc/core-linux-arm64-gnu": "1.7.28", + "@swc/core-linux-arm64-musl": "1.7.28", + "@swc/core-linux-x64-gnu": "1.7.28", + "@swc/core-linux-x64-musl": "1.7.28", + "@swc/core-win32-arm64-msvc": "1.7.28", + "@swc/core-win32-ia32-msvc": "1.7.28", + "@swc/core-win32-x64-msvc": "1.7.28" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.28.tgz", + "integrity": "sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.28.tgz", + "integrity": "sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.28.tgz", + "integrity": "sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.28.tgz", + "integrity": "sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.28.tgz", + "integrity": "sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.28.tgz", + "integrity": "sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.28.tgz", + "integrity": "sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.28.tgz", + "integrity": "sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.28.tgz", + "integrity": "sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.28.tgz", + "integrity": "sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.12", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@toast-ui/editor": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@toast-ui/editor/-/editor-3.2.2.tgz", + "integrity": "sha512-ASX7LFjN2ZYQJrwmkUajPs7DRr9FsM1+RQ82CfTO0Y5ZXorBk1VZS4C2Dpxinx9kl55V4F8/A2h2QF4QMDtRbA==", + "license": "MIT", + "dependencies": { + "dompurify": "^2.3.3", + "prosemirror-commands": "^1.1.9", + "prosemirror-history": "^1.1.3", + "prosemirror-inputrules": "^1.1.3", + "prosemirror-keymap": "^1.1.4", + "prosemirror-model": "^1.14.1", + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.18.7" + } + }, + "node_modules/@toast-ui/editor-plugin-code-syntax-highlight": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-code-syntax-highlight/-/editor-plugin-code-syntax-highlight-3.1.0.tgz", + "integrity": "sha512-OgX5pZiTnHREoTTXDAFu1k6RzEspGOxeJNRlt/Lnoi1GvLbIpUTTbBcls9becpXT/Qdls++8G3r5C60cVdellA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.23.0" + } + }, + "node_modules/@toast-ui/editor-plugin-color-syntax": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-color-syntax/-/editor-plugin-color-syntax-3.1.0.tgz", + "integrity": "sha512-UVKfMBPV+3snSaJn9RUKGbxJbgi92D2t68ow8wAjGezvMp1ht4UVETrvomdTGr+RYhXSeH3JvSwN9nmQqw0qzA==", + "license": "MIT", + "dependencies": { + "tui-color-picker": "^2.2.6" + } + }, + "node_modules/@toast-ui/react-editor": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@toast-ui/react-editor/-/react-editor-3.2.3.tgz", + "integrity": "sha512-86QdgiOkBeSwRBEUWRKsTpnm6yu5j9HNJ3EfQN8EGcd7kI8k8AhExXyUJ3NNgNTzN7FfSKMw+1VaCDDC+aZ3dw==", + "license": "MIT", + "dependencies": { + "@toast-ui/editor": "^3.2.2" + }, + "peerDependencies": { + "react": "^17.0.1" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/core": "^1.5.7" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "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-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "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", + "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.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "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.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "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/axios": { + "version": "1.7.7", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "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.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001662", + "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", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", + "node_modules/cosmiconfig": { + "version": "8.3.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "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/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1235,15 +1973,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", + "node_modules/data-view-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1252,15 +1989,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1269,34 +2005,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", + "node_modules/debug": { + "version": "4.3.7", "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" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1305,16 +2042,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -1323,70 +2058,124 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.7.7", + "node_modules/delayed-stream": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", + "node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "node_modules/browserslist": { - "version": "4.23.3", + "node_modules/dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, + "node_modules/dot-case": { + "version": "3.0.4", "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.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.27", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/call-bind": { - "version": "1.0.7", + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", "dev": true, "license": "MIT", "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1395,470 +2184,543 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/es-define-property": { + "version": "1.0.0", "dev": true, "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/camelcase": { - "version": "6.3.0", + "node_modules/es-errors": { + "version": "1.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelize": { - "version": "1.0.1", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.4" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001662", - "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", + "node_modules/es-iterator-helpers": { + "version": "1.0.19", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/color-convert": { - "version": "2.0.1", + "node_modules/es-object-atoms": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/color-name": { - "version": "1.1.4", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", + "node_modules/es-to-primitive": { + "version": "1.2.1", "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" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">= 8" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "license": "ISC", + "node_modules/escalade": { + "version": "3.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/css-to-react-native": { - "version": "3.2.0", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/csstype": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", + "node_modules/eslint": { + "version": "8.57.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", + "node_modules/eslint-plugin-react": { + "version": "7.36.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/debug": { - "version": "4.3.7", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/deep-is": { - "version": "0.1.4", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.12", "dev": true, - "license": "MIT" + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } }, - "node_modules/define-data-property": { - "version": "1.1.4", + "node_modules/eslint-scope": { + "version": "7.2.2", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/define-properties": { - "version": "1.2.1", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/doctrine": { - "version": "2.1.0", + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dompurify": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", - "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", - "license": "(MPL-2.0 OR Apache-2.0)" - }, - "node_modules/dot-case": { - "version": "3.0.4", + "node_modules/esquery": { + "version": "1.6.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.27", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "license": "ISC" + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } }, - "node_modules/entities": { - "version": "4.5.0", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=4.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/estree-walker": { + "version": "2.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/es-abstract": { - "version": "1.23.3", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 0.4" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.0", + "node_modules/flat-cache": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", + "node_modules/flatted": { + "version": "3.3.1", "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", + "node_modules/for-each": { + "version": "0.3.3", "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-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "is-callable": "^1.1.3" } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "dev": true, + "node_modules/form-data": { + "version": "4.0.0", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "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", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", + "node_modules/function-bind": { + "version": "1.1.2", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/function.prototype.name": { + "version": "1.1.6", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -1867,434 +2729,368 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { - "version": "0.21.5", + "node_modules/functions-have-names": { + "version": "1.2.3", "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" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { - "version": "3.2.0", + "node_modules/gensync": { + "version": "1.0.0-beta.2", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=6.9.0" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/get-intrinsic": { + "version": "1.2.4", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "8.57.1", + "node_modules/get-symbol-description": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", + "node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", + "node_modules/globals": { + "version": "13.24.0", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "type-fest": "^0.20.2" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react": { - "version": "7.36.1", + "node_modules/globalthis": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", + "node_modules/gopd": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "get-intrinsic": "^1.1.3" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.12", + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/has-proto": { + "version": "1.0.3", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", + "node_modules/has-symbols": { + "version": "1.0.3", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/has-tostringtag": { + "version": "1.0.2", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.6.0", + "node_modules/hasown": { + "version": "2.0.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/ignore": { + "version": "5.3.2", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 4" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/imurmurhash": { + "version": "0.1.4", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.19" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/inflight": { + "version": "1.0.6", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/inherits": { + "version": "2.0.4", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/fastq": { - "version": "1.17.1", + "node_modules/internal-slot": { + "version": "1.0.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/is-array-buffer": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "3.2.0", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "has-bigints": "^1.0.1" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flatted": { - "version": "3.3.1", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/is-callable": { + "version": "1.2.7", "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "4.0.0", + "node_modules/is-core-module": { + "version": "2.15.1", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "hasown": "^2.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", + "node_modules/is-data-view": { + "version": "1.0.1", "dev": true, "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2303,32 +3099,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", + "node_modules/is-generator-function": { + "version": "1.0.10", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2337,15 +3132,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", + "node_modules/is-glob": { + "version": "4.0.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "is-extglob": "^2.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2353,57 +3154,46 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/is-negative-zero": { + "version": "2.0.3", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/is-number-object": { + "version": "1.0.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globals": { - "version": "13.24.0", + "node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2412,53 +3202,66 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/is-set": { + "version": "2.0.3", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", + "node_modules/is-typed-array": { + "version": "1.1.13", "dev": true, "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, "engines": { "node": ">= 0.4" }, @@ -2466,8 +3269,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/is-weakmap": { + "version": "2.0.2", "dev": true, "license": "MIT", "engines": { @@ -2477,248 +3280,272 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { + "node_modules/is-weakref": { "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.2", + "node_modules/is-weakset": { + "version": "2.0.3", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore": { - "version": "5.3.2", + "node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/jsesc": { + "version": "2.5.2", "dev": true, "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=0.8.19" + "node": ">=4" } }, - "node_modules/inflight": { - "version": "1.0.6", + "node_modules/json-buffer": { + "version": "3.0.1", "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } + "license": "MIT" }, - "node_modules/inherits": { - "version": "2.0.4", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/internal-slot": { - "version": "1.0.7", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", + "node_modules/jsx-ast-utils": { + "version": "3.3.5", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.0.0", + "node_modules/keyv": { + "version": "4.5.4", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "json-buffer": "3.0.1" } }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/levn": { + "version": "0.4.1", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/lodash.merge": { + "version": "4.6.2", "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/is-core-module": { - "version": "2.15.1", + "node_modules/lower-case": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "tslib": "^2.0.3" } }, - "node_modules/is-data-view": { - "version": "1.0.1", + "node_modules/lru-cache": { + "version": "5.1.1", "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "dependencies": { - "is-typed-array": "^1.1.13" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-tostringtag": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/ms": { + "version": "2.1.3", "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "node_modules/natural-compare": { + "version": "1.4.0", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/is-generator-function": { - "version": "1.0.10", + "node_modules/no-case": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/node-releases": { + "version": "2.0.18", "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-map": { - "version": "2.0.3", + "node_modules/object-inspect": { + "version": "1.13.2", "dev": true, "license": "MIT", "engines": { @@ -2728,23 +3555,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/object.assign": { + "version": "4.1.5", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -2753,33 +3580,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/object.entries": { + "version": "1.1.8", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "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/is-set": { - "version": "2.0.3", + "node_modules/object.fromentries": { + "version": "2.0.8", "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" }, @@ -2787,12 +3610,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", + "node_modules/object.values": { + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2801,867 +3626,869 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/once": { + "version": "1.4.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "wrappy": "1" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/optionator": { + "version": "0.9.4", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "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.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", + "node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "callsites": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/is-weakset": { - "version": "2.0.3", + "node_modules/parse-json": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "@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": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", + "node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/path-is-absolute": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/path-key": { + "version": "3.1.1", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/json-buffer": { - "version": "3.0.1", + "node_modules/path-parse": { + "version": "1.0.7", "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/path-type": { + "version": "4.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" + "node_modules/picocolors": { + "version": "1.1.0", + "license": "ISC" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", + "node_modules/picomatch": { + "version": "2.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "dev": true, + "node_modules/postcss": { + "version": "8.4.38", + "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": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { - "node": ">=4.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/prelude-ls": { + "version": "1.2.1", "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/prettier": { + "version": "3.3.3", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "fast-diff": "^1.1.2" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" + "engines": { + "node": ">=6" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/prosemirror-commands": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz", + "integrity": "sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/prosemirror-history": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", + "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/prosemirror-inputrules": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", + "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" } }, - "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, + "node_modules/prosemirror-model": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", + "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "orderedmap": "^2.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.18", - "dev": true, - "license": "MIT" + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } }, - "node_modules/object-assign": { - "version": "4.1.1", + "node_modules/prosemirror-transform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", + "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "prosemirror-model": "^1.21.0" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "dev": true, + "node_modules/prosemirror-view": { + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", + "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/object.assign": { - "version": "4.1.5", - "dev": true, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "loose-envify": "^1.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "dev": true, + "node_modules/react-dom": { + "version": "18.3.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "dev": true, + "node_modules/react-hook-form": { + "version": "7.53.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", + "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", "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" + "node": ">=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" } }, - "node_modules/object.values": { - "version": "1.2.0", - "dev": true, + "node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react-router": { + "version": "6.26.2", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "@remix-run/router": "1.19.2" }, "engines": { - "node": ">= 0.4" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "peerDependencies": { + "react": ">=16.8" } }, - "node_modules/optionator": { - "version": "0.9.4", - "dev": true, + "node_modules/react-router-dom": { + "version": "6.26.2", "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" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/orderedmap": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", - "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", - "license": "MIT" - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parent-module": { - "version": "1.0.1", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", "dev": true, "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-json": { - "version": "5.2.0", + "node_modules/resolve": { + "version": "2.0.0-next.5", "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" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-exists": { + "node_modules/resolve-from": { "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, "license": "MIT", "engines": { + "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", + "node_modules/rimraf": { + "version": "3.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", + "node_modules/rollup": { + "version": "4.22.4", "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", + "fsevents": "~2.3.2" } }, - "node_modules/postcss": { - "version": "8.4.38", + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/prettier": { - "version": "3.3.3", + "node_modules/safe-array-concat": { + "version": "1.1.2", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=14" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "node_modules/safe-regex-test": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prop-types": { - "version": "15.8.1", + "node_modules/scheduler": { + "version": "0.23.2", "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "loose-envify": "^1.1.0" } }, - "node_modules/prosemirror-commands": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz", - "integrity": "sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/prosemirror-history": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", - "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", + "node_modules/set-function-length": { + "version": "1.2.2", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" + "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/prosemirror-inputrules": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", - "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "node_modules/set-function-name": { + "version": "2.0.2", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "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/prosemirror-keymap": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", - "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } + "node_modules/shallowequal": { + "version": "1.1.0", + "license": "MIT" }, - "node_modules/prosemirror-model": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", - "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { - "orderedmap": "^2.0.0" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/prosemirror-state": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", - "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" + "engines": { + "node": ">=8" } }, - "node_modules/prosemirror-transform": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", - "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", + "node_modules/side-channel": { + "version": "1.0.6", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-model": "^1.21.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prosemirror-view": { - "version": "1.34.3", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", - "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", + "node_modules/snake-case": { + "version": "3.0.4", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-model": "^1.20.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", + "node_modules/string.prototype.matchall": { + "version": "4.0.11", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "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", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-dom": { - "version": "18.3.1", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, - "node_modules/react-hook-form": { - "version": "7.53.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", - "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-router": { - "version": "6.26.2", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "dev": true, "license": "MIT", "dependencies": { - "@remix-run/router": "1.19.2" - }, - "engines": { - "node": ">=14.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, - "peerDependencies": { - "react": ">=16.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-router-dom": { - "version": "6.26.2", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, "license": "MIT", "dependencies": { - "@remix-run/router": "1.19.2", - "react-router": "6.26.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "ansi-regex": "^5.0.1" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "engines": { + "node": ">=8" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", + "node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-components": { + "version": "6.1.13", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/stylis": { + "version": "4.3.2", "license": "MIT" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", + "node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "has-flag": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3669,140 +4496,114 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/svg-parser": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.9.1", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/unts" } }, - "node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/tslib": { + "version": "2.7.0", "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } + "license": "0BSD" }, - "node_modules/rimraf": { - "version": "3.0.2", + "node_modules/tui-color-picker": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/tui-color-picker/-/tui-color-picker-2.2.8.tgz", + "integrity": "sha512-q5sE9NQ5NR9lYpilYjcI7Sdv0KCogo+W8fZY+AYTj/HYg+9fscYy3UuJ6UQiV1bF+ARCLwFRWC8UcOt9kuUctQ==", + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "prelude-ls": "^1.2.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/rollup": { - "version": "4.22.4", + "node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=10" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rope-sequence": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", - "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/typed-array-buffer": { + "version": "1.0.2", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=0.4" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3811,527 +4612,582 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/scheduler": { - "version": "0.23.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", + "node_modules/typed-array-length": { + "version": "1.0.6", "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", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-function-name": { - "version": "2.0.2", + "node_modules/unbox-primitive": { + "version": "1.0.2", "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" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shallowequal": { + "node_modules/update-browserslist-db": { "version": "1.1.0", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", "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": { - "shebang-regex": "^3.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/uri-js": { + "version": "4.4.1", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/side-channel": { - "version": "1.0.6", + "node_modules/vite": { + "version": "5.4.7", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/snake-case": { - "version": "3.0.4", + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", "dev": true, "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "license": "BSD-3-Clause", + "node_modules/vite/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": ">=0.10.0" + "node": ">=12" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", + "node_modules/vite/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", - "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", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", + "node_modules/vite/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", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/vite/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", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/vite/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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/styled-components": { - "version": "6.1.13", + "node_modules/vite/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", - "dependencies": { - "@emotion/is-prop-valid": "1.2.2", - "@emotion/unitless": "0.8.1", - "@types/stylis": "4.2.5", - "css-to-react-native": "3.2.0", - "csstype": "3.1.3", - "postcss": "8.4.38", - "shallowequal": "1.1.0", - "stylis": "4.3.2", - "tslib": "2.6.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" + "node": ">=12" } }, - "node_modules/styled-components/node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, - "node_modules/stylis": { - "version": "4.3.2", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", + "node_modules/vite/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", - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", + "node_modules/vite/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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.9.1", + "node_modules/vite/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", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=12" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/vite/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": ">=4" + "node": ">=12" } }, - "node_modules/tslib": { - "version": "2.7.0", - "dev": true, - "license": "0BSD" - }, - "node_modules/tui-color-picker": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/tui-color-picker/-/tui-color-picker-2.2.8.tgz", - "integrity": "sha512-q5sE9NQ5NR9lYpilYjcI7Sdv0KCogo+W8fZY+AYTj/HYg+9fscYy3UuJ6UQiV1bF+ARCLwFRWC8UcOt9kuUctQ==", - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/vite/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", - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.20.2", + "node_modules/vite/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 OR CC0-1.0)", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "node_modules/vite/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", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "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" - } + "node_modules/vite/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", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", + "node_modules/vite/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": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.2", + "node_modules/vite/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", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.4.7", + "node_modules/vite/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", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, "bin": { - "vite": "bin/vite.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": ">=12" }, "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/vite-plugin-svgr": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.5", - "@svgr/core": "^8.1.0", - "@svgr/plugin-jsx": "^8.1.0" - }, - "peerDependencies": { - "vite": "^2.6.0 || 3 || 4 || 5" + "@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/vite/node_modules/postcss": { diff --git a/package.json b/package.json index 4485088..7b5d313 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.5.0", + "esbuild": "^0.24.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -40,6 +41,7 @@ "vite-plugin-svgr": "^4.2.0" }, "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "^4.22.4", "@rollup/rollup-linux-x64-gnu": "^4.22.4" } } From 10d5624cfe136cd225df311dfbb9e82ff8b72b62 Mon Sep 17 00:00:00 2001 From: huisuu Date: Wed, 25 Sep 2024 16:36:36 +0900 Subject: [PATCH 53/97] fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7b5d313..f4d1512 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "vite-plugin-svgr": "^4.2.0" }, "optionalDependencies": { - "@rollup/rollup-darwin-arm64": "^4.22.4", - "@rollup/rollup-linux-x64-gnu": "^4.22.4" + "@rollup/rollup-linux-x64-gnu": "^4.22.4", + "@rollup/rollup-darwin-arm64": "^4.22.4" } } From c74fbb3d073a52087b58be77816d2cfc8955dcc3 Mon Sep 17 00:00:00 2001 From: huisuu Date: Wed, 25 Sep 2024 17:02:08 +0900 Subject: [PATCH 54/97] fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f4d1512..7b5d313 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "vite-plugin-svgr": "^4.2.0" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.22.4", - "@rollup/rollup-darwin-arm64": "^4.22.4" + "@rollup/rollup-darwin-arm64": "^4.22.4", + "@rollup/rollup-linux-x64-gnu": "^4.22.4" } } From 5a3229db0f12b1bd8e96a987f1a048598a79f592 Mon Sep 17 00:00:00 2001 From: huisuu <133630472+huisuu@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:25:23 +0900 Subject: [PATCH 55/97] fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js (#41) * fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js * fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js * fix: Resolve missing @esbuild/darwin-arm64 module in vite.config.js --- package-lock.json | 5778 ++++++++++++++++++++++++++------------------- package.json | 2 + 2 files changed, 3319 insertions(+), 2461 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f8a19c..b8aa53d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.5.0", + "esbuild": "^0.24.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -37,6 +38,7 @@ "vite-plugin-svgr": "^4.2.0" }, "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "^4.22.4", "@rollup/rollup-linux-x64-gnu": "^4.22.4" } }, @@ -377,237 +379,299 @@ "version": "0.8.1", "license": "MIT" }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ - "x64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=18" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "node": ">=18" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=18" } }, - "node_modules/@remix-run/router": { - "version": "1.19.2", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.0.0" + "node": ">=18" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -615,618 +679,1292 @@ "license": "MIT", "optional": true, "os": [ - "win32" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=14" + "dependencies": { + "eslint-visitor-keys": "^3.3.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "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" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@svgr/core": { - "version": "8.1.0", + "node_modules/@eslint/js": { + "version": "8.57.1", "dev": true, "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "license": "Apache-2.0", "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" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=14" + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/gregberge" + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=6.0.0" } }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "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": ">=6.0.0" } }, - "node_modules/@swc/core": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.28.tgz", - "integrity": "sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==", - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.12" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=10" + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@remix-run/router": { + "version": "1.19.2", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.28", - "@swc/core-darwin-x64": "1.7.28", - "@swc/core-linux-arm-gnueabihf": "1.7.28", - "@swc/core-linux-arm64-gnu": "1.7.28", - "@swc/core-linux-arm64-musl": "1.7.28", - "@swc/core-linux-x64-gnu": "1.7.28", - "@swc/core-linux-x64-musl": "1.7.28", - "@swc/core-win32-arm64-msvc": "1.7.28", - "@swc/core-win32-ia32-msvc": "1.7.28", - "@swc/core-win32-x64-msvc": "1.7.28" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@swc/helpers": "*" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "@swc/helpers": { + "rollup": { "optional": true } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.28.tgz", - "integrity": "sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==", + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], - "license": "Apache-2.0 AND MIT", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">=10" - } + ] }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.28.tgz", - "integrity": "sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], - "license": "Apache-2.0 AND MIT", + "license": "MIT", "optional": true, "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } + "linux" + ] }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.28.tgz", - "integrity": "sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.22.4", "cpu": [ - "arm" + "x64" ], - "license": "Apache-2.0", + "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" - ], + "win32" + ] + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.28.tgz", - "integrity": "sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.28.tgz", - "integrity": "sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.28.tgz", - "integrity": "sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.28.tgz", - "integrity": "sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.28.tgz", - "integrity": "sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.28.tgz", - "integrity": "sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.28.tgz", - "integrity": "sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "license": "Apache-2.0" - }, - "node_modules/@swc/types": { - "version": "0.1.12", - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@toast-ui/editor": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@toast-ui/editor/-/editor-3.2.2.tgz", - "integrity": "sha512-ASX7LFjN2ZYQJrwmkUajPs7DRr9FsM1+RQ82CfTO0Y5ZXorBk1VZS4C2Dpxinx9kl55V4F8/A2h2QF4QMDtRbA==", - "license": "MIT", - "dependencies": { - "dompurify": "^2.3.3", - "prosemirror-commands": "^1.1.9", - "prosemirror-history": "^1.1.3", - "prosemirror-inputrules": "^1.1.3", - "prosemirror-keymap": "^1.1.4", - "prosemirror-model": "^1.14.1", - "prosemirror-state": "^1.3.4", - "prosemirror-view": "^1.18.7" - } - }, - "node_modules/@toast-ui/editor-plugin-code-syntax-highlight": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-code-syntax-highlight/-/editor-plugin-code-syntax-highlight-3.1.0.tgz", - "integrity": "sha512-OgX5pZiTnHREoTTXDAFu1k6RzEspGOxeJNRlt/Lnoi1GvLbIpUTTbBcls9becpXT/Qdls++8G3r5C60cVdellA==", - "license": "MIT", - "dependencies": { - "prismjs": "^1.23.0" - } - }, - "node_modules/@toast-ui/editor-plugin-color-syntax": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-color-syntax/-/editor-plugin-color-syntax-3.1.0.tgz", - "integrity": "sha512-UVKfMBPV+3snSaJn9RUKGbxJbgi92D2t68ow8wAjGezvMp1ht4UVETrvomdTGr+RYhXSeH3JvSwN9nmQqw0qzA==", - "license": "MIT", - "dependencies": { - "tui-color-picker": "^2.2.6" - } - }, - "node_modules/@toast-ui/react-editor": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@toast-ui/react-editor/-/react-editor-3.2.3.tgz", - "integrity": "sha512-86QdgiOkBeSwRBEUWRKsTpnm6yu5j9HNJ3EfQN8EGcd7kI8k8AhExXyUJ3NNgNTzN7FfSKMw+1VaCDDC+aZ3dw==", + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "@toast-ui/editor": "^3.2.2" + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "react": "^17.0.1" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/stylis": { - "version": "4.2.5", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "3.7.0", + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@swc/core": "^1.5.7" + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "vite": "^4 || ^5" + "@babel/core": "^7.0.0-0" } }, - "node_modules/acorn": { - "version": "8.12.1", + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "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": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/ajv": { - "version": "6.12.6", + "node_modules/@svgr/core": { + "version": "8.1.0", "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" + "@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/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@babel/types": "^7.21.3", + "entities": "^4.4.0" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "@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": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" } }, - "node_modules/array-includes": { - "version": "3.1.8", - "dev": true, - "license": "MIT", + "node_modules/@swc/core": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.28.tgz", + "integrity": "sha512-XapcMgsOS0cKh01AFEj+qXOk6KM4NZhp7a5vPicdhkRR8RzvjrCa7DTtijMxfotU8bqaEHguxmiIag2HUlT8QQ==", + "hasInstallScript": true, + "license": "Apache-2.0", "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" + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.12" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.7.28", + "@swc/core-darwin-x64": "1.7.28", + "@swc/core-linux-arm-gnueabihf": "1.7.28", + "@swc/core-linux-arm64-gnu": "1.7.28", + "@swc/core-linux-arm64-musl": "1.7.28", + "@swc/core-linux-x64-gnu": "1.7.28", + "@swc/core-linux-x64-musl": "1.7.28", + "@swc/core-win32-arm64-msvc": "1.7.28", + "@swc/core-win32-ia32-msvc": "1.7.28", + "@swc/core-win32-x64-msvc": "1.7.28" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.28.tgz", + "integrity": "sha512-BNkj6enHo2pdzOpCtQGKZbXT2A/qWIr0CVtbTM4WkJ3MCK/glbFsyO6X59p1r8+gfaZG4bWYnTTu+RuUAcsL5g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.28.tgz", + "integrity": "sha512-96zQ+X5Fd6P/RNPkOyikTJgEc2M4TzznfYvjRd2hye5h22jhxCLL/csoauDgN7lYfd7mwsZ/sVXwJTMKl+vZSA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.28.tgz", + "integrity": "sha512-l2100Wx6LdXMOmOW3+KoHhBhyZrGdz8ylkygcVOC0QHp6YIATfuG+rRHksfyEWCSOdL3anM9MJZJX26KT/s+XQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.28.tgz", + "integrity": "sha512-03m6iQ5Bv9u2VPnNRyaBmE8eHi056eE39L0gXcqGoo46GAGuoqYHt9pDz8wS6EgoN4t85iBMUZrkCNqFKkN6ZQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.28.tgz", + "integrity": "sha512-vqVOpG/jc8mvTKQjaPBLhr7tnWyzuztOHsPnJqMWmg7zGcMeQC/2c5pU4uzRAfXMTp25iId6s4Y4wWfPS1EeDw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.28.tgz", + "integrity": "sha512-HGwpWuB83Kr+V0E+zT5UwIIY9OxiS8aLd0UVMRVWuO8SrQyKm9HKJ46+zoAb8tfJrpZftfxvbn2ayZWR7gqosA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.28.tgz", + "integrity": "sha512-q2Y2T8y8EgFtIiRyInnAXNe94aaHX74F0ha1Bl9VdRxE0u1/So+3VLbPvtp4V3Z6pj5pOePfCQJKifnllgAQ9A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.28.tgz", + "integrity": "sha512-bCqh4uBT/59h3dWK1v91In6qzz8rKoWoFRxCtNQLIK4jP55K0U231ZK9oN7neZD6bzcOUeFvOGgcyMAgDfFWfA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.28.tgz", + "integrity": "sha512-XTHbHrksnrqK3JSJ2sbuMWvdJ6/G0roRpgyVTmNDfhTYPOwcVaL/mSrPGLwbksYUbq7ckwoKzrobhdxvQzPsDA==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.7.28", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.28.tgz", + "integrity": "sha512-jyXeoq6nX8abiCy2EpporsC5ywNENs4ocYuvxo1LSxDktWN1E2MTXq3cdJcEWB2Vydxq0rDcsGyzkRPMzFhkZw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.12", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@toast-ui/editor": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@toast-ui/editor/-/editor-3.2.2.tgz", + "integrity": "sha512-ASX7LFjN2ZYQJrwmkUajPs7DRr9FsM1+RQ82CfTO0Y5ZXorBk1VZS4C2Dpxinx9kl55V4F8/A2h2QF4QMDtRbA==", + "license": "MIT", + "dependencies": { + "dompurify": "^2.3.3", + "prosemirror-commands": "^1.1.9", + "prosemirror-history": "^1.1.3", + "prosemirror-inputrules": "^1.1.3", + "prosemirror-keymap": "^1.1.4", + "prosemirror-model": "^1.14.1", + "prosemirror-state": "^1.3.4", + "prosemirror-view": "^1.18.7" + } + }, + "node_modules/@toast-ui/editor-plugin-code-syntax-highlight": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-code-syntax-highlight/-/editor-plugin-code-syntax-highlight-3.1.0.tgz", + "integrity": "sha512-OgX5pZiTnHREoTTXDAFu1k6RzEspGOxeJNRlt/Lnoi1GvLbIpUTTbBcls9becpXT/Qdls++8G3r5C60cVdellA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.23.0" + } + }, + "node_modules/@toast-ui/editor-plugin-color-syntax": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@toast-ui/editor-plugin-color-syntax/-/editor-plugin-color-syntax-3.1.0.tgz", + "integrity": "sha512-UVKfMBPV+3snSaJn9RUKGbxJbgi92D2t68ow8wAjGezvMp1ht4UVETrvomdTGr+RYhXSeH3JvSwN9nmQqw0qzA==", + "license": "MIT", + "dependencies": { + "tui-color-picker": "^2.2.6" + } + }, + "node_modules/@toast-ui/react-editor": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@toast-ui/react-editor/-/react-editor-3.2.3.tgz", + "integrity": "sha512-86QdgiOkBeSwRBEUWRKsTpnm6yu5j9HNJ3EfQN8EGcd7kI8k8AhExXyUJ3NNgNTzN7FfSKMw+1VaCDDC+aZ3dw==", + "license": "MIT", + "dependencies": { + "@toast-ui/editor": "^3.2.2" + }, + "peerDependencies": { + "react": "^17.0.1" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/core": "^1.5.7" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "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-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "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", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "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", + "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.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "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.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "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/axios": { + "version": "1.7.7", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "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.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001662", + "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", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", + "node_modules/cosmiconfig": { + "version": "8.3.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "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/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1235,15 +1973,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", + "node_modules/data-view-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1252,15 +1989,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1269,34 +2005,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", + "node_modules/debug": { + "version": "4.3.7", "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" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -1305,16 +2042,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -1323,70 +2058,124 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.7.7", + "node_modules/delayed-stream": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", + "node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "node_modules/browserslist": { - "version": "4.23.3", + "node_modules/dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, + "node_modules/dot-case": { + "version": "3.0.4", "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.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.27", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/call-bind": { - "version": "1.0.7", + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", "dev": true, "license": "MIT", "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1395,470 +2184,543 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/es-define-property": { + "version": "1.0.0", "dev": true, "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/camelcase": { - "version": "6.3.0", + "node_modules/es-errors": { + "version": "1.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelize": { - "version": "1.0.1", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.4" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001662", - "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", + "node_modules/es-iterator-helpers": { + "version": "1.0.19", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/color-convert": { - "version": "2.0.1", + "node_modules/es-object-atoms": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "es-errors": "^1.3.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/color-name": { - "version": "1.1.4", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", + "node_modules/es-to-primitive": { + "version": "1.2.1", "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" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">= 8" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "license": "ISC", + "node_modules/escalade": { + "version": "3.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/css-to-react-native": { - "version": "3.2.0", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/csstype": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", + "node_modules/eslint": { + "version": "8.57.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", + "node_modules/eslint-plugin-react": { + "version": "7.36.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/debug": { - "version": "4.3.7", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/deep-is": { - "version": "0.1.4", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.12", "dev": true, - "license": "MIT" + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } }, - "node_modules/define-data-property": { - "version": "1.1.4", + "node_modules/eslint-scope": { + "version": "7.2.2", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/define-properties": { - "version": "1.2.1", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/doctrine": { - "version": "2.1.0", + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dompurify": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", - "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", - "license": "(MPL-2.0 OR Apache-2.0)" - }, - "node_modules/dot-case": { - "version": "3.0.4", + "node_modules/esquery": { + "version": "1.6.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.27", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "license": "ISC" + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } }, - "node_modules/entities": { - "version": "4.5.0", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=4.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/estree-walker": { + "version": "2.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/es-abstract": { - "version": "1.23.3", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 0.4" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.0", + "node_modules/flat-cache": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", + "node_modules/flatted": { + "version": "3.3.1", "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", + "node_modules/for-each": { + "version": "0.3.3", "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-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "is-callable": "^1.1.3" } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "dev": true, + "node_modules/form-data": { + "version": "4.0.0", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "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", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", + "node_modules/function-bind": { + "version": "1.1.2", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/function.prototype.name": { + "version": "1.1.6", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -1867,434 +2729,368 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { - "version": "0.21.5", + "node_modules/functions-have-names": { + "version": "1.2.3", "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" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { - "version": "3.2.0", + "node_modules/gensync": { + "version": "1.0.0-beta.2", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=6.9.0" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/get-intrinsic": { + "version": "1.2.4", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "8.57.1", + "node_modules/get-symbol-description": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", + "node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", + "node_modules/globals": { + "version": "13.24.0", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "type-fest": "^0.20.2" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react": { - "version": "7.36.1", + "node_modules/globalthis": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", + "node_modules/gopd": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "get-intrinsic": "^1.1.3" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.12", + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/has-proto": { + "version": "1.0.3", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", + "node_modules/has-symbols": { + "version": "1.0.3", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/has-tostringtag": { + "version": "1.0.2", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.6.0", + "node_modules/hasown": { + "version": "2.0.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/ignore": { + "version": "5.3.2", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 4" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/imurmurhash": { + "version": "0.1.4", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.19" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/inflight": { + "version": "1.0.6", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/inherits": { + "version": "2.0.4", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/fastq": { - "version": "1.17.1", + "node_modules/internal-slot": { + "version": "1.0.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/is-array-buffer": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "3.2.0", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "has-bigints": "^1.0.1" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flatted": { - "version": "3.3.1", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/is-callable": { + "version": "1.2.7", "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "4.0.0", + "node_modules/is-core-module": { + "version": "2.15.1", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "hasown": "^2.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", + "node_modules/is-data-view": { + "version": "1.0.1", "dev": true, "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2303,32 +3099,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", + "node_modules/is-generator-function": { + "version": "1.0.10", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2337,15 +3132,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", + "node_modules/is-glob": { + "version": "4.0.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "is-extglob": "^2.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2353,57 +3154,46 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/is-negative-zero": { + "version": "2.0.3", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/is-number-object": { + "version": "1.0.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globals": { - "version": "13.24.0", + "node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2412,53 +3202,66 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/is-set": { + "version": "2.0.3", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", + "node_modules/is-typed-array": { + "version": "1.1.13", "dev": true, "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, "engines": { "node": ">= 0.4" }, @@ -2466,8 +3269,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/is-weakmap": { + "version": "2.0.2", "dev": true, "license": "MIT", "engines": { @@ -2477,248 +3280,272 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { + "node_modules/is-weakref": { "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.2", + "node_modules/is-weakset": { + "version": "2.0.3", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore": { - "version": "5.3.2", + "node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/jsesc": { + "version": "2.5.2", "dev": true, "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=0.8.19" + "node": ">=4" } }, - "node_modules/inflight": { - "version": "1.0.6", + "node_modules/json-buffer": { + "version": "3.0.1", "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } + "license": "MIT" }, - "node_modules/inherits": { - "version": "2.0.4", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/internal-slot": { - "version": "1.0.7", + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", + "node_modules/jsx-ast-utils": { + "version": "3.3.5", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.0.0", + "node_modules/keyv": { + "version": "4.5.4", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "json-buffer": "3.0.1" } }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/levn": { + "version": "0.4.1", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/lodash.merge": { + "version": "4.6.2", "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/is-core-module": { - "version": "2.15.1", + "node_modules/lower-case": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "tslib": "^2.0.3" } }, - "node_modules/is-data-view": { - "version": "1.0.1", + "node_modules/lru-cache": { + "version": "5.1.1", "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "dependencies": { - "is-typed-array": "^1.1.13" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-tostringtag": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/ms": { + "version": "2.1.3", "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "node_modules/natural-compare": { + "version": "1.4.0", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/is-generator-function": { - "version": "1.0.10", + "node_modules/no-case": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/node-releases": { + "version": "2.0.18", "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-map": { - "version": "2.0.3", + "node_modules/object-inspect": { + "version": "1.13.2", "dev": true, "license": "MIT", "engines": { @@ -2728,23 +3555,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/object.assign": { + "version": "4.1.5", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -2753,33 +3580,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/object.entries": { + "version": "1.1.8", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "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/is-set": { - "version": "2.0.3", + "node_modules/object.fromentries": { + "version": "2.0.8", "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" }, @@ -2787,12 +3610,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", + "node_modules/object.values": { + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2801,867 +3626,869 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/once": { + "version": "1.4.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "wrappy": "1" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/optionator": { + "version": "0.9.4", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "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.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", + "node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "callsites": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/is-weakset": { - "version": "2.0.3", + "node_modules/parse-json": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "@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": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", + "node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/path-is-absolute": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/path-key": { + "version": "3.1.1", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/json-buffer": { - "version": "3.0.1", + "node_modules/path-parse": { + "version": "1.0.7", "dev": true, "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/path-type": { + "version": "4.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" + "node_modules/picocolors": { + "version": "1.1.0", + "license": "ISC" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", + "node_modules/picomatch": { + "version": "2.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "dev": true, + "node_modules/postcss": { + "version": "8.4.38", + "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": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { - "node": ">=4.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/prelude-ls": { + "version": "1.2.1", "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/prettier": { + "version": "3.3.3", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "fast-diff": "^1.1.2" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" + "engines": { + "node": ">=6" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/prosemirror-commands": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz", + "integrity": "sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/prosemirror-history": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", + "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/prosemirror-inputrules": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", + "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" } }, - "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, + "node_modules/prosemirror-model": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", + "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "orderedmap": "^2.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.18", - "dev": true, - "license": "MIT" + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } }, - "node_modules/object-assign": { - "version": "4.1.1", + "node_modules/prosemirror-transform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", + "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "prosemirror-model": "^1.21.0" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "dev": true, + "node_modules/prosemirror-view": { + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", + "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/object.assign": { - "version": "4.1.5", - "dev": true, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "loose-envify": "^1.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "dev": true, + "node_modules/react-dom": { + "version": "18.3.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "dev": true, + "node_modules/react-hook-form": { + "version": "7.53.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", + "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", "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" + "node": ">=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" } }, - "node_modules/object.values": { - "version": "1.2.0", - "dev": true, + "node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react-router": { + "version": "6.26.2", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "@remix-run/router": "1.19.2" }, "engines": { - "node": ">= 0.4" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "peerDependencies": { + "react": ">=16.8" } }, - "node_modules/optionator": { - "version": "0.9.4", - "dev": true, + "node_modules/react-router-dom": { + "version": "6.26.2", "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" + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/orderedmap": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", - "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", - "license": "MIT" - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parent-module": { - "version": "1.0.1", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", "dev": true, "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-json": { - "version": "5.2.0", + "node_modules/resolve": { + "version": "2.0.0-next.5", "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" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-exists": { + "node_modules/resolve-from": { "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, "license": "MIT", "engines": { + "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", + "node_modules/rimraf": { + "version": "3.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", + "node_modules/rollup": { + "version": "4.22.4", "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", + "fsevents": "~2.3.2" } }, - "node_modules/postcss": { - "version": "8.4.38", + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/prettier": { - "version": "3.3.3", + "node_modules/safe-array-concat": { + "version": "1.1.2", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=14" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "node_modules/safe-regex-test": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prop-types": { - "version": "15.8.1", + "node_modules/scheduler": { + "version": "0.23.2", "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "loose-envify": "^1.1.0" } }, - "node_modules/prosemirror-commands": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz", - "integrity": "sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/prosemirror-history": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", - "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", + "node_modules/set-function-length": { + "version": "1.2.2", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" + "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/prosemirror-inputrules": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", - "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "node_modules/set-function-name": { + "version": "2.0.2", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "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/prosemirror-keymap": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", - "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } + "node_modules/shallowequal": { + "version": "1.1.0", + "license": "MIT" }, - "node_modules/prosemirror-model": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", - "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { - "orderedmap": "^2.0.0" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/prosemirror-state": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", - "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" + "engines": { + "node": ">=8" } }, - "node_modules/prosemirror-transform": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", - "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", + "node_modules/side-channel": { + "version": "1.0.6", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-model": "^1.21.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prosemirror-view": { - "version": "1.34.3", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", - "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", + "node_modules/snake-case": { + "version": "3.0.4", + "dev": true, "license": "MIT", "dependencies": { - "prosemirror-model": "^1.20.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", + "node_modules/string.prototype.matchall": { + "version": "4.0.11", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "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", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-dom": { - "version": "18.3.1", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, - "node_modules/react-hook-form": { - "version": "7.53.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", - "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-router": { - "version": "6.26.2", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "dev": true, "license": "MIT", "dependencies": { - "@remix-run/router": "1.19.2" - }, - "engines": { - "node": ">=14.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, - "peerDependencies": { - "react": ">=16.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-router-dom": { - "version": "6.26.2", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, "license": "MIT", "dependencies": { - "@remix-run/router": "1.19.2", - "react-router": "6.26.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "ansi-regex": "^5.0.1" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "engines": { + "node": ">=8" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", + "node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-components": { + "version": "6.1.13", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/stylis": { + "version": "4.3.2", "license": "MIT" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", + "node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "has-flag": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3669,140 +4496,114 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/svg-parser": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.9.1", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/unts" } }, - "node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/tslib": { + "version": "2.7.0", "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } + "license": "0BSD" }, - "node_modules/rimraf": { - "version": "3.0.2", + "node_modules/tui-color-picker": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/tui-color-picker/-/tui-color-picker-2.2.8.tgz", + "integrity": "sha512-q5sE9NQ5NR9lYpilYjcI7Sdv0KCogo+W8fZY+AYTj/HYg+9fscYy3UuJ6UQiV1bF+ARCLwFRWC8UcOt9kuUctQ==", + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "prelude-ls": "^1.2.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/rollup": { - "version": "4.22.4", + "node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=10" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rope-sequence": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", - "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/typed-array-buffer": { + "version": "1.0.2", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=0.4" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3811,527 +4612,582 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/scheduler": { - "version": "0.23.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", + "node_modules/typed-array-length": { + "version": "1.0.6", "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", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-function-name": { - "version": "2.0.2", + "node_modules/unbox-primitive": { + "version": "1.0.2", "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" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shallowequal": { + "node_modules/update-browserslist-db": { "version": "1.1.0", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", "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": { - "shebang-regex": "^3.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/uri-js": { + "version": "4.4.1", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/side-channel": { - "version": "1.0.6", + "node_modules/vite": { + "version": "5.4.7", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/snake-case": { - "version": "3.0.4", + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", "dev": true, "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "license": "BSD-3-Clause", + "node_modules/vite/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": ">=0.10.0" + "node": ">=12" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", + "node_modules/vite/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", - "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", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", + "node_modules/vite/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", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/vite/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", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/vite/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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/styled-components": { - "version": "6.1.13", + "node_modules/vite/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", - "dependencies": { - "@emotion/is-prop-valid": "1.2.2", - "@emotion/unitless": "0.8.1", - "@types/stylis": "4.2.5", - "css-to-react-native": "3.2.0", - "csstype": "3.1.3", - "postcss": "8.4.38", - "shallowequal": "1.1.0", - "stylis": "4.3.2", - "tslib": "2.6.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" + "node": ">=12" } }, - "node_modules/styled-components/node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, - "node_modules/stylis": { - "version": "4.3.2", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", + "node_modules/vite/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", - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", + "node_modules/vite/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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.9.1", + "node_modules/vite/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", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=12" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/vite/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": ">=4" + "node": ">=12" } }, - "node_modules/tslib": { - "version": "2.7.0", - "dev": true, - "license": "0BSD" - }, - "node_modules/tui-color-picker": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/tui-color-picker/-/tui-color-picker-2.2.8.tgz", - "integrity": "sha512-q5sE9NQ5NR9lYpilYjcI7Sdv0KCogo+W8fZY+AYTj/HYg+9fscYy3UuJ6UQiV1bF+ARCLwFRWC8UcOt9kuUctQ==", - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/vite/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", - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.20.2", + "node_modules/vite/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 OR CC0-1.0)", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "node_modules/vite/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", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", + "node_modules/vite/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", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "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" - } + "node_modules/vite/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", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", + "node_modules/vite/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": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.2", + "node_modules/vite/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", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.4.7", + "node_modules/vite/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", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, "bin": { - "vite": "bin/vite.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": ">=12" }, "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/vite-plugin-svgr": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.5", - "@svgr/core": "^8.1.0", - "@svgr/plugin-jsx": "^8.1.0" - }, - "peerDependencies": { - "vite": "^2.6.0 || 3 || 4 || 5" + "@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/vite/node_modules/postcss": { diff --git a/package.json b/package.json index 4485088..7b5d313 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.5.0", + "esbuild": "^0.24.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -40,6 +41,7 @@ "vite-plugin-svgr": "^4.2.0" }, "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "^4.22.4", "@rollup/rollup-linux-x64-gnu": "^4.22.4" } } From 3045c11b7ee625c2eb348d63111be10defec7036 Mon Sep 17 00:00:00 2001 From: huisuu Date: Wed, 25 Sep 2024 23:23:13 +0900 Subject: [PATCH 56/97] =?UTF-8?q?feat:=20=EB=82=B4=EB=B9=84=EB=B0=94=20Aut?= =?UTF-8?q?hLinks=20=EB=B6=80=EB=B6=84=20=EA=B5=AC=ED=98=84,=20AuthContext?= =?UTF-8?q?=20=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 62 +++++++++++++---------- src/components/navigation/AuthContext.jsx | 46 +++++++++++++++++ src/components/navigation/Navigation.jsx | 27 +++++++--- src/pages/Login.jsx | 24 +++++++-- src/pages/MyPage.jsx | 5 +- src/pages/SignUp.jsx | 1 - 6 files changed, 122 insertions(+), 43 deletions(-) create mode 100644 src/components/navigation/AuthContext.jsx diff --git a/src/App.jsx b/src/App.jsx index 16068c2..d437e16 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -9,6 +9,9 @@ import { GlobalStyle } from './styles/global'; import { MainLayout } from './components/layouts/MainLayout'; import './styles/font.css'; +import { AuthProvider } from './Components/navigation/AuthContext'; +import Navigator from './Components/navigation/Navigation'; + import MainPage from './pages/MainPage'; import NotFound from './pages/NotFound'; @@ -29,35 +32,38 @@ export default function App() { return ( <> - - - }> - } /> - } /> - - } /> - } /> - - } /> - } /> - } /> - } /> - } /> - - {/* 대시보드 페이지 */} - }> - } /> - } /> - } - /> - } /> - } /> - } /> + + + + + }> + } /> + } /> + + } /> + } /> + + } /> + } /> + } /> + } /> + } /> + + {/* 대시보드 페이지 */} + }> + } /> + } /> + } + /> + } /> + } /> + } /> + - - + + ); } diff --git a/src/components/navigation/AuthContext.jsx b/src/components/navigation/AuthContext.jsx new file mode 100644 index 0000000..7f137fa --- /dev/null +++ b/src/components/navigation/AuthContext.jsx @@ -0,0 +1,46 @@ +// AuthContext.jsx +// 코드 작성자 : GiHhub @huisuu + +import React, { createContext, useState, useContext } from 'react'; +import axios from 'axios'; + +const AuthContext = createContext(); + +export const AuthProvider = ({ children }) => { + const [isLoggedIn, setIsLoggedIn] = useState(!!localStorage.getItem('token')); + const [user, setUser] = useState(null); + + const login = (token, userInfo) => { + localStorage.setItem('token', token); // 로그인 시 토큰 저장 + setUser(userInfo); // 사용자 정보 저장 + setIsLoggedIn(true); + }; + + const logout = async () => { + try { + // 서버에 로그아웃 요청 + await axios.post('http://155.230.118.35/logout', {}, { + headers: { + Authorization: `Bearer ${localStorage.getItem('token')}`, + }, + }); + } catch (error) { + console.error('Error during logout:', error); + } finally { + // 클라이언트 측에서 토큰 및 상태 제거 + localStorage.removeItem('token'); + setIsLoggedIn(false); + setUser(null); + } + }; + + return ( + + {children} + + ); +}; + +export const useAuth = () => { + return useContext(AuthContext); +}; \ No newline at end of file diff --git a/src/components/navigation/Navigation.jsx b/src/components/navigation/Navigation.jsx index d053f17..ddbadc3 100644 --- a/src/components/navigation/Navigation.jsx +++ b/src/components/navigation/Navigation.jsx @@ -1,9 +1,8 @@ +import { useAuth } from './AuthContext'; import styled from 'styled-components'; - -import useTheme from '../../hooks/useTheme'; - import { Link } from 'react-router-dom'; import { Toggle } from '../forms/Toggle'; +import useTheme from '../../hooks/useTheme'; const Nav = styled.div` position: fixed; @@ -32,6 +31,11 @@ const Logo = styled.div` const AuthLinks = styled.div` display: flex; gap: 20px; + font-size: 16px; + + /* 비율 고정 */ + flex-grow: 0; + flex-shrink: 0; `; const menu_style = { @@ -47,16 +51,21 @@ const Menus = styled.div` font-size: 16px; font-weight: lighter; -`; -const isLoggedIn = false; + /* 비율 고정 */ + flex-grow: 0; + flex-shrink: 0; +`; export const Navigation = () => { + const { isLoggedIn, logout, user } = useAuth(); const { theme, toggleTheme } = useTheme(); return ( ); }; + +export default Navigation; \ No newline at end of file diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 1100706..f5ff7d3 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -6,6 +6,7 @@ import { useForm } from 'react-hook-form'; import axios from 'axios'; import { useNavigate, Link } from 'react-router-dom'; import styled from 'styled-components'; +import { useAuth } from '../components/navigation/AuthContext'; import '../styles/font.css'; const Container = styled.div` @@ -118,19 +119,31 @@ const SignupLink = styled.div` `; export default function Login() { - const { register, handleSubmit, formState: { errors } } = useForm(); + const { register, handleSubmit, setValue, formState: { errors } } = useForm(); const navigate = useNavigate(); + const { login } = useAuth(); // AuthContext에서 login 함수 호출 const [error, setError] = useState(''); const onSubmit = async (data) => { try { - // const response = await axios.post(`/login`, data); - // console.log('서버로 전송:', response.data); - setError(''); + // 서버에 로그인 요청 보내기 + // const response = await axios.post('http://155.230.118.35/login', data); + // const token = response.data.token; + // const userInfo = response.data.user; + + // 로그인 성공 시 AuthContext의 login 함수 호출 + // login(token, userInfo); + login(true, "userInfo"); + setError(''); // 에러 초기화 navigate('/'); } catch (error) { + // 입력창 비우기 + setValue('student', ''); + setValue('password', ''); + // 에러 처리 console.error('Error:', error); setError('로그인에 실패했습니다. 다시 시도해주세요.'); + // alert('로그인에 실패했습니다. 다시 시도해주세요.'); } }; @@ -180,6 +193,9 @@ export default function Login() { {errors.password && {errors.password.message}} + {/* 에러 메시지 표시 */} + {error && {error}} + 로그인 diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index f12c0d3..9708498 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -210,7 +210,7 @@ export default function MyPage() { email: response.data.email, generation: response.data.generation, major: response.data.major, - profilePic: response.data.profile_picture || '../assets/icons/menu/Executive.png', + profilePic: response.data.profile_picture || '../assets/icons/menu/User.png', }); console.log('Image uploaded successfully'); }) @@ -237,7 +237,8 @@ export default function MyPage() { email: response.data.email, generation: response.data.generation, major: response.data.major, - profilePic: response.data.profile_picture || '../assets/menu/Executive.png', + // profilePic: response.data.profile_picture || '../assets/menu/User.png', + profilePic: '../assets/menu/User.png', }); console.log('Image deleted successfully'); }) diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index 9e99209..f4db6d4 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -10,7 +10,6 @@ import '../font/main_font.css'; const Container = styled.div` background-color: #080f17; - font-family: 'NanumSquare', Helvetica; display: flex; justify-content: center; width: 100%; From a2152a1e934a952df4fd5378acbe08bcf5fb4140 Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 26 Sep 2024 23:53:45 +0900 Subject: [PATCH 57/97] =?UTF-8?q?feat:=20=EC=84=B9=EC=85=98=206=EC=97=90?= =?UTF-8?q?=20=EC=97=B0=ED=98=81=20=EC=B6=94=EA=B0=80=20+=20=EC=95=BD?= =?UTF-8?q?=EA=B0=84=EC=9D=98=20=EB=B0=98=EC=9D=91=ED=98=95=20=EB=94=94?= =?UTF-8?q?=EC=9E=90=EC=9D=B8=20+=20=ED=8A=B8=EB=9E=9C=EC=A7=80=EC=85=98?= =?UTF-8?q?=20=EC=9E=90=EC=97=B0=EC=8A=A4=EB=9F=BD=EA=B2=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 4 +- src/assets/graph.svg | 19 ++ src/components/display/HistoryPreview.jsx | 299 ++++++++++++++++++++ src/components/layouts/DashboardLayout.jsx | 1 + src/components/layouts/MainLayout.jsx | 4 +- src/pages/NotFound.jsx | 5 +- src/pages/Section6.jsx | 309 +++++++-------------- src/stores/dashboard/useHistory.js | 2 + src/transitions/fade-slide.css | 28 +- 9 files changed, 436 insertions(+), 235 deletions(-) create mode 100644 src/assets/graph.svg create mode 100644 src/components/display/HistoryPreview.jsx diff --git a/src/App.jsx b/src/App.jsx index 16068c2..03c3ba2 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,7 @@ // 라우팅을 담당하는 App입니다. // 페이지를 제작할 때 Navigation의 높이만큼 padding 또는 margin을 추가해야 페이지의 내용이 내비바 아래에 보여지게 됩니다. // padding 같은 추가적인 작업이 없다면 내용이 내비바보다 더 높은 위치에서부터 표시되어 일부 내용이 보이지 않습니다. -// 내비바의 높이는 60px입니다. +// 내비바의 높이는 80px입니다. import { Routes, Route, useLocation } from 'react-router-dom'; @@ -22,6 +22,7 @@ import NewArticleEditor from './pages/NewArticleEditor'; import Login from './pages/Login'; import SignUp from './pages/SignUp'; import MyPage from './pages/MyPage'; +import Section6 from './pages/Section6'; export default function App() { // location.key을 통해 화면 전환 시 컴포넌트 충돌/중복 방지 용으로 사용됩니다. @@ -43,6 +44,7 @@ export default function App() { } /> } /> } /> + } /> {/* 대시보드 페이지 */} }> diff --git a/src/assets/graph.svg b/src/assets/graph.svg new file mode 100644 index 0000000..f220897 --- /dev/null +++ b/src/assets/graph.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/components/display/HistoryPreview.jsx b/src/components/display/HistoryPreview.jsx new file mode 100644 index 0000000..ef70156 --- /dev/null +++ b/src/components/display/HistoryPreview.jsx @@ -0,0 +1,299 @@ +import { createRef, useEffect, useState } from 'react'; +import styled from 'styled-components'; + +import { Text } from '../typograph/Text'; + +import useHistory from '../../stores/dashboard/useHistory'; +import { API } from '../../utils/api'; +import { CSSTransition, TransitionGroup } from 'react-transition-group'; + +import '../../transitions/fade-slide.css'; + +const PreviewWrapper = styled.div` + width: 600px; + height: 300px; + display: flex; + gap: 80px; +`; + +const YearListWrapper = styled.div` + display: flex; + flex-direction: column; + gap: 40px; +`; + +const HistoryListWrapper = styled.div``; + +const HistoryElementWrapper = styled.div` + padding: 15px 20px; + background-color: #ffffff10; + border-radius: 10px; + display: flex; + flex-direction: column; + gap: 6px; + margin-bottom: 10px; +`; + +const YearWrapper = styled.button` + display: flex; + align-items: center; + gap: 34px; + background-color: transparent; + outline: none; + border: none; + cursor: pointer; + + &:not(.active) > span { + color: #303146; + } + + &:not(.active) > div { + background-color: #303146; + } + + &:last-child > div:after { + background: linear-gradient( + 0deg, + rgba(48, 49, 70, 0) 0%, + rgba(48, 49, 70, 1) 100% + ); + } +`; + +const Year = styled.span` + transition: color 0.2s ease-in-out; + width: 63px; + font-weight: 800; + font-size: 22px; + text-align: left; + color: white; +`; + +const Dot = styled.div` + position: relative; + transition: background-color 0.2s ease-in-out; + width: 14px; + height: 14px; + border-radius: 100%; + background-color: white; + + &:after { + transform: background 0.2s ease-in-out; + content: ''; + position: absolute; + z-index: -10; + top: 50%; + left: 50%; + transform: translateX(-50%); + width: 4px; + height: 60px; + background: #303146; + } +`; + +const HistoryElement = ({ history }) => { + return ( + + + {history.year}.{history.month} + + + {history.description} + + + ); +}; + +export const HistoryPreview = () => { + const nodeRef = createRef(null); + const [display_year, setDisplayYear] = useState(); + const { saveHistory, histories } = useHistory(); // 불러온 데이터를 저장할 상태 + + useEffect(() => { + // 만약 이전에 받은 API 데이터가 없다면 API 요청 후 데이터를 store에 저장 + if (Object.keys(histories).length === 0) { + API.GET('/histories') + .then((api_res) => { + const return_value = saveHistory(api_res); // API 데이터를 Zustand 상태에 반영 + setDisplayYear(Object.keys(return_value).reverse().at(0)); + console.log(api_res); + }) + .catch((err) => { + // 오류 발생 시 안내 + console.warn('History API 통신 실패. 기본 데이터를 사용합니다.', err); + const return_value = saveHistory([ + { + id: 0, + year: 1997, + month: 11, + description: '동아리 창립', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 1, + year: 2006, + month: 4, + description: '정보보호대학동아리엽학 KUCIS 소속', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 2, + year: 2008, + month: 8, + description: '한국정보보호진흥원 S/W 보안취약점 찾기 대회 우수상', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 3, + year: 2013, + month: 4, + description: '삼성소프트웨어프렌드쉽', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 4, + year: 2016, + month: 2, + description: '대경강원권 연합창업경진대회 최우수상', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 5, + year: 2016, + month: 4, + description: 'Naver D2 Campus 파트너 선정', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 6, + year: 2016, + month: 4, + description: '정보보호대학동아리연합 KUCIS 소속', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 7, + year: 2016, + month: 7, + description: 'KERPERENCE S/S 주최', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 8, + year: 2016, + month: 12, + description: 'KERPERENCE W/W 주최', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 9, + year: 2017, + month: 2, + description: 'KNU 창업 비즈니스 플랜 경진대회 대상', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 10, + year: 2017, + month: 4, + description: '정보보호대학 동아리 연합 KUCIS 소속', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 11, + year: 2018, + month: 4, + description: 'Naver D2 Campus 파트너 선정', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 12, + year: 2021, + month: 9, + description: '제2회 KOSPO 웹서비스 정보보안 경진대회 최우수상', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 13, + year: 2023, + month: 4, + description: 'HSpace 파트너십 체결', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 14, + year: 2024, + month: 4, + description: '전국사이버보안연합 CCA 소속', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + { + id: 15, + year: 2024, + month: 5, + description: '정보보호대학동아리연합 KUCIS 소속', + created_at: '2024-09-26T23:48:50.068140', + updated_at: '2024-09-26T23:48:50.068140', + }, + ]); + setDisplayYear(Object.keys(return_value).reverse().at(0)); + }) + .finally(() => { + console.log('History API 통신 종료'); + }); + } else { + console.info('이미 API 데이터가 있으므로 API 응답을 요청하지 않습니다.'); + } + }, [histories, saveHistory]); + + const display_key = Object.keys(histories).reverse().slice(0, 4); + + return ( + + + {display_key.map((year, i) => ( + setDisplayYear(parseInt(year))} + > + {year} + + + ))} + + + + + {histories[ + display_year ?? Object.keys(histories).reverse().at(0) + ]?.map((history, i) => ( + + ))} + + + + + ); +}; diff --git a/src/components/layouts/DashboardLayout.jsx b/src/components/layouts/DashboardLayout.jsx index d0b9f5b..0a91cea 100644 --- a/src/components/layouts/DashboardLayout.jsx +++ b/src/components/layouts/DashboardLayout.jsx @@ -76,6 +76,7 @@ export const DashboardLayout = ({ location }) => { key={location.key} timeout={{ enter: 500, exit: 300 }} classNames="fade-slide" + style={{ width: '100%', position: 'absolute' }} >
{/* 전환 후 표시될 컴포넌트 */} diff --git a/src/components/layouts/MainLayout.jsx b/src/components/layouts/MainLayout.jsx index 1e2032c..71abd9a 100644 --- a/src/components/layouts/MainLayout.jsx +++ b/src/components/layouts/MainLayout.jsx @@ -1,10 +1,10 @@ -import { Outlet, useLocation } from 'react-router-dom'; +import { Outlet } from 'react-router-dom'; import styled from 'styled-components'; import { Navigation } from '../navigation/Navigation'; export const Main = styled.main` - width: 100vw; + width: 100%; height: 100vh; margin: 0px auto; `; diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx index 0b66d64..69d205a 100644 --- a/src/pages/NotFound.jsx +++ b/src/pages/NotFound.jsx @@ -2,12 +2,11 @@ import { useState } from 'react'; import styled from 'styled-components'; -import { keyframes } from 'styled-components'; import { Span } from '../components/typograph/Text'; -import Square from '../assets/kert_logos/Square.svg?react'; -import NotFoundIcon from '../assets/404.svg?react'; +import Square from '../assets/kert_logos/Square.svg'; +import NotFoundIcon from '../assets/404.svg'; const Wrapper = styled.div` position: relative; diff --git a/src/pages/Section6.jsx b/src/pages/Section6.jsx index d9f4605..6975e47 100644 --- a/src/pages/Section6.jsx +++ b/src/pages/Section6.jsx @@ -1,233 +1,114 @@ -import React from 'react'; -import { useNavigate } from 'react-router-dom'; -import bg_img from '../assets/Section6_bg_img.png'; -import graph_img from "../assets/Section6_graph.png"; -import '../font/main_font.css'; import styled from 'styled-components'; -import { Text } from '../components/typograph/Text'; -// 배경 이미지용 div를 추가해 중첩 레이어 효과를 만듦 -const BackgroundWrapper = styled.div` - width: 100vw; - height: 100vh; - position: relative; - display: flex; - justify-content: center; - align-items: center; - overflow: hidden; +import { Span } from '../components/typograph/Text'; +import GraphSVG from '../assets/graph.svg'; +import { Link } from 'react-router-dom'; +import { HistoryPreview } from '../components/display/HistoryPreview'; + +const SectionWrapper = styled.div` + position: relative; + width: 100%; + // viewport의 높이에서 내비바 높이만큼 감소합니다. + min-height: calc(100vh - 80px); + margin-top: 80px; + background: linear-gradient( + 326deg, + rgba(0, 9, 21, 1) 0%, + rgba(0, 0, 0, 1) 100% + ); + + overflow: hidden; `; -const BackgroundImageLayer = styled.div` - width: 100%; - height: 100%; - background-image: url(${bg_img}); - background-size: cover; - background-position: center center; - position: absolute; - z-index: 1; -`; - -const GraphImageLayer = styled.div` - width: 100%; - height: 100%; - background-image: url(${graph_img}); - background-size: contain; - background-position: right bottom; - background-repeat: no-repeat; - position: absolute; - z-index: 2; -`; - -const ContentWrapper = styled.div` - width: 100%; - height: 100%; - display: flex; - justify-content: flex-start; /* Align content to the left */ - align-items: center; - z-index: 3; - position: relative; - padding: 0 10%; -`; - -// 왼쪽 컨테이너 -const LeftContentContainer = styled.div` - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: center; - padding: 0 50px; -`; - -// 오른쪽 타임라인 컨테이너 -const RightContentContainer = styled.div` - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - padding-left: 50px; - position: relative; - top: 0; -`; - -/*연혁 그래프 관련 style*/ -const HistoryYear = styled.div` - display: flex; - align-items: center; - margin-bottom: 40px; - position: relative; -`; - -const YearText = styled(Text)` - font-size: 18px; - font-weight: bold; - color: #FFFFFF; - margin-right: 20px; -`; - -const Dot = styled.div` - position: absolute; - width: 14px; - height: 14px; - left: 97px; - top: 5px; - background: #FFFFFF; - border-radius:50px; - +const Graph = styled(GraphSVG)` + position: absolute; + display: block; + width: 100%; + height: 100%; +} `; -const PassDot=styled.div` - position: absolute; - width: 14px; - height: 14px; - left: 97px; - top: 5px; - background: #303146; - border-radius:50px; - -` -const EventCard = styled.div` - background-color: #303146; - color: white; - padding: 12px 16px; - border-radius: 8px; - margin-left: 34px; - font-size: 14px; - position: relative; - flex-direction: column; - z-index: 4; - transform: translateX(50px); +const Content = styled.div` + position: absolute; + width: 80%; + height: max-content; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + display: flex; + justify-content: space-around; + align-items: center; + gap: 10px; + @media (max-width: 900px) { + & { + flex-direction: column; /* 화면이 작아지면 세로 방향 */ + justify-content: center; + align-items: center; + text-align: center; + gap: 80px; + } + } `; -const EventDate = styled.div` - font-size: 12px; - color: #B0B0B0; - margin-bottom: 4px; -`; +const LeftContent = styled.div` + display: flex; + flex-direction: column; + gap: 80px; -//이하의 3개는 historyline 설정 -const HistoryLineWrapper = styled.div` - position: absolute; - left: 102px; - top: 20px; + @media (max-width: 900px) { + & { + gap: 30px; + } + } `; +const RightContent = styled.div``; -const HistoryLine = styled.div` - width: 4px; - height: 248px; - background: #303146; +const Title = styled(Span).attrs({ + $weight: 'extrabold', +})` + font-size: clamp(36px, 4vw, 60px); + word-break: keep-all; `; -const FadeOutLine = styled.div` - width: 4px; - height: 100px; - background: linear-gradient(180deg, #303146 0%, rgba(48, 49, 70, 0) 100%); +const Description = styled(Span).attrs({ + $weight: 'light', +})` + font-size: clamp(16px, 2vw, 24px); + word-break: keep-all; `; -// Combining HistoryLine and FadeOutLine -const CombinedHistoryLine = () => ( - - - - -); - -const Button = styled.button` - background: transparent; - border: none; - color: rgba(255, 255, 255, 0.5); - padding: 14px 24px; - border-radius: 8px; - font-size: 10px; - font-weight: bold; - cursor: pointer; - transition: background 0.3s, color 0.3s; - position: relative; - z-index: 4; - - &:hover { - background: #FFFFFF; - color: #303146; - } - - &:focus { - outline: none; - } +const StyledLink = styled(Link)` + font-weight: 300; + font-size: clamp(12px, 1.5vw, 20px); + text-decoration: none; + color: var(--primary-text-color); + opacity: 0.5; + width: fit-content; + height: fit-content; `; - - export default function Section6() { - const navigate = useNavigate(); - - function handleClick() { - navigate('/histories'); - } - - return ( - - - - - - KERT는
매년 성장하고 있어요
- 작년보다 더 뛰어난 동아리로 발전하고 있답니다. - -
- - - 2024 - - - - - 2024.05 - 정보보호대학동아리연합 KUCIS 소속 - - - 2024.04 - 전국사이버보안연합 CCA 소속 - - - - - - 2023 - - - - - 2021 - - - - - 2018 - - - -
-
- ); + return ( + + {/* Scale 100% Fixed */} + + {/* Center Fixed */} + + + + KERT는 + <br /> + 매년 성장하고 있어요 + + + 작년보다 더 뛰어난 동아리로 발전하고 있답니다. + + 상세 연혁 보기 → + + + + + + + ); } diff --git a/src/stores/dashboard/useHistory.js b/src/stores/dashboard/useHistory.js index 8dabd87..4d02d2d 100644 --- a/src/stores/dashboard/useHistory.js +++ b/src/stores/dashboard/useHistory.js @@ -35,6 +35,8 @@ const useHistory = create((set) => ({ saveHistory: (api_res) => { const refined_histories = refineHistories(api_res); set({ histories: refined_histories }); + return refined_histories; + // console.log(refined_histories); }, })); diff --git a/src/transitions/fade-slide.css b/src/transitions/fade-slide.css index efafed1..04af9df 100644 --- a/src/transitions/fade-slide.css +++ b/src/transitions/fade-slide.css @@ -1,33 +1,31 @@ /* 정방향 || 들어오는 효과 */ .fade-slide-enter { - opacity: 0; - transform: translateX(-20px); + opacity: 0; + transform: translateX(20px); } - + .fade-slide-enter-active { - position: absolute; - opacity: 1; - transform: translateX(0px); - transition: all 500ms cubic-bezier(.27,.02,.26,.99) 100ms; + opacity: 1; + transform: translateX(0px); + transition: all 500ms cubic-bezier(0.27, 0.02, 0.26, 0.99) 100ms; } .fade-slide-enter-done { - opacity: 1; + opacity: 1; } - /* 정방향 || 사라지는 효과 */ .fade-slide-exit { - opacity: 1; - transform: translateX(0px); + opacity: 1; + transform: translateX(0px); } .fade-slide-exit-active { - opacity: 0; - transform: translateX(70px); - transition: all 400ms cubic-bezier(.27,.02,.26,.99); + opacity: 0; + transform: translateX(-70px); + transition: all 500ms cubic-bezier(0.27, 0.02, 0.26, 0.99); } .fade-slide-exit-done { - opacity: 0; + opacity: 0; } From eed1d220ddc242e986c0ec0c7c0e6d9e1b82c578 Mon Sep 17 00:00:00 2001 From: Giwon Date: Thu, 26 Sep 2024 23:57:34 +0900 Subject: [PATCH 58/97] =?UTF-8?q?chore:=20=EA=B0=9C=EB=B0=9C=EC=9A=A9=20?= =?UTF-8?q?=EB=9D=BC=EC=9A=B0=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/App.jsx b/src/App.jsx index 03c3ba2..55cfa9a 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -44,7 +44,6 @@ export default function App() { } /> } /> } /> - } /> {/* 대시보드 페이지 */} }> From 5faec880444eda0901939398d5b80ca6a690f16d Mon Sep 17 00:00:00 2001 From: huisuu Date: Fri, 27 Sep 2024 17:09:47 +0900 Subject: [PATCH 59/97] =?UTF-8?q?style:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8,=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85,=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20input=20=EC=8A=A4=ED=83=80?= =?UTF-8?q?=EC=9D=BC=20=EB=B3=80=EA=B2=BD=20&=20=EC=A0=95=EB=A0=AC=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login.jsx | 10 ++++++++-- src/pages/MyPage.jsx | 41 ++++++++++++++++++++++++++++------------- src/pages/SignUp.jsx | 15 ++++++++++++--- 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index f5ff7d3..5dc1b3d 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -18,7 +18,7 @@ const Container = styled.div` justify-content: center; align-items: center; height: 100vh; - width: 100%; + width: 100vw; `; const LoginContainer = styled.div` @@ -89,6 +89,12 @@ const InputGroup = styled.div` border-radius: 5px; background-color: #1c1f25; color: white; + outline: none; + } + + input:focus { + border: 1px solid #4a90e2; /* 파란색 테두리 */ + box-shadow: none; /* 흰색 테두리 제거 */ } `; @@ -200,7 +206,7 @@ export default function Login() { - 계정이 없으신가요? 회원가입 + 계정이 없으신가요? 회원가입 diff --git a/src/pages/MyPage.jsx b/src/pages/MyPage.jsx index 9708498..e0afc6a 100644 --- a/src/pages/MyPage.jsx +++ b/src/pages/MyPage.jsx @@ -7,6 +7,8 @@ import styled from 'styled-components'; import '../font/main_font.css'; import axios from 'axios'; +import { Button } from '../components/forms/Button'; + const Container = styled.div` background-color: #0d0e14; color: #ffffff; @@ -25,7 +27,7 @@ const MyPageContainer = styled.div` const Section = styled.div` background-color: #1b1e27; - padding: 30px; + padding: 40px; border-radius: 20px; margin-bottom: 30px; box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.3); @@ -81,17 +83,21 @@ const PicButtons = styled.div` const Form = styled.form` margin-top: 20px; - margin-right: 20px; + margin-left: auto; + margin-right: auto; + // margin-right: 20px; + display: flex; + flex-direction: column; `; const InputRow = styled.div` display: flex; - justify-content: space-between; - gap: 20px; + gap: 38px; + align-items: center; `; const InputGroup = styled.div` - width: 48%; + width: 47%; label { font-size: 16px; @@ -107,17 +113,21 @@ const InputGroup = styled.div` border: none; border-radius: 10px; color: #ffffff; + outline: none; &:read-only { background-color: #2c2f3e; color: #777; } + &:focus { + border: 1px solid #4a90e2; + box-shadow: none; + } } `; const InputGroupLong = styled.div` - width: 100%; - + width: 98%; label { font-size: 16px; margin-bottom: 10px; @@ -132,11 +142,17 @@ const InputGroupLong = styled.div` border: none; border-radius: 10px; color: #ffffff; + outline: none; &:read-only { background-color: #2c2f3e; color: #777; + outline: none; } + + &:focus { + border: 1px solid #4a90e2; + box-shadow: none; } `; @@ -148,7 +164,9 @@ const EditButton = styled.button` border-radius: 10px; cursor: pointer; width: 200px; - margin-left: 740px; + margin-left: auto; + // margin-left: auto; + matgin-top: auto; `; const WarningMessage = styled.p` @@ -381,10 +399,7 @@ export default function MyPage() { placeholder="비밀번호 확인" {...register('confirmPassword', { required: '새 비밀번호 확인을 입력해주세요.', - pattern: { - value: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/, - message: '비밀번호는 숫자, 대문자, 소문자, 특수문자를 포함한 8자 이상이어야 합니다.', - } + validate: value => value === getValues('newPassword') || '비밀번호가 일치하지 않습니다.' })} /> {errors.confirmPassword && {errors.confirmPassword.message}} @@ -394,7 +409,7 @@ export default function MyPage() { {passwordError && {passwordError}} 비밀번호 변경 - {/* */} + {/* */} diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index f4db6d4..86d8620 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -12,8 +12,8 @@ const Container = styled.div` background-color: #080f17; display: flex; justify-content: center; - width: 100%; - height: 100%; + width: 100vw; + height: 100vh; margin: 0; padding: 0; `; @@ -26,6 +26,8 @@ const SignUpContainer = styled.div` height: 100%; position: relative; top: 120px; + padding-top: 60px; + padding-bottom: 150px; `; const SignUpBox = styled.div` @@ -74,6 +76,13 @@ const SignUpForm = styled.form` border-radius: 5px; background-color: #1c1f25; color: white; + outline: none; + } + + input:focus { + border-color: #3b82f6; + box-shadow: none; + background-color: #1c1f25; /* 배경색은 유지 */ } input::placeholder { @@ -269,4 +278,4 @@ export default function SignUp() { ); -} +} \ No newline at end of file From 0a64c5d96dcc0e001d114dc868b9494926dbde61 Mon Sep 17 00:00:00 2001 From: huisuu Date: Sat, 28 Sep 2024 19:46:21 +0900 Subject: [PATCH 60/97] =?UTF-8?q?feat:=20scroll=20to=20section=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20&=20.env=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + src/components/navigation/AuthContext.jsx | 2 +- src/components/navigation/Navigation.jsx | 56 +++--- src/components/navigation/Profile.jsx | 67 +++++++ src/pages/Login.jsx | 24 ++- src/pages/MainPage.jsx | 8 +- src/pages/MyPage.jsx | 14 +- src/pages/Section1.jsx | 27 +-- src/pages/Section5.jsx | 40 +++-- src/pages/Section6.jsx | 92 +++++----- src/pages/Section7.jsx | 206 +++++++++++----------- src/pages/SignUp.jsx | 12 +- src/utils/scrollToSection.js | 9 + 13 files changed, 333 insertions(+), 228 deletions(-) create mode 100644 src/components/navigation/Profile.jsx create mode 100644 src/utils/scrollToSection.js diff --git a/.gitignore b/.gitignore index a547bf3..3892fe6 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ dist-ssr *.njsproj *.sln *.sw? + +# 환경 변수 파일 +.env +.env.development \ No newline at end of file diff --git a/src/components/navigation/AuthContext.jsx b/src/components/navigation/AuthContext.jsx index 7f137fa..ae9e91b 100644 --- a/src/components/navigation/AuthContext.jsx +++ b/src/components/navigation/AuthContext.jsx @@ -19,7 +19,7 @@ export const AuthProvider = ({ children }) => { const logout = async () => { try { // 서버에 로그아웃 요청 - await axios.post('http://155.230.118.35/logout', {}, { + await axios.post(`${import.meta.env.VITE_BACKEND_URL}/logout`, {}, { headers: { Authorization: `Bearer ${localStorage.getItem('token')}`, }, diff --git a/src/components/navigation/Navigation.jsx b/src/components/navigation/Navigation.jsx index ddbadc3..2e68758 100644 --- a/src/components/navigation/Navigation.jsx +++ b/src/components/navigation/Navigation.jsx @@ -1,15 +1,23 @@ +import React from 'react'; import { useAuth } from './AuthContext'; +import { Link, useNavigate } from 'react-router-dom'; import styled from 'styled-components'; -import { Link } from 'react-router-dom'; import { Toggle } from '../forms/Toggle'; import useTheme from '../../hooks/useTheme'; +import Profile from './Profile'; + +import { scrollToSection } from '../../utils/scrollToSection'; + const Nav = styled.div` position: fixed; z-index: 100; top: 0; - width: 100%; + /* 반응형 패딩 */ + padding: 0px 20px; + + width: 100vw; height: 80px; padding: 0px 100px; box-sizing: border-box; @@ -19,6 +27,14 @@ const Nav = styled.div` align-items: center; background-color: var(--nav-background); + + /* 스크롤 가능하게 설정 */ + white-space: nowrap; + overflow-x: auto; + + ::-webkit-scrollbar { + display: none; /* 스크롤바 숨김 */ + } `; const Logo = styled.div` @@ -32,16 +48,16 @@ const AuthLinks = styled.div` display: flex; gap: 20px; font-size: 16px; - - /* 비율 고정 */ - flex-grow: 0; - flex-shrink: 0; + + white-space: nowrap; `; const menu_style = { textDecoration: 'none', color: 'var(--primary-text-color)', + cursor: 'pointer', }; + const Menus = styled.div` width: 500px; @@ -52,43 +68,39 @@ const Menus = styled.div` font-size: 16px; font-weight: lighter; - /* 비율 고정 */ - flex-grow: 0; - flex-shrink: 0; + white-space: nowrap; `; export const Navigation = () => { const { isLoggedIn, logout, user } = useAuth(); const { theme, toggleTheme } = useTheme(); + console.log(user); + return (