From d569ecc3c9be9146e7d7a413bb168b1fb7a342ca Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Wed, 8 Oct 2025 16:51:31 +0900 Subject: [PATCH 01/15] =?UTF-8?q?=E2=9E=95=20(#339)=20LocatorJs=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/babel.config.js | 11 + frontend/package-lock.json | 1423 ++++++++++++++++++++++++++++++++---- frontend/package.json | 1 + 3 files changed, 1300 insertions(+), 135 deletions(-) create mode 100644 frontend/babel.config.js diff --git a/frontend/babel.config.js b/frontend/babel.config.js new file mode 100644 index 00000000..c0e6859f --- /dev/null +++ b/frontend/babel.config.js @@ -0,0 +1,11 @@ +module.exports = { + presets: ["next/babel"], + plugins: [ + [ + "@locator/babel-jsx/dist", + { + env: "development", + }, + ], + ], +}; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 96bae6e9..051fa4eb 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -35,6 +35,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", + "@locator/babel-jsx": "^0.4.4", "@types/eslint": "^9.6.1", "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.7", @@ -66,6 +67,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -80,14 +94,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -142,15 +156,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -158,12 +172,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -195,17 +209,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "engines": { @@ -266,41 +280,50 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -310,21 +333,21 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -348,14 +371,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -365,40 +388,40 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -432,12 +455,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.28.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -567,6 +590,38 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -956,13 +1011,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1193,6 +1248,75 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", @@ -1316,6 +1440,26 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", @@ -1485,6 +1629,47 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/preset-react": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.27.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", @@ -1498,54 +1683,45 @@ } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" }, "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==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2202,18 +2378,32 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2225,15 +2415,6 @@ "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==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -2251,15 +2432,56 @@ "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==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@locator/babel-jsx": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@locator/babel-jsx/-/babel-jsx-0.4.4.tgz", + "integrity": "sha512-77H+nhwjBxv+kxGJdAUCrKA244LsIYDe17rXn/TJTdOkXfTZGPV55W5Vmac/W3cORbeN90pqEJkk8ct1SejuqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.16.0", + "@babel/preset-env": "^7.22.5", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.22.5", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.21.5", + "@locator/runtime": "^0.4.4", + "@locator/shared": "^0.4.4" + } + }, + "node_modules/@locator/runtime": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@locator/runtime/-/runtime-0.4.4.tgz", + "integrity": "sha512-6uCkE12N5y0136wcBNEeyYn1iEOFKG+SDYsNeCJsC54/yyD4/6fKywOYJqManA64mg20f41utBFP+b262oZYXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.1", + "@locator/shared": "^0.4.4", + "solid-js": "^1.7.8", + "tailwindcss": "^3.3.2" + } + }, + "node_modules/@locator/shared": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@locator/shared/-/shared-0.4.4.tgz", + "integrity": "sha512-8fF395jPvrAAetsiQCj/8HcZXfDiY5mL1M/d4V2jDbjKkzM/BiZAukn4ndeuqSehnsck1Uu7ir8wDRTeg34Mog==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + } + }, "node_modules/@napi-rs/canvas": { "version": "0.1.78", "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.78.tgz", @@ -2957,6 +3179,17 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -4049,6 +4282,19 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4064,6 +4310,34 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4420,6 +4694,19 @@ "node": "*" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4566,6 +4853,16 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001707", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", @@ -5195,6 +5492,13 @@ "node": ">=0.10" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5207,6 +5511,13 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -5257,7 +5568,14 @@ "node": ">= 0.4" } }, - "node_modules/ecdsa-sig-formatter": { + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", @@ -6205,6 +6523,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", @@ -6771,6 +7106,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -6881,6 +7229,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", @@ -7191,6 +7549,22 @@ "node": ">= 0.4" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -7238,6 +7612,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7555,6 +7939,13 @@ "node": ">=10" } }, + "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/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -7873,12 +8264,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -8014,6 +8427,16 @@ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8023,6 +8446,16 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -8227,6 +8660,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -8296,6 +8736,30 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -8365,6 +8829,16 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8466,6 +8940,50 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, "node_modules/postcss-load-config": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", @@ -8543,6 +9061,46 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-selector-parser": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", @@ -8802,6 +9360,26 @@ "react-dom": ">=16.6.0" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -9347,6 +9925,29 @@ "randombytes": "^2.1.0" } }, + "node_modules/seroval": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", + "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", + "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -9544,6 +10145,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -9563,6 +10177,18 @@ "node": ">=8" } }, + "node_modules/solid-js": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.9.tgz", + "integrity": "sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.1.0", + "seroval": "~1.3.0", + "seroval-plugins": "~1.3.0" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -9634,6 +10260,70 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/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" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -9757,16 +10447,56 @@ "node": ">=4" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">=4" - } - }, + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/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/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", @@ -9852,6 +10582,86 @@ "node": ">= 8" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9882,6 +10692,224 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "license": "MIT" }, + "node_modules/tailwindcss": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/tailwindcss/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -10024,6 +11052,29 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -10109,6 +11160,13 @@ "typescript": ">=4.8.4" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -11077,6 +12135,101 @@ "workbox-core": "6.6.0" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index ff9077ee..5729ab42 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,6 +36,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3", + "@locator/babel-jsx": "^0.4.4", "@types/eslint": "^9.6.1", "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.7", From b608e14e98760210ab2d96d19be915420ad3e44c Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Wed, 8 Oct 2025 17:28:39 +0900 Subject: [PATCH 02/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20Nav=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 --- .../(landing)/_components/HeroSection.tsx | 5 +++ .../(landing)/_components/Navbar.tsx | 22 ++++++++++ .../(non-login)/(landing)/page.module.scss | 41 ++++++++++++++++++ frontend/app/(non-login)/(landing)/page.tsx | 13 +++++- frontend/constants/images.ts | 2 + frontend/public/images/logo5.png | Bin 0 -> 26233 bytes 6 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 frontend/app/(non-login)/(landing)/_components/HeroSection.tsx create mode 100644 frontend/app/(non-login)/(landing)/_components/Navbar.tsx create mode 100644 frontend/public/images/logo5.png diff --git a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx new file mode 100644 index 00000000..a153c4b3 --- /dev/null +++ b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx @@ -0,0 +1,5 @@ +import React from "react"; + +export default function HeroSection() { + return
HeroSection
; +} diff --git a/frontend/app/(non-login)/(landing)/_components/Navbar.tsx b/frontend/app/(non-login)/(landing)/_components/Navbar.tsx new file mode 100644 index 00000000..c935a3b1 --- /dev/null +++ b/frontend/app/(non-login)/(landing)/_components/Navbar.tsx @@ -0,0 +1,22 @@ +import Link from "next/link"; +import Image from "next/image"; +import styles from "../page.module.scss"; +import { ROUTES } from "@/constants/routes"; +import { IMAGES } from "@/constants/images"; + +export default function Navbar() { + return ( + + ); +} diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index e69de29b..532fa071 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -0,0 +1,41 @@ +.navbar { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 8vh; + background-color: $color-blue; + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + z-index: $z-header; + overflow: hidden; + display: flex; + justify-content: space-between; + align-items: center; + padding: $spacing-sm $spacing-xl; + .logo { + height: 100%; + } + .login { + border: 2px solid $color-white; + padding: $spacing-sm $spacing-lg; + border-radius: $radius-full; + color: $color-white; + font-weight: $font-weight-medium; + font-size: $font-size-md; + cursor: pointer; + transition: $transition-default; + font-weight: $font-weight-bold; + + &:hover { + background-color: $color-white; + color: $color-blue; + } + } +} + +.contents { + margin-top: 8vh; + width: 100%; + background-color: $color-white; +} diff --git a/frontend/app/(non-login)/(landing)/page.tsx b/frontend/app/(non-login)/(landing)/page.tsx index 6811aea9..5e4b14c3 100644 --- a/frontend/app/(non-login)/(landing)/page.tsx +++ b/frontend/app/(non-login)/(landing)/page.tsx @@ -1,3 +1,14 @@ +import HeroSection from "./_components/HeroSection"; +import Navbar from "./_components/Navbar"; +import styles from "./page.module.scss"; + export default function LandingPage() { - return
home
; + return ( +
+ +
+ +
+
+ ); } diff --git a/frontend/constants/images.ts b/frontend/constants/images.ts index dba5e556..6bc25394 100644 --- a/frontend/constants/images.ts +++ b/frontend/constants/images.ts @@ -2,6 +2,7 @@ import logo1 from "@/public/images/logo1.png"; import logo2 from "@/public/images/logo2.png"; import logo3 from "@/public/images/logo3.png"; +import logo5 from "@/public/images/logo5.png"; import introImage from "@/public/images/intro_image.png"; import qrCode from "@/public/images/QRcode.png"; import kakaoLogo from "@/public/images/kakao_logo.png"; @@ -25,6 +26,7 @@ export const IMAGES = { logo1, logo2, logo3, + logo5, introImage, qrCode, kakaoLogo, diff --git a/frontend/public/images/logo5.png b/frontend/public/images/logo5.png new file mode 100644 index 0000000000000000000000000000000000000000..1da0883adf055b157cb0736af98485d59eb69ccf GIT binary patch literal 26233 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 ok^i2>{~pQz|Ifz3k2_S)&Jenk=9lT Date: Wed, 8 Oct 2025 17:32:32 +0900 Subject: [PATCH 03/15] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20(#339)=20non-logi?= =?UTF-8?q?n=20body=20=EB=86=92=EC=9D=B4=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/app/(non-login)/(landing)/page.module.scss | 9 ++++++++- frontend/app/globals.scss | 4 ---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 532fa071..8f9df5c7 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -14,7 +14,10 @@ align-items: center; padding: $spacing-sm $spacing-xl; .logo { - height: 100%; + height: auto; + max-height: 100%; + width: auto; + object-fit: contain; } .login { border: 2px solid $color-white; @@ -38,4 +41,8 @@ margin-top: 8vh; width: 100%; background-color: $color-white; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; } diff --git a/frontend/app/globals.scss b/frontend/app/globals.scss index f92b696a..2ddf4578 100644 --- a/frontend/app/globals.scss +++ b/frontend/app/globals.scss @@ -80,10 +80,6 @@ body.teacher-body.show-header > .content { height: 94vh; } -body.non-login-body { - height: 100vh; -} - body.non-login-body > .content { height: 100%; } From feb908e5e91e7e72a3b4d60729f649192ef34f6a Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Wed, 8 Oct 2025 17:41:13 +0900 Subject: [PATCH 04/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20HeroSection=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(landing)/_components/HeroSection.tsx | 43 +++++- .../(non-login)/(landing)/page.module.scss | 129 +++++++++++++++++- 2 files changed, 170 insertions(+), 2 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx index a153c4b3..5e29d401 100644 --- a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx +++ b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx @@ -1,5 +1,46 @@ import React from "react"; +import Image from "next/image"; +import Link from "next/link"; +import styles from "../page.module.scss"; +import { IMAGES } from "@/constants/images"; export default function HeroSection() { - return
HeroSection
; + return ( +
+
+
+
+

CLASSLOG,

+

당신의 강의를 더 스마트하게

+

수업 녹음, 실시간 소통, AI 기반 퀴즈 생성을 통해

+

강의 준비부터 피드백까지 한 번에 해결하세요.

+
+
+ + 시작하기 + + → + + +
+
+
+
+ 소개 이미지 +
+
+
+ +
+ +
+
+ ); } diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 8f9df5c7..7cde7e82 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -38,7 +38,6 @@ } .contents { - margin-top: 8vh; width: 100%; background-color: $color-white; display: flex; @@ -46,3 +45,131 @@ align-items: center; justify-content: center; } + +.heroSection { + width: 100%; + height: 100vh; + background-color: $color-blue; + padding: calc(8vh + $spacing-xl) $spacing-xl $spacing-xl $spacing-xl; +} + +.heroInner { + height: 100%; + display: grid; + grid-template-columns: 1.1fr 0.9fr; + gap: $spacing-2xl; + align-items: center; +} + +.heroLeft { + color: $color-white; +} + +.textWrapper { + h1 { + font-size: 96px; + font-weight: 900; + line-height: 1; + letter-spacing: -0.02em; + margin-bottom: $spacing-xs; + } + h2 { + font-size: 56px; + font-weight: 800; + line-height: 1.1; + letter-spacing: -0.02em; + margin-bottom: $spacing-md; + } + p { + font-size: $font-size-lg; + line-height: 1.6; + opacity: 0.95; + } +} + +.heroDesc { + max-width: 560px; + margin-bottom: $spacing-xl; +} + +.heroCtas { + display: flex; + align-items: center; + gap: $spacing-lg; +} + +.primaryCta { + background-color: $color-white; + color: $color-blue; + padding: $spacing-md $spacing-2xl; + border-radius: $radius-full; + font-weight: $font-weight-bold; + font-size: $font-size-lg; + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); + transition: $transition-default; + + &:hover { + transform: translateY(-2px); + box-shadow: 0 10px 28px rgba(0, 0, 0, 0.12); + } +} + +.arrow { + margin-left: $spacing-sm; +} + +.heroRight { + display: flex; + align-items: center; + justify-content: center; +} + +.introImageWrapper { + width: 100%; + max-width: 650px; + display: flex; + align-items: center; + justify-content: center; +} + +.heroImage { + width: 100%; + height: 100%; + object-fit: cover; +} + +.scrollIndicator { + position: absolute; + left: 50%; + bottom: $spacing-lg; + transform: translateX(-50%); + width: 72px; + height: 72px; + border-radius: 50%; + background-color: $color-white; + color: $color-blue; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); +} + +.scrollDot { + width: 8px; + height: 16px; + border-radius: 8px; + background-color: $color-blue; + animation: bounce 1.4s infinite; +} + +@keyframes bounce { + 0%, + 100% { + transform: translateY(0); + opacity: 0.6; + } + 50% { + transform: translateY(10px); + opacity: 1; + } +} From 71362737ad22c7a0cc255bd085b466db4371c817 Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Wed, 8 Oct 2025 17:45:06 +0900 Subject: [PATCH 05/15] =?UTF-8?q?=F0=9F=92=84=20(#339)=20=EB=A1=9C?= =?UTF-8?q?=EA=B3=A0=20=EC=9D=B4=EB=AF=B8=EC=A7=80=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(non-login)/(landing)/_components/HeroSection.tsx | 11 +++++++++-- frontend/app/(non-login)/(landing)/page.module.scss | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx index 5e29d401..5d294a1a 100644 --- a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx +++ b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx @@ -3,6 +3,7 @@ import Image from "next/image"; import Link from "next/link"; import styles from "../page.module.scss"; import { IMAGES } from "@/constants/images"; +import { ROUTES } from "@/constants/routes"; export default function HeroSection() { return ( @@ -10,13 +11,19 @@ export default function HeroSection() {
-

CLASSLOG,

+ ClassLog Logo

당신의 강의를 더 스마트하게

수업 녹음, 실시간 소통, AI 기반 퀴즈 생성을 통해

강의 준비부터 피드백까지 한 번에 해결하세요.

- + 시작하기 → diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 7cde7e82..340259ff 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -59,10 +59,14 @@ grid-template-columns: 1.1fr 0.9fr; gap: $spacing-2xl; align-items: center; + margin: 0 auto; } .heroLeft { color: $color-white; + display: flex; + flex-direction: column; + gap: $spacing-xl; } .textWrapper { From 5a58760206ee97e4e1b38df7d8688cb2d4d5419a Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 16:44:00 +0900 Subject: [PATCH 06/15] =?UTF-8?q?=F0=9F=92=84=20(#339)=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=EC=97=90=EC=85=8B=20=EB=B0=98=EC=9D=91?= =?UTF-8?q?=ED=98=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(landing)/_components/HeroSection.tsx | 26 +++--- .../(non-login)/(landing)/page.module.scss | 83 +++++++++++-------- 2 files changed, 64 insertions(+), 45 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx index 5d294a1a..02104489 100644 --- a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx +++ b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx @@ -1,9 +1,12 @@ +"use client"; + import React from "react"; import Image from "next/image"; import Link from "next/link"; import styles from "../page.module.scss"; import { IMAGES } from "@/constants/images"; import { ROUTES } from "@/constants/routes"; +import { MoveDown } from "lucide-react"; export default function HeroSection() { return ( @@ -31,22 +34,21 @@ export default function HeroSection() {
-
-
- 소개 이미지 -
+ +
+ 소개 이미지
- +
); diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 340259ff..e503439a 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -51,32 +51,36 @@ height: 100vh; background-color: $color-blue; padding: calc(8vh + $spacing-xl) $spacing-xl $spacing-xl $spacing-xl; + overflow: hidden; } .heroInner { - height: 100%; - display: grid; - grid-template-columns: 1.1fr 0.9fr; + height: calc(100vh - 8vh - $spacing-xl); + display: flex; + flex-direction: row; gap: $spacing-2xl; - align-items: center; + align-items: start; margin: 0 auto; + @include respond-to(md) { + flex-direction: column; + } } .heroLeft { + padding: $spacing-3xl; color: $color-white; display: flex; flex-direction: column; gap: $spacing-xl; + width: 100%; + justify-content: flex-start; + align-items: flex-start; + @include respond-to(sm) { + padding: $spacing-md; + } } .textWrapper { - h1 { - font-size: 96px; - font-weight: 900; - line-height: 1; - letter-spacing: -0.02em; - margin-bottom: $spacing-xs; - } h2 { font-size: 56px; font-weight: 800; @@ -91,11 +95,6 @@ } } -.heroDesc { - max-width: 560px; - margin-bottom: $spacing-xl; -} - .heroCtas { display: flex; align-items: center; @@ -122,18 +121,38 @@ margin-left: $spacing-sm; } -.heroRight { - display: flex; - align-items: center; - justify-content: center; -} - .introImageWrapper { width: 100%; - max-width: 650px; - display: flex; - align-items: center; - justify-content: center; + height: 100%; + position: relative; + + img { + transition: $transition-default; + height: auto; + object-fit: contain; + right: -20%; + bottom: -8%; + position: absolute; + width: 800px; + + @include respond-to(lg) { + width: 600px; + right: -25%; + bottom: -10%; + } + + @include respond-to(md) { + width: 500px; + right: -10%; + bottom: -10%; + } + + @include respond-to(sm) { + width: 400px; + right: -10%; + bottom: -10%; + } + } } .heroImage { @@ -156,24 +175,22 @@ align-items: center; justify-content: center; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); + cursor: pointer; + transition: $transition-default; } -.scrollDot { - width: 8px; - height: 16px; - border-radius: 8px; - background-color: $color-blue; +.downArrow { animation: bounce 1.4s infinite; } @keyframes bounce { 0%, 100% { - transform: translateY(0); + transform: translateY(-5px); opacity: 0.6; } 50% { - transform: translateY(10px); + transform: translateY(5px); opacity: 1; } } From 44f3b23f9d27dc06b5e68371f0471e2a67aa562d Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 16:47:19 +0900 Subject: [PATCH 07/15] =?UTF-8?q?=F0=9F=92=84=20(#339)=20=EB=B0=98?= =?UTF-8?q?=EC=9D=91=ED=98=95=20=ED=8F=B0=ED=8A=B8=20=ED=81=AC=EA=B8=B0=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A1=9C=EA=B3=A0=20=ED=81=AC=EA=B8=B0=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(non-login)/(landing)/page.module.scss | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index e503439a..e45a184e 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -87,12 +87,31 @@ line-height: 1.1; letter-spacing: -0.02em; margin-bottom: $spacing-md; + + @include respond-to(lg) { + font-size: 48px; + } + + @include respond-to(sm) { + font-size: 32px; + } } p { font-size: $font-size-lg; line-height: 1.6; opacity: 0.95; } + .logo { + width: 500px; + height: auto; + object-fit: contain; + @include respond-to(lg) { + width: 400px; + } + @include respond-to(sm) { + width: 300px; + } + } } .heroCtas { From 99762cf8cdf843098ce4150f89f99cceaf946f29 Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 17:32:06 +0900 Subject: [PATCH 08/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20IntroSection=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(landing)/_components/IntroSection.tsx | 70 ++++++++ .../(non-login)/(landing)/page.module.scss | 170 ++++++++++++++++++ frontend/app/(non-login)/(landing)/page.tsx | 2 + 3 files changed, 242 insertions(+) create mode 100644 frontend/app/(non-login)/(landing)/_components/IntroSection.tsx diff --git a/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx b/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx new file mode 100644 index 00000000..d516527b --- /dev/null +++ b/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx @@ -0,0 +1,70 @@ +import styles from "../page.module.scss"; +import { + MessageCircle, + MessageCircleQuestion, + PencilLine, + Videotape, +} from "lucide-react"; + +const FEATURES = [ + { + icon: , + title: "즉시 질문, 즉시 피드백", + description: + "수업 중 궁금한 점은 바로 질문하고 실시간으로 소통할 수 있어요.", + }, + { + icon: , + title: "AI 기반 맞춤형 퀴즈", + description: + "강의자료와 녹음을 바탕으로 AI가 자동으로 퀴즈를 만들어요. 복습과 이해도 확인이 더 쉬워집니다.", + }, + { + icon: , + title: "강의자료 업로드 & 수업용 실시간 필기", + description: + "강의 중 자료에 바로 필기하며 핵심 내용을 학생들과 함께 나눌 수 있어요.", + }, + { + icon: , + title: "언제든 다시 듣는 수업", + description: + "수업은 자동 녹음되며, 언제든 다시 듣거나 다운로드할 수 있어요.", + }, +]; + +export default function IntroSection() { + return ( +
+
+

+ What You Can Do +
+ with ClassLog +

+
+

+ ClassLog의 핵심 기능 4가지를 소개합니다! +

+

+ 실시간 질문, AI 기반 퀴즈 생성, 강의자료 업로드 및 필기, 자동 수업 + 녹음 등
+ 수업의 전 과정을 하나의 플랫폼에서 관리하고, 학습의 흐름을 놓치지 + 않도록 도와줍니다. +

+
+
+
+ {FEATURES.map((feature) => ( +
+
{feature.icon}
+
+

{feature.title}

+

{feature.description}

+
+
+ ))} +
+
+ ); +} diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index e45a184e..d6aab89c 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -213,3 +213,173 @@ opacity: 1; } } + +.introSection { + width: 100%; + min-height: 100vh; + background-color: $color-white; + padding: calc($spacing-xl + $spacing-3xl); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: $spacing-3xl; + + @include respond-to(md) { + padding: $spacing-2xl $spacing-lg; + gap: $spacing-2xl; + } +} + +.introHeader { + width: 100%; + text-align: center; + display: flex; + flex-direction: row; + align-items: flex-end; + justify-content: space-between; + + @include respond-to(md) { + flex-direction: column; + align-items: center; + // gap: $spacing-xl; + } +} + +.introTitle { + font-size: 64px; + font-weight: 700; + line-height: 1.2; + text-align: left; + margin-bottom: calc($spacing-3xl * 2); + + @include respond-to(lg) { + font-size: 56px; + } + + @include respond-to(md) { + font-size: 40px; + text-align: center; + margin-bottom: $spacing-xl; + } + + @include respond-to(sm) { + font-size: 32px; + } +} + +.introDescription { + text-align: right; + max-width: 600px; + + @include respond-to(md) { + text-align: center; + } +} + +.introSubtitle { + font-size: $font-size-lg; + font-weight: 600; + margin-bottom: $spacing-md; + line-height: 1.4; + + @include respond-to(md) { + font-size: $font-size-lg; + } + @include respond-to(sm) { + font-size: $font-size-md; + } +} + +.introText { + font-size: $font-size-md; + line-height: 1.6; + font-weight: $font-weight-regular; + margin: 0; + + @include respond-to(md) { + font-size: $font-size-md; + } + @include respond-to(sm) { + font-size: $font-size-sm; + } +} + +.featuresContainer { + display: flex; + flex-direction: row; + gap: $spacing-lg; + width: 100%; + + @include respond-to(md) { + flex-direction: column; + } +} + +.featureCard { + width: 25%; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: $spacing-lg; + background-color: $color-neutral-8; + border-radius: 16px; + padding: $spacing-xl; + transition: $transition-default; + border: 1px solid $color-neutral-7; + + @include respond-to(md) { + width: 100%; + padding: $spacing-md; + } + + @include respond-to(sm) { + gap: $spacing-sm; + } +} + +.featureIcon { + flex-shrink: 0; + width: 48px; + height: 48px; + background-color: $color-white; + border-radius: $radius-full; + border: 1px solid $color-neutral-7; + display: flex; + align-items: center; + justify-content: center; +} + +.featureIcon svg { + width: 24px; + height: 24px; + color: $color-blue; +} + +.featureContent { + flex: 1; + display: flex; + flex-direction: column; + gap: $spacing-xs; + + @include respond-to(md) { + gap: 0; + } +} + +.featureTitle { + font-size: $font-size-xl; + font-weight: 600; + margin: 0 0 $spacing-sm 0; + + @include respond-to(sm) { + font-size: $font-size-lg; + } +} + +.featureDescription { + font-size: $font-size-md; + color: $color-neutral-4; + line-height: 1.5; + margin: 0; +} diff --git a/frontend/app/(non-login)/(landing)/page.tsx b/frontend/app/(non-login)/(landing)/page.tsx index 5e4b14c3..0371c43f 100644 --- a/frontend/app/(non-login)/(landing)/page.tsx +++ b/frontend/app/(non-login)/(landing)/page.tsx @@ -1,4 +1,5 @@ import HeroSection from "./_components/HeroSection"; +import IntroSection from "./_components/IntroSection"; import Navbar from "./_components/Navbar"; import styles from "./page.module.scss"; @@ -8,6 +9,7 @@ export default function LandingPage() {
+
); From ac6198e933c9d5a440c915c72515e9646875d4fe Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 17:41:11 +0900 Subject: [PATCH 09/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20HeroSection=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=ED=99=94=EC=82=B4=ED=91=9C=20=ED=81=B4=EB=A6=AD?= =?UTF-8?q?=EC=8B=9C=20IntroSection=EC=9C=BC=EB=A1=9C=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(landing)/_components/HeroSection.tsx | 16 ++++++++++++++-- .../(landing)/_components/IntroSection.tsx | 9 +++++++-- .../app/(non-login)/(landing)/page.module.scss | 2 +- frontend/app/(non-login)/(landing)/page.tsx | 9 +++++++-- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx index 02104489..77802ba0 100644 --- a/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx +++ b/frontend/app/(non-login)/(landing)/_components/HeroSection.tsx @@ -8,7 +8,19 @@ import { IMAGES } from "@/constants/images"; import { ROUTES } from "@/constants/routes"; import { MoveDown } from "lucide-react"; -export default function HeroSection() { +interface HeroSectionProps { + introSectionRef?: React.RefObject; +} + +export default function HeroSection({ introSectionRef }: HeroSectionProps) { + const handleScrollToIntro = () => { + if (introSectionRef?.current) { + introSectionRef.current.scrollIntoView({ + behavior: "smooth", + block: "start", + }); + } + }; return (
@@ -47,7 +59,7 @@ export default function HeroSection() {
-
+
diff --git a/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx b/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx index d516527b..17ba8d25 100644 --- a/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx +++ b/frontend/app/(non-login)/(landing)/_components/IntroSection.tsx @@ -1,3 +1,4 @@ +import React from "react"; import styles from "../page.module.scss"; import { MessageCircle, @@ -33,9 +34,13 @@ const FEATURES = [ }, ]; -export default function IntroSection() { +export default function IntroSection({ + ref, +}: { + ref: React.RefObject; +}) { return ( -
+

What You Can Do diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index d6aab89c..98077b81 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -226,7 +226,7 @@ gap: $spacing-3xl; @include respond-to(md) { - padding: $spacing-2xl $spacing-lg; + padding: calc(8vh + $spacing-2xl) $spacing-lg $spacing-2xl $spacing-lg; gap: $spacing-2xl; } } diff --git a/frontend/app/(non-login)/(landing)/page.tsx b/frontend/app/(non-login)/(landing)/page.tsx index 0371c43f..58d60f86 100644 --- a/frontend/app/(non-login)/(landing)/page.tsx +++ b/frontend/app/(non-login)/(landing)/page.tsx @@ -1,15 +1,20 @@ +"use client"; + +import { useRef } from "react"; import HeroSection from "./_components/HeroSection"; import IntroSection from "./_components/IntroSection"; import Navbar from "./_components/Navbar"; import styles from "./page.module.scss"; export default function LandingPage() { + const introSectionRef = useRef(null); + return (
- - + +
); From 202faf6c3e25f8e877d526755dee61261f37b0b8 Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 17:57:53 +0900 Subject: [PATCH 10/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20RoadMapSection=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(landing)/_components/RoadMapSection.tsx | 65 +++++++ .../(non-login)/(landing)/page.module.scss | 165 ++++++++++++++++++ frontend/app/(non-login)/(landing)/page.tsx | 2 + 3 files changed, 232 insertions(+) create mode 100644 frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx diff --git a/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx b/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx new file mode 100644 index 00000000..54ac8222 --- /dev/null +++ b/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx @@ -0,0 +1,65 @@ +import styles from "../page.module.scss"; + +const ROAD_MAP = [ + { + title: "강사", + steps: [ + "클래스 생성", + "클래스별 강의 생성", + "강의자료 업로드", + "강의 시작 (필기 + 질문 뷰어 + 자동 녹음)", + "강의 종료 후 AI 퀴즈 자동 생성 및 배포", + "퀴즈 결과 기반 대시보드 제공", + ], + }, + { + title: "학생", + steps: [ + "클래스 입장", + "강의자료 다운로드", + "실시간 질문 참여", + "녹음 파일 다운로드 및 다시 듣기", + "AI 퀴즈 풀기 + 결과 확인", + ], + }, +]; + +export default function RoadMapSection() { + return ( +
+
+

HOW IT WORKS?

+
+
+

+ ClassLog, 어떻게 활용할 수 있을까요? 강사와 학생 각각의 흐름에 + 맞춰 스마트한 학습 경험을 제공합니다. 수업 전부터 수업 중, 수업 + 후까지 — 모든 과정을 ClassLog 하나로 완성하세요. +

+
+
+

+ Get to know More
+ about ClassLog +

+
+
+
+
+ {ROAD_MAP.map((item) => ( +
+

{item.title}

+
    + {item.steps.map((step, index) => ( +
  • + {index + 1} + {step} +
  • + ))} +
+
+ ))} +
+
+ ); +} diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 98077b81..4bc05e82 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -383,3 +383,168 @@ line-height: 1.5; margin: 0; } + +.roadMapSection { + width: 100%; + min-height: 100vh; + background-color: $color-neutral-8; + padding: calc($spacing-xl + $spacing-3xl); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: $spacing-3xl; + + @include respond-to(md) { + padding: calc(8vh + $spacing-2xl) $spacing-lg $spacing-2xl $spacing-lg; + gap: $spacing-2xl; + } +} + +.roadMapHeader { + width: 100%; + text-align: center; + margin-bottom: $spacing-3xl; +} + +.roadMapTitle { + font-size: 96px; + font-weight: 700; + color: $color-blue; + margin-bottom: $spacing-2xl; + + @include respond-to(md) { + font-size: 64px; + } + + @include respond-to(sm) { + font-size: 48px; + } +} + +.roadMapDescription { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: $spacing-2xl; + margin: 0 auto; + + @include respond-to(md) { + flex-direction: column; + align-items: center; + text-align: center; + } +} + +.roadMapText { + flex: 1; + text-align: left; + + @include respond-to(md) { + text-align: center; + } + + p { + font-size: $font-size-lg; + line-height: 1.6; + color: #333; + margin: 0; + } +} + +.roadMapCta { + flex-shrink: 0; + + p { + font-size: 64px; + text-align: right; + font-weight: 700; + color: #000; + margin: 0; + line-height: 1.2; + + @include respond-to(lg) { + font-size: 48px; + } + + @include respond-to(md) { + display: none; + } + } +} + +.roadMapCards { + display: flex; + gap: $spacing-3xl; + width: 100%; + height: 100%; + + @include respond-to(md) { + flex-direction: column; + gap: $spacing-2xl; + } +} + +.roadMapCard { + flex: 1; + background-color: $color-white; + border-radius: 16px; + padding: $spacing-2xl; + transition: $transition-default; + height: fit-content; + + @include respond-to(md) { + padding: $spacing-xl; + } +} + +.cardTitle { + font-size: 24px; + font-weight: 700; + text-align: center; + margin-bottom: $spacing-xl; + + @include respond-to(sm) { + font-size: 20px; + } +} + +.stepsList { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: $spacing-lg; +} + +.stepItem { + display: flex; + align-items: center; + gap: $spacing-md; +} + +.stepNumber { + flex-shrink: 0; + width: 32px; + height: 32px; + background-color: $color-blue; + color: $color-white; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: 700; + font-size: $font-size-md; +} + +.stepText { + flex: 1; + font-size: $font-size-lg; + line-height: 1.5; + color: $color-neutral-3; + + @include respond-to(sm) { + font-size: $font-size-md; + } +} diff --git a/frontend/app/(non-login)/(landing)/page.tsx b/frontend/app/(non-login)/(landing)/page.tsx index 58d60f86..07bd1808 100644 --- a/frontend/app/(non-login)/(landing)/page.tsx +++ b/frontend/app/(non-login)/(landing)/page.tsx @@ -5,6 +5,7 @@ import HeroSection from "./_components/HeroSection"; import IntroSection from "./_components/IntroSection"; import Navbar from "./_components/Navbar"; import styles from "./page.module.scss"; +import RoadMapSection from "./_components/RoadMapSection"; export default function LandingPage() { const introSectionRef = useRef(null); @@ -15,6 +16,7 @@ export default function LandingPage() {
+

); From 243ed51be35c6f6639b8e1a831621d5e9395e33a Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 19:57:39 +0900 Subject: [PATCH 11/15] =?UTF-8?q?=F0=9F=92=84=20(#339)=20=EB=B0=98?= =?UTF-8?q?=EC=9D=91=ED=98=95=20=EC=8A=A4=ED=83=80=EC=9D=BC=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 --- .../(landing)/_components/RoadMapSection.tsx | 11 ++++++----- .../(non-login)/(landing)/page.module.scss | 19 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx b/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx index 54ac8222..4c3822c2 100644 --- a/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx +++ b/frontend/app/(non-login)/(landing)/_components/RoadMapSection.tsx @@ -31,11 +31,12 @@ export default function RoadMapSection() {

HOW IT WORKS?

-

- ClassLog, 어떻게 활용할 수 있을까요? 강사와 학생 각각의 흐름에 - 맞춰 스마트한 학습 경험을 제공합니다. 수업 전부터 수업 중, 수업 - 후까지 — 모든 과정을 ClassLog 하나로 완성하세요. -

+ ClassLog, 어떻게 활용할 수 있을까요? +
+ 강사와 학생 각각의 흐름에 맞춰 스마트한 학습 경험을 제공합니다. +
+ 수업 전부터 수업 중, 수업 후까지 — 모든 과정을 ClassLog 하나로 + 완성하세요.

diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 4bc05e82..3c7990b4 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -226,7 +226,7 @@ gap: $spacing-3xl; @include respond-to(md) { - padding: calc(8vh + $spacing-2xl) $spacing-lg $spacing-2xl $spacing-lg; + padding: calc(8vh + $spacing-2xl) $spacing-lg; gap: $spacing-2xl; } } @@ -393,10 +393,10 @@ flex-direction: column; align-items: center; justify-content: center; - gap: $spacing-3xl; + gap: $spacing-2xl; @include respond-to(md) { - padding: calc(8vh + $spacing-2xl) $spacing-lg $spacing-2xl $spacing-lg; + padding: calc(8vh + $spacing-2xl) $spacing-lg; gap: $spacing-2xl; } } @@ -440,15 +440,14 @@ flex: 1; text-align: left; + font-size: $font-size-lg; + line-height: 1.6; + font-weight: $font-weight-regular; + margin: 0; + @include respond-to(md) { text-align: center; - } - - p { - font-size: $font-size-lg; - line-height: 1.6; - color: #333; - margin: 0; + font-size: $font-size-md; } } From 98129b90121e8dba195fc20eb8b9c638acf4ab8a Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 20:26:08 +0900 Subject: [PATCH 12/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20StartButtonSection?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/StartButtonSection.tsx | 36 ++++ .../(non-login)/(landing)/page.module.scss | 174 +++++++++++++++++- frontend/app/(non-login)/(landing)/page.tsx | 2 + frontend/constants/images.ts | 2 + frontend/public/images/logo6.png | Bin 0 -> 60722 bytes 5 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 frontend/app/(non-login)/(landing)/_components/StartButtonSection.tsx create mode 100644 frontend/public/images/logo6.png diff --git a/frontend/app/(non-login)/(landing)/_components/StartButtonSection.tsx b/frontend/app/(non-login)/(landing)/_components/StartButtonSection.tsx new file mode 100644 index 00000000..48bae75e --- /dev/null +++ b/frontend/app/(non-login)/(landing)/_components/StartButtonSection.tsx @@ -0,0 +1,36 @@ +import { IMAGES } from "@/constants/images"; +import styles from "../page.module.scss"; +import { MoveRight } from "lucide-react"; +import Image from "next/image"; +import { ROUTES } from "@/constants/routes"; +import { useRouter } from "next/navigation"; + +export function StartButtonSection() { + const router = useRouter(); + return ( +

+ ClassLog Logo +
+

+ 지금 바로 ClassLog를 +
+ 시작해보세요! +

+

+ 수업의 시작부터 끝까지, 지금 ClassLog와 함께하세요. +
+ 기록하고, 공유하고, 더 깊이 있게 배우는 경험을 제공합니다. +

+ +
+ ClassLog Logo +
+ ); +} diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 3c7990b4..03ca551e 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -50,7 +50,7 @@ width: 100%; height: 100vh; background-color: $color-blue; - padding: calc(8vh + $spacing-xl) $spacing-xl $spacing-xl $spacing-xl; + padding: calc(8vh + $spacing-xl) $spacing-3xl $spacing-3xl $spacing-3xl; overflow: hidden; } @@ -218,7 +218,7 @@ width: 100%; min-height: 100vh; background-color: $color-white; - padding: calc($spacing-xl + $spacing-3xl); + padding: calc($spacing-3xl + $spacing-3xl); display: flex; flex-direction: column; align-items: center; @@ -388,7 +388,7 @@ width: 100%; min-height: 100vh; background-color: $color-neutral-8; - padding: calc($spacing-xl + $spacing-3xl); + padding: calc($spacing-3xl + $spacing-3xl); display: flex; flex-direction: column; align-items: center; @@ -547,3 +547,171 @@ font-size: $font-size-md; } } + +.startButtonSection { + width: 100%; + min-height: 100vh; + background-color: $color-black; + padding: calc($spacing-3xl + $spacing-3xl); + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: calc($spacing-3xl * 5); + text-align: center; + margin: 0 auto; + + @include respond-to(lg) { + gap: calc($spacing-3xl * 3); + } + + @include respond-to(md) { + padding: calc(8vh + $spacing-2xl) $spacing-lg; + gap: $spacing-2xl; + flex-direction: column; + } + + @include respond-to(sm) { + padding: calc(8vh + $spacing-xl) $spacing-md; + gap: $spacing-xl; + } + + // 로고 스타일 + img:first-child { + display: none; + + @include respond-to(md) { + display: block; + width: calc(98px * 3); + height: calc(28px * 3); + margin-bottom: $spacing-2xl; + } + + @include respond-to(sm) { + width: calc(98px * 2); + height: calc(28px * 2); + } + } + + // 텍스트 컨테이너 + > div { + display: flex; + flex-direction: column; + align-items: left; + gap: $spacing-xl; + width: fit-content; + text-align: left; + + @include respond-to(md) { + align-items: center; + } + + @include respond-to(sm) { + gap: $spacing-lg; + max-width: 100%; + } + + h2 { + font-size: 64px; + font-weight: 700; + color: $color-white; + line-height: 1.2; + margin: 0; + + @include respond-to(lg) { + font-size: 40px; + } + + @include respond-to(md) { + font-size: 36px; + text-align: center; + } + + @include respond-to(sm) { + font-size: 28px; + line-height: 1.3; + } + } + + p { + font-size: $font-size-lg; + color: #cccccc; + line-height: 1.6; + margin: 0; + + @include respond-to(md) { + font-size: $font-size-md; + text-align: center; + } + + @include respond-to(sm) { + font-size: $font-size-sm; + line-height: 1.5; + } + } + + button { + background: linear-gradient(to right, #87ceeb, #9370db); + border: none; + border-radius: 50px; + padding: $spacing-sm $spacing-2xl; + color: $color-white; + font-size: $font-size-lg; + font-weight: 600; + cursor: pointer; + transition: $transition-default; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); + display: flex; + align-items: center; + gap: $spacing-sm; + width: fit-content; + font-family: $font-default; + + @include respond-to(sm) { + padding: $spacing-sm $spacing-xl; + font-size: $font-size-md; + margin-top: $spacing-md; + } + + &:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); + } + + p { + margin: 0; + color: $color-white; + font-size: inherit; + font-weight: inherit; + } + + svg { + width: 20px; + height: 20px; + color: $color-white; + + @include respond-to(sm) { + width: 18px; + height: 18px; + } + } + } + } + + // 큰 로고 이미지 (오른쪽) + img:last-child { + display: block; + width: 293px; + height: 320px; + object-fit: contain; + + @include respond-to(lg) { + width: 200px; + height: 220px; + } + + @include respond-to(md) { + display: none; + } + } +} diff --git a/frontend/app/(non-login)/(landing)/page.tsx b/frontend/app/(non-login)/(landing)/page.tsx index 07bd1808..f8848fff 100644 --- a/frontend/app/(non-login)/(landing)/page.tsx +++ b/frontend/app/(non-login)/(landing)/page.tsx @@ -6,6 +6,7 @@ import IntroSection from "./_components/IntroSection"; import Navbar from "./_components/Navbar"; import styles from "./page.module.scss"; import RoadMapSection from "./_components/RoadMapSection"; +import { StartButtonSection } from "./_components/StartButtonSection"; export default function LandingPage() { const introSectionRef = useRef(null); @@ -17,6 +18,7 @@ export default function LandingPage() { +
); diff --git a/frontend/constants/images.ts b/frontend/constants/images.ts index 4e17625a..1c3198bd 100644 --- a/frontend/constants/images.ts +++ b/frontend/constants/images.ts @@ -4,6 +4,7 @@ import logo2 from "@/public/images/logo2.png"; import logo3 from "@/public/images/logo3.png"; import logo4 from "@/public/images/logo4.png"; import logo5 from "@/public/images/logo5.png"; +import logo6 from "@/public/images/logo6.png"; import introImage from "@/public/images/intro_image.png"; import qrCode from "@/public/images/QRcode.png"; import kakaoLogo from "@/public/images/kakao_logo.png"; @@ -29,6 +30,7 @@ export const IMAGES = { logo3, logo4, logo5, + logo6, introImage, qrCode, kakaoLogo, diff --git a/frontend/public/images/logo6.png b/frontend/public/images/logo6.png new file mode 100644 index 0000000000000000000000000000000000000000..8cbe96823fc8091b093a4baac91fd15750c5b510 GIT binary patch literal 60722 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 Date: Sat, 11 Oct 2025 20:33:54 +0900 Subject: [PATCH 13/15] =?UTF-8?q?=F0=9F=92=84=20(#339)=20=EB=AA=A8?= =?UTF-8?q?=EB=93=A0=20=EC=9A=94=EC=86=8C=EC=97=90=20=EB=B6=80=EB=93=9C?= =?UTF-8?q?=EB=9F=AC=EC=9A=B4=20=EC=A0=84=ED=99=98=20=ED=9A=A8=EA=B3=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(non-login)/(landing)/page.module.scss | 61 ++++++++++++++++--- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/page.module.scss b/frontend/app/(non-login)/(landing)/page.module.scss index 03ca551e..1cc028e2 100644 --- a/frontend/app/(non-login)/(landing)/page.module.scss +++ b/frontend/app/(non-login)/(landing)/page.module.scss @@ -13,12 +13,16 @@ justify-content: space-between; align-items: center; padding: $spacing-sm $spacing-xl; + transition: all 0.3s ease; + .logo { height: auto; max-height: 100%; width: auto; object-fit: contain; + transition: all 0.3s ease; } + .login { border: 2px solid $color-white; padding: $spacing-sm $spacing-lg; @@ -27,12 +31,14 @@ font-weight: $font-weight-medium; font-size: $font-size-md; cursor: pointer; - transition: $transition-default; + transition: all 0.3s ease; font-weight: $font-weight-bold; &:hover { background-color: $color-white; color: $color-blue; + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } } } @@ -52,6 +58,7 @@ background-color: $color-blue; padding: calc(8vh + $spacing-xl) $spacing-3xl $spacing-3xl $spacing-3xl; overflow: hidden; + transition: all 0.3s ease; } .heroInner { @@ -61,6 +68,8 @@ gap: $spacing-2xl; align-items: start; margin: 0 auto; + transition: all 0.4s ease; + @include respond-to(md) { flex-direction: column; } @@ -75,6 +84,8 @@ width: 100%; justify-content: flex-start; align-items: flex-start; + transition: all 0.3s ease; + @include respond-to(sm) { padding: $spacing-md; } @@ -87,6 +98,7 @@ line-height: 1.1; letter-spacing: -0.02em; margin-bottom: $spacing-md; + transition: all 0.3s ease; @include respond-to(lg) { font-size: 48px; @@ -96,18 +108,24 @@ font-size: 32px; } } + p { font-size: $font-size-lg; line-height: 1.6; opacity: 0.95; + transition: all 0.3s ease; } + .logo { width: 500px; height: auto; object-fit: contain; + transition: all 0.3s ease; + @include respond-to(lg) { width: 400px; } + @include respond-to(sm) { width: 300px; } @@ -128,7 +146,7 @@ font-weight: $font-weight-bold; font-size: $font-size-lg; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08); - transition: $transition-default; + transition: all 0.3s ease; &:hover { transform: translateY(-2px); @@ -144,9 +162,10 @@ width: 100%; height: 100%; position: relative; + transition: all 0.3s ease; img { - transition: $transition-default; + transition: all 0.4s ease; height: auto; object-fit: contain; right: -20%; @@ -224,6 +243,7 @@ align-items: center; justify-content: center; gap: $spacing-3xl; + transition: all 0.3s ease; @include respond-to(md) { padding: calc(8vh + $spacing-2xl) $spacing-lg; @@ -238,6 +258,7 @@ flex-direction: row; align-items: flex-end; justify-content: space-between; + transition: all 0.4s ease; @include respond-to(md) { flex-direction: column; @@ -252,6 +273,7 @@ line-height: 1.2; text-align: left; margin-bottom: calc($spacing-3xl * 2); + transition: all 0.3s ease; @include respond-to(lg) { font-size: 56px; @@ -271,6 +293,7 @@ .introDescription { text-align: right; max-width: 600px; + transition: all 0.3s ease; @include respond-to(md) { text-align: center; @@ -282,6 +305,7 @@ font-weight: 600; margin-bottom: $spacing-md; line-height: 1.4; + transition: all 0.3s ease; @include respond-to(md) { font-size: $font-size-lg; @@ -296,6 +320,7 @@ line-height: 1.6; font-weight: $font-weight-regular; margin: 0; + transition: all 0.3s ease; @include respond-to(md) { font-size: $font-size-md; @@ -310,6 +335,7 @@ flex-direction: row; gap: $spacing-lg; width: 100%; + transition: all 0.4s ease; @include respond-to(md) { flex-direction: column; @@ -321,11 +347,11 @@ display: flex; flex-direction: column; align-items: flex-start; - gap: $spacing-lg; + gap: $spacing-3xl; background-color: $color-neutral-8; border-radius: 16px; padding: $spacing-xl; - transition: $transition-default; + transition: all 0.3s ease; border: 1px solid $color-neutral-7; @include respond-to(md) { @@ -371,6 +397,7 @@ font-size: $font-size-xl; font-weight: 600; margin: 0 0 $spacing-sm 0; + transition: all 0.3s ease; @include respond-to(sm) { font-size: $font-size-lg; @@ -382,6 +409,7 @@ color: $color-neutral-4; line-height: 1.5; margin: 0; + transition: all 0.3s ease; } .roadMapSection { @@ -394,6 +422,7 @@ align-items: center; justify-content: center; gap: $spacing-2xl; + transition: all 0.3s ease; @include respond-to(md) { padding: calc(8vh + $spacing-2xl) $spacing-lg; @@ -412,6 +441,7 @@ font-weight: 700; color: $color-blue; margin-bottom: $spacing-2xl; + transition: all 0.3s ease; @include respond-to(md) { font-size: 64px; @@ -428,6 +458,7 @@ align-items: flex-start; gap: $spacing-2xl; margin: 0 auto; + transition: all 0.4s ease; @include respond-to(md) { flex-direction: column; @@ -439,11 +470,11 @@ .roadMapText { flex: 1; text-align: left; - font-size: $font-size-lg; line-height: 1.6; font-weight: $font-weight-regular; margin: 0; + transition: all 0.3s ease; @include respond-to(md) { text-align: center; @@ -453,6 +484,7 @@ .roadMapCta { flex-shrink: 0; + transition: all 0.3s ease; p { font-size: 64px; @@ -461,6 +493,7 @@ color: #000; margin: 0; line-height: 1.2; + transition: all 0.3s ease; @include respond-to(lg) { font-size: 48px; @@ -477,6 +510,8 @@ gap: $spacing-3xl; width: 100%; height: 100%; + transition: all 0.4s ease; + justify-content: center; @include respond-to(md) { flex-direction: column; @@ -489,7 +524,8 @@ background-color: $color-white; border-radius: 16px; padding: $spacing-2xl; - transition: $transition-default; + max-width: 600px; + transition: all 0.3s ease; height: fit-content; @include respond-to(md) { @@ -502,6 +538,7 @@ font-weight: 700; text-align: center; margin-bottom: $spacing-xl; + transition: all 0.3s ease; @include respond-to(sm) { font-size: 20px; @@ -542,6 +579,7 @@ font-size: $font-size-lg; line-height: 1.5; color: $color-neutral-3; + transition: all 0.3s ease; @include respond-to(sm) { font-size: $font-size-md; @@ -560,6 +598,7 @@ gap: calc($spacing-3xl * 5); text-align: center; margin: 0 auto; + transition: all 0.4s ease; @include respond-to(lg) { gap: calc($spacing-3xl * 3); @@ -579,6 +618,7 @@ // 로고 스타일 img:first-child { display: none; + transition: all 0.3s ease; @include respond-to(md) { display: block; @@ -601,6 +641,7 @@ gap: $spacing-xl; width: fit-content; text-align: left; + transition: all 0.3s ease; @include respond-to(md) { align-items: center; @@ -617,6 +658,7 @@ color: $color-white; line-height: 1.2; margin: 0; + transition: all 0.3s ease; @include respond-to(lg) { font-size: 40px; @@ -638,6 +680,7 @@ color: #cccccc; line-height: 1.6; margin: 0; + transition: all 0.3s ease; @include respond-to(md) { font-size: $font-size-md; @@ -659,7 +702,7 @@ font-size: $font-size-lg; font-weight: 600; cursor: pointer; - transition: $transition-default; + transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); display: flex; align-items: center; @@ -689,6 +732,7 @@ width: 20px; height: 20px; color: $color-white; + transition: all 0.3s ease; @include respond-to(sm) { width: 18px; @@ -704,6 +748,7 @@ width: 293px; height: 320px; object-fit: contain; + transition: all 0.3s ease; @include respond-to(lg) { width: 200px; From 7a10d9e760f72dee0a9c2a7ca7aefc2b673f6c56 Mon Sep 17 00:00:00 2001 From: Son Ahyun Date: Sat, 11 Oct 2025 20:38:01 +0900 Subject: [PATCH 14/15] =?UTF-8?q?=E2=9C=A8=20(#339)=20Navbar=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=83=81=ED=83=9C=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EB=B0=8F=20=EB=A1=9C?= =?UTF-8?q?=EA=B3=A0=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=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 --- .../(landing)/_components/Navbar.tsx | 24 +++++++++++++++++-- .../(non-login)/(landing)/page.module.scss | 20 ++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/frontend/app/(non-login)/(landing)/_components/Navbar.tsx b/frontend/app/(non-login)/(landing)/_components/Navbar.tsx index c935a3b1..359ea9d4 100644 --- a/frontend/app/(non-login)/(landing)/_components/Navbar.tsx +++ b/frontend/app/(non-login)/(landing)/_components/Navbar.tsx @@ -1,14 +1,34 @@ +"use client"; + import Link from "next/link"; import Image from "next/image"; +import { useEffect, useState } from "react"; import styles from "../page.module.scss"; import { ROUTES } from "@/constants/routes"; import { IMAGES } from "@/constants/images"; export default function Navbar() { + const [isScrolled, setIsScrolled] = useState(false); + + useEffect(() => { + const handleScroll = () => { + const scrollTop = window.scrollY; + setIsScrolled(scrollTop > 50); + }; + + handleScroll(); + + window.addEventListener("scroll", handleScroll, { passive: true }); + + return () => { + window.removeEventListener("scroll", handleScroll); + }; + }, []); + return ( -