From 271b3c1c530e4bb275538d833738124f04de382d Mon Sep 17 00:00:00 2001 From: mingeung Date: Mon, 1 Dec 2025 18:14:11 +0900 Subject: [PATCH 01/65] =?UTF-8?q?feat=20:=20TypeScript=EB=A1=9C=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeboy_frontend/package.json | 3 +- codeboy_frontend/src/App.vue | 48 ++--------------------------- codeboy_frontend/src/main.js | 6 ---- codeboy_frontend/src/main.ts | 4 +++ codeboy_frontend/src/shims-vue.d.ts | 5 +++ codeboy_frontend/tsconfig.json | 22 +++++++++++++ codeboy_frontend/vite.config.js | 18 ----------- codeboy_frontend/vite.config.ts | 15 +++++++++ 8 files changed, 51 insertions(+), 70 deletions(-) delete mode 100644 codeboy_frontend/src/main.js create mode 100644 codeboy_frontend/src/main.ts create mode 100644 codeboy_frontend/src/shims-vue.d.ts create mode 100644 codeboy_frontend/tsconfig.json delete mode 100644 codeboy_frontend/vite.config.js create mode 100644 codeboy_frontend/vite.config.ts diff --git a/codeboy_frontend/package.json b/codeboy_frontend/package.json index e6ae701..47dab6d 100644 --- a/codeboy_frontend/package.json +++ b/codeboy_frontend/package.json @@ -9,7 +9,8 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "type-check": "vue-tsc --noEmit" }, "dependencies": { "vue": "^3.5.25" diff --git a/codeboy_frontend/src/App.vue b/codeboy_frontend/src/App.vue index 633a5df..d879ed0 100644 --- a/codeboy_frontend/src/App.vue +++ b/codeboy_frontend/src/App.vue @@ -1,47 +1,5 @@ - + - - - + diff --git a/codeboy_frontend/src/main.js b/codeboy_frontend/src/main.js deleted file mode 100644 index 0ac3a5f..0000000 --- a/codeboy_frontend/src/main.js +++ /dev/null @@ -1,6 +0,0 @@ -import './assets/main.css' - -import { createApp } from 'vue' -import App from './App.vue' - -createApp(App).mount('#app') diff --git a/codeboy_frontend/src/main.ts b/codeboy_frontend/src/main.ts new file mode 100644 index 0000000..b670de8 --- /dev/null +++ b/codeboy_frontend/src/main.ts @@ -0,0 +1,4 @@ +import { createApp } from "vue"; +import App from "./App.vue"; + +createApp(App).mount("#app"); diff --git a/codeboy_frontend/src/shims-vue.d.ts b/codeboy_frontend/src/shims-vue.d.ts new file mode 100644 index 0000000..d77b62b --- /dev/null +++ b/codeboy_frontend/src/shims-vue.d.ts @@ -0,0 +1,5 @@ +declare module "*.vue" { + import type { DefineComponent } from "vue"; + const component: DefineComponent<{}, {}, any>; + export default component; +} diff --git a/codeboy_frontend/tsconfig.json b/codeboy_frontend/tsconfig.json new file mode 100644 index 0000000..2e23208 --- /dev/null +++ b/codeboy_frontend/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": false, + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "exclude": ["node_modules"] +} diff --git a/codeboy_frontend/vite.config.js b/codeboy_frontend/vite.config.js deleted file mode 100644 index 4217010..0000000 --- a/codeboy_frontend/vite.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { fileURLToPath, URL } from 'node:url' - -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' -import vueDevTools from 'vite-plugin-vue-devtools' - -// https://vite.dev/config/ -export default defineConfig({ - plugins: [ - vue(), - vueDevTools(), - ], - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) - }, - }, -}) diff --git a/codeboy_frontend/vite.config.ts b/codeboy_frontend/vite.config.ts new file mode 100644 index 0000000..7483182 --- /dev/null +++ b/codeboy_frontend/vite.config.ts @@ -0,0 +1,15 @@ +import { fileURLToPath, URL } from "node:url"; + +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import vueDevTools from "vite-plugin-vue-devtools"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue(), vueDevTools()], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + }, + }, +}); From 946ed893d32fa50fb887d9bdcb8dbe464f51e677 Mon Sep 17 00:00:00 2001 From: mingeung Date: Tue, 2 Dec 2025 13:59:26 +0900 Subject: [PATCH 02/65] =?UTF-8?q?feat=20:=20=EB=9D=BC=EC=9A=B0=ED=8C=85=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=83=9D=EC=84=B1,=20env=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeboy_frontend/package-lock.json | 24 +++++- codeboy_frontend/package.json | 3 +- codeboy_frontend/src/env.d.ts | 3 + codeboy_frontend/src/main.ts | 3 +- codeboy_frontend/src/pages/NotFoundPage.vue | 5 ++ codeboy_frontend/src/pages/auth/LoginPage.vue | 0 .../src/pages/auth/SignupPage.vue | 0 .../pages/incorrectNote/IncorrectNotePage.vue | 5 ++ codeboy_frontend/src/pages/myPage/MyPage.vue | 5 ++ .../src/pages/problem/ProblemPage.vue | 5 ++ .../src/pages/problem/ProblemSetPage.vue | 5 ++ .../pages/problem/ProblemsetCommentPage.vue | 5 ++ .../src/pages/quizroom/QuizRoomPage.vue | 9 +++ .../src/pages/quizroom/QuizRoomsPage.vue | 5 ++ .../src/pages/ranking/RankingPage.vue | 5 ++ codeboy_frontend/src/router/index.ts | 77 +++++++++++++++++++ .../src/shared/constants/paths.ts | 12 +++ 17 files changed, 168 insertions(+), 3 deletions(-) create mode 100644 codeboy_frontend/src/env.d.ts create mode 100644 codeboy_frontend/src/pages/NotFoundPage.vue create mode 100644 codeboy_frontend/src/pages/auth/LoginPage.vue create mode 100644 codeboy_frontend/src/pages/auth/SignupPage.vue create mode 100644 codeboy_frontend/src/pages/incorrectNote/IncorrectNotePage.vue create mode 100644 codeboy_frontend/src/pages/myPage/MyPage.vue create mode 100644 codeboy_frontend/src/pages/problem/ProblemPage.vue create mode 100644 codeboy_frontend/src/pages/problem/ProblemSetPage.vue create mode 100644 codeboy_frontend/src/pages/problem/ProblemsetCommentPage.vue create mode 100644 codeboy_frontend/src/pages/quizroom/QuizRoomPage.vue create mode 100644 codeboy_frontend/src/pages/quizroom/QuizRoomsPage.vue create mode 100644 codeboy_frontend/src/pages/ranking/RankingPage.vue create mode 100644 codeboy_frontend/src/router/index.ts create mode 100644 codeboy_frontend/src/shared/constants/paths.ts diff --git a/codeboy_frontend/package-lock.json b/codeboy_frontend/package-lock.json index 85f8712..40b4c26 100644 --- a/codeboy_frontend/package-lock.json +++ b/codeboy_frontend/package-lock.json @@ -8,7 +8,8 @@ "name": "vue-project", "version": "0.0.0", "dependencies": { - "vue": "^3.5.25" + "vue": "^3.5.25", + "vue-router": "^4.6.3" }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.2", @@ -1414,6 +1415,12 @@ "@vue/shared": "3.5.25" } }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, "node_modules/@vue/devtools-core": { "version": "8.0.5", "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.0.5.tgz", @@ -2508,6 +2515,21 @@ } } }, + "node_modules/vue-router": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz", + "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/wsl-utils": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", diff --git a/codeboy_frontend/package.json b/codeboy_frontend/package.json index 47dab6d..08afa54 100644 --- a/codeboy_frontend/package.json +++ b/codeboy_frontend/package.json @@ -13,7 +13,8 @@ "type-check": "vue-tsc --noEmit" }, "dependencies": { - "vue": "^3.5.25" + "vue": "^3.5.25", + "vue-router": "^4.6.3" }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.2", diff --git a/codeboy_frontend/src/env.d.ts b/codeboy_frontend/src/env.d.ts new file mode 100644 index 0000000..64eea6d --- /dev/null +++ b/codeboy_frontend/src/env.d.ts @@ -0,0 +1,3 @@ +/// + +export const BASE_URL = "http://localhost:8080"; diff --git a/codeboy_frontend/src/main.ts b/codeboy_frontend/src/main.ts index b670de8..10ea69d 100644 --- a/codeboy_frontend/src/main.ts +++ b/codeboy_frontend/src/main.ts @@ -1,4 +1,5 @@ import { createApp } from "vue"; import App from "./App.vue"; +import router from "./router"; -createApp(App).mount("#app"); +createApp(App).use(router).mount("#app"); diff --git a/codeboy_frontend/src/pages/NotFoundPage.vue b/codeboy_frontend/src/pages/NotFoundPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/NotFoundPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/auth/LoginPage.vue b/codeboy_frontend/src/pages/auth/LoginPage.vue new file mode 100644 index 0000000..e69de29 diff --git a/codeboy_frontend/src/pages/auth/SignupPage.vue b/codeboy_frontend/src/pages/auth/SignupPage.vue new file mode 100644 index 0000000..e69de29 diff --git a/codeboy_frontend/src/pages/incorrectNote/IncorrectNotePage.vue b/codeboy_frontend/src/pages/incorrectNote/IncorrectNotePage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/incorrectNote/IncorrectNotePage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/myPage/MyPage.vue b/codeboy_frontend/src/pages/myPage/MyPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/myPage/MyPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/problem/ProblemPage.vue b/codeboy_frontend/src/pages/problem/ProblemPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/problem/ProblemPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/problem/ProblemSetPage.vue b/codeboy_frontend/src/pages/problem/ProblemSetPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/problem/ProblemSetPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/problem/ProblemsetCommentPage.vue b/codeboy_frontend/src/pages/problem/ProblemsetCommentPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/problem/ProblemsetCommentPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/quizroom/QuizRoomPage.vue b/codeboy_frontend/src/pages/quizroom/QuizRoomPage.vue new file mode 100644 index 0000000..adf7e0a --- /dev/null +++ b/codeboy_frontend/src/pages/quizroom/QuizRoomPage.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/codeboy_frontend/src/pages/quizroom/QuizRoomsPage.vue b/codeboy_frontend/src/pages/quizroom/QuizRoomsPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/quizroom/QuizRoomsPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/ranking/RankingPage.vue b/codeboy_frontend/src/pages/ranking/RankingPage.vue new file mode 100644 index 0000000..d879ed0 --- /dev/null +++ b/codeboy_frontend/src/pages/ranking/RankingPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/router/index.ts b/codeboy_frontend/src/router/index.ts new file mode 100644 index 0000000..89739ed --- /dev/null +++ b/codeboy_frontend/src/router/index.ts @@ -0,0 +1,77 @@ +import { createRouter, createWebHistory } from "vue-router"; +import { PATH } from "@/shared/constants/paths"; +import QuizRoomsPage from "@/pages/quizroom/QuizRoomsPage.vue"; +import LoginPage from "@/pages/auth/LoginPage.vue"; +import SignupPage from "@/pages/auth/SignupPage.vue"; +import ProblemsPage from "@/pages/problem/ProblemsPage.vue"; +import ProblemSetPage from "@/pages/problem/ProblemSetPage.vue"; +import ProblemSetCommentsPage from "@/pages/problem/ProblemSetCommentsPage.vue"; +import QuizRoomPage from "@/pages/quizroom/QuizRoomPage.vue"; +import RankingPage from "@/pages/ranking/RankingPage.vue"; +import IncorrectNotesPage from "@/pages/incorrectNote/IncorrectNotePage.vue"; +import MyPage from "@/pages/myPage/MyPage.vue"; +import NotFoundPage from "@/pages/NotFoundPage.vue"; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: PATH.HOME, + name: "quizrooms", + component: QuizRoomsPage, + }, + { + path: PATH.LOGIN, + name: "login", + component: LoginPage, + }, + { + path: PATH.SIGNUP, + name: "signup", + component: SignupPage, + }, + + { + path: PATH.PROBLEMS, + name: "problems", + component: ProblemsPage, + }, + { + path: PATH.PROBLEM_SETS_ID, + name: "problemSet", + component: ProblemSetPage, + }, + { + path: PATH.PROBLEM_SETS_ID_COMMENTS, + name: "problemSetComments", + component: ProblemSetCommentsPage, + }, + { + path: PATH.QUIZROOM, + name: "quizroom", + component: QuizRoomPage, + }, + { + path: PATH.RANKING, + name: "ranking", + component: RankingPage, + }, + { + path: PATH.INCORRECT_NOTES, + name: "incorrectNotes", + component: IncorrectNotesPage, + }, + { + path: PATH.MY_PAGE, + name: "myPage", + component: MyPage, + }, + { + path: "/:pathMatch(.*)*", + name: "not-found", + component: NotFoundPage, + }, + ], +}); + +export default router; diff --git a/codeboy_frontend/src/shared/constants/paths.ts b/codeboy_frontend/src/shared/constants/paths.ts new file mode 100644 index 0000000..6bee123 --- /dev/null +++ b/codeboy_frontend/src/shared/constants/paths.ts @@ -0,0 +1,12 @@ +export const PATH = { + HOME: "/", + LOGIN: "/login", + SIGNUP: "/signup", + PROBLEMS: "/problems", + PROBLEM_SETS_ID: "/problem-sets/:id", + PROBLEM_SETS_ID_COMMENTS: "/problem-sets/:id/comments", + QUIZROOM: "/quizroom/:id", + RANKING: "/ranking", + INCORRECT_NOTES: "/incorrect-notes", + MY_PAGE: "/my-page", +}; From 6c99a21e8ba59f2d5d467d61ebe26c1f1669c185 Mon Sep 17 00:00:00 2001 From: mingeung Date: Tue, 2 Dec 2025 14:41:51 +0900 Subject: [PATCH 03/65] =?UTF-8?q?feat=20:=20=EA=B8=80=EB=A1=9C=EB=B2=8C=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=ED=8C=8C=EC=9D=BC=20App?= =?UTF-8?q?Layout=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeboy_frontend/src/{ => app}/App.vue | 4 +- codeboy_frontend/src/main.ts | 2 +- codeboy_frontend/src/pages/auth/LoginPage.vue | 5 + .../src/pages/auth/SignupPage.vue | 5 + .../src/pages/problem/ProblemPage.vue | 1 + codeboy_frontend/src/router/index.ts | 99 ++++++++++--------- .../shared/components/layout/AppLayout.vue | 14 +++ .../src/shared/constants/paths.ts | 16 +-- codeboy_frontend/tsconfig.json | 13 ++- 9 files changed, 100 insertions(+), 59 deletions(-) rename codeboy_frontend/src/{ => app}/App.vue (59%) create mode 100644 codeboy_frontend/src/shared/components/layout/AppLayout.vue diff --git a/codeboy_frontend/src/App.vue b/codeboy_frontend/src/app/App.vue similarity index 59% rename from codeboy_frontend/src/App.vue rename to codeboy_frontend/src/app/App.vue index d879ed0..3ed4b37 100644 --- a/codeboy_frontend/src/App.vue +++ b/codeboy_frontend/src/app/App.vue @@ -1,5 +1,7 @@ - + diff --git a/codeboy_frontend/src/main.ts b/codeboy_frontend/src/main.ts index 10ea69d..763f20c 100644 --- a/codeboy_frontend/src/main.ts +++ b/codeboy_frontend/src/main.ts @@ -1,5 +1,5 @@ import { createApp } from "vue"; -import App from "./App.vue"; +import App from "@/app/App.vue"; import router from "./router"; createApp(App).use(router).mount("#app"); diff --git a/codeboy_frontend/src/pages/auth/LoginPage.vue b/codeboy_frontend/src/pages/auth/LoginPage.vue index e69de29..d879ed0 100644 --- a/codeboy_frontend/src/pages/auth/LoginPage.vue +++ b/codeboy_frontend/src/pages/auth/LoginPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/auth/SignupPage.vue b/codeboy_frontend/src/pages/auth/SignupPage.vue index e69de29..d879ed0 100644 --- a/codeboy_frontend/src/pages/auth/SignupPage.vue +++ b/codeboy_frontend/src/pages/auth/SignupPage.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/codeboy_frontend/src/pages/problem/ProblemPage.vue b/codeboy_frontend/src/pages/problem/ProblemPage.vue index d879ed0..3d61f12 100644 --- a/codeboy_frontend/src/pages/problem/ProblemPage.vue +++ b/codeboy_frontend/src/pages/problem/ProblemPage.vue @@ -3,3 +3,4 @@ +글 diff --git a/codeboy_frontend/src/router/index.ts b/codeboy_frontend/src/router/index.ts index 89739ed..10edf35 100644 --- a/codeboy_frontend/src/router/index.ts +++ b/codeboy_frontend/src/router/index.ts @@ -3,22 +3,70 @@ import { PATH } from "@/shared/constants/paths"; import QuizRoomsPage from "@/pages/quizroom/QuizRoomsPage.vue"; import LoginPage from "@/pages/auth/LoginPage.vue"; import SignupPage from "@/pages/auth/SignupPage.vue"; -import ProblemsPage from "@/pages/problem/ProblemsPage.vue"; +import ProblemPage from "@/pages/problem/ProblemPage.vue"; import ProblemSetPage from "@/pages/problem/ProblemSetPage.vue"; -import ProblemSetCommentsPage from "@/pages/problem/ProblemSetCommentsPage.vue"; +import ProblemsetCommentPage from "@/pages/problem/ProblemsetCommentPage.vue"; import QuizRoomPage from "@/pages/quizroom/QuizRoomPage.vue"; import RankingPage from "@/pages/ranking/RankingPage.vue"; import IncorrectNotesPage from "@/pages/incorrectNote/IncorrectNotePage.vue"; import MyPage from "@/pages/myPage/MyPage.vue"; import NotFoundPage from "@/pages/NotFoundPage.vue"; +import AppLayout from "@/shared/components/layout/AppLayout.vue"; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { - path: PATH.HOME, - name: "quizrooms", - component: QuizRoomsPage, + path: "/", + component: AppLayout, + children: [ + { + path: PATH.HOME, + name: "quizrooms", + component: QuizRoomsPage, + }, + + { + path: PATH.PROBLEMS, + name: "problems", + component: ProblemPage, + }, + { + path: PATH.PROBLEM_SETS_ID, + name: "problemSet", + component: ProblemSetPage, + }, + { + path: PATH.PROBLEM_SETS_ID_COMMENTS, + name: "problemSetComments", + component: ProblemsetCommentPage, + }, + { + path: PATH.QUIZROOM, + name: "quizroom", + component: QuizRoomPage, + }, + { + path: PATH.RANKING, + name: "ranking", + component: RankingPage, + }, + { + path: PATH.INCORRECT_NOTES, + name: "incorrectNotes", + component: IncorrectNotesPage, + }, + { + path: PATH.MY_PAGE, + name: "myPage", + component: MyPage, + }, + { + path: "/:pathMatch(.*)*", + name: "not-found", + component: NotFoundPage, + }, + ], }, { path: PATH.LOGIN, @@ -30,47 +78,6 @@ const router = createRouter({ name: "signup", component: SignupPage, }, - - { - path: PATH.PROBLEMS, - name: "problems", - component: ProblemsPage, - }, - { - path: PATH.PROBLEM_SETS_ID, - name: "problemSet", - component: ProblemSetPage, - }, - { - path: PATH.PROBLEM_SETS_ID_COMMENTS, - name: "problemSetComments", - component: ProblemSetCommentsPage, - }, - { - path: PATH.QUIZROOM, - name: "quizroom", - component: QuizRoomPage, - }, - { - path: PATH.RANKING, - name: "ranking", - component: RankingPage, - }, - { - path: PATH.INCORRECT_NOTES, - name: "incorrectNotes", - component: IncorrectNotesPage, - }, - { - path: PATH.MY_PAGE, - name: "myPage", - component: MyPage, - }, - { - path: "/:pathMatch(.*)*", - name: "not-found", - component: NotFoundPage, - }, ], }); diff --git a/codeboy_frontend/src/shared/components/layout/AppLayout.vue b/codeboy_frontend/src/shared/components/layout/AppLayout.vue new file mode 100644 index 0000000..bc56167 --- /dev/null +++ b/codeboy_frontend/src/shared/components/layout/AppLayout.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/codeboy_frontend/src/shared/constants/paths.ts b/codeboy_frontend/src/shared/constants/paths.ts index 6bee123..d74df28 100644 --- a/codeboy_frontend/src/shared/constants/paths.ts +++ b/codeboy_frontend/src/shared/constants/paths.ts @@ -1,12 +1,12 @@ export const PATH = { - HOME: "/", + HOME: "", LOGIN: "/login", SIGNUP: "/signup", - PROBLEMS: "/problems", - PROBLEM_SETS_ID: "/problem-sets/:id", - PROBLEM_SETS_ID_COMMENTS: "/problem-sets/:id/comments", - QUIZROOM: "/quizroom/:id", - RANKING: "/ranking", - INCORRECT_NOTES: "/incorrect-notes", - MY_PAGE: "/my-page", + PROBLEMS: "problems", + PROBLEM_SETS_ID: "problem-sets/:id", + PROBLEM_SETS_ID_COMMENTS: "problem-sets/:id/comments", + QUIZROOM: "quizroom/:id", + RANKING: "ranking", + INCORRECT_NOTES: "incorrect-notes", + MY_PAGE: "my-page", }; diff --git a/codeboy_frontend/tsconfig.json b/codeboy_frontend/tsconfig.json index 2e23208..1af5fd7 100644 --- a/codeboy_frontend/tsconfig.json +++ b/codeboy_frontend/tsconfig.json @@ -3,7 +3,7 @@ "target": "ESNext", "useDefineForClassFields": true, "module": "ESNext", - "moduleResolution": "Node", + "moduleResolution": "bundler", "strict": false, "jsx": "preserve", "resolveJsonModule": true, @@ -15,8 +15,15 @@ "baseUrl": ".", "paths": { "@/*": ["src/*"] - } + }, + "types": ["vite/client"] }, - "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue", + "vite.config.ts" + ], "exclude": ["node_modules"] } From 21bdc1852d180a1aeefcf495f11eec955ad577a2 Mon Sep 17 00:00:00 2001 From: mingeung Date: Wed, 3 Dec 2025 11:15:11 +0900 Subject: [PATCH 04/65] =?UTF-8?q?feat=20:=20tailwind=20=ED=99=98=EA=B2=BD?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codeboy_frontend/index.html | 6 +- codeboy_frontend/package-lock.json | 952 +++++++++++++++++- codeboy_frontend/package.json | 3 + codeboy_frontend/postcss.config.cjs | 6 + codeboy_frontend/src/app/App.vue | 4 +- codeboy_frontend/src/app/global.css | 3 + codeboy_frontend/src/app/layout/AppLayout.vue | 16 + codeboy_frontend/src/main.ts | 1 + .../pages/incorrectNote/IncorrectNotePage.vue | 4 +- .../src/pages/problem/ProblemPage.vue | 1 - codeboy_frontend/src/router/index.ts | 2 +- .../shared/components/layout/AppLayout.vue | 14 - codeboy_frontend/tailwind.config.cjs | 8 + codeboy_frontend/vite.config.ts | 4 +- 14 files changed, 988 insertions(+), 36 deletions(-) create mode 100644 codeboy_frontend/postcss.config.cjs create mode 100644 codeboy_frontend/src/app/global.css create mode 100644 codeboy_frontend/src/app/layout/AppLayout.vue delete mode 100644 codeboy_frontend/src/shared/components/layout/AppLayout.vue create mode 100644 codeboy_frontend/tailwind.config.cjs diff --git a/codeboy_frontend/index.html b/codeboy_frontend/index.html index b19040a..e81c5da 100644 --- a/codeboy_frontend/index.html +++ b/codeboy_frontend/index.html @@ -1,9 +1,9 @@ - - - + + + Vite App diff --git a/codeboy_frontend/package-lock.json b/codeboy_frontend/package-lock.json index 40b4c26..a3548fe 100644 --- a/codeboy_frontend/package-lock.json +++ b/codeboy_frontend/package-lock.json @@ -13,6 +13,9 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.2", + "autoprefixer": "^10.4.22", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.18", "vite": "^7.2.4", "vite-plugin-vue-devtools": "^8.0.5" }, @@ -20,6 +23,19 @@ "node": "^20.19.0 || >=22.12.0" } }, + "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/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -966,6 +982,44 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -1544,6 +1598,85 @@ "node": ">=14" } }, + "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/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/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/autoprefixer": { + "version": "10.4.22", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", + "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-lite": "^1.0.30001754", + "fraction.js": "^5.3.4", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/baseline-browser-mapping": { "version": "2.8.32", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz", @@ -1554,6 +1687,19 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "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/birpc": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.8.0.tgz", @@ -1564,6 +1710,19 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.28.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", @@ -1614,6 +1773,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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.30001757", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", @@ -1635,6 +1804,54 @@ ], "license": "CC-BY-4.0" }, + "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/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/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/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -1658,6 +1875,19 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -1725,6 +1955,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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/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/electron-to-chromium": { "version": "1.5.262", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz", @@ -1812,6 +2056,46 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "license": "MIT" }, + "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/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/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -1830,6 +2114,33 @@ } } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1845,6 +2156,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -1855,6 +2176,32 @@ "node": ">=6.9.0" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -1862,6 +2209,35 @@ "dev": true, "license": "MIT" }, + "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-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -1878,6 +2254,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -1897,6 +2296,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-what": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", @@ -1926,6 +2335,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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", @@ -1966,6 +2385,26 @@ "dev": true, "license": "MIT" }, + "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/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/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -1985,30 +2424,79 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, - "license": "MIT" - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/ms": { + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, + "node_modules/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", @@ -2034,6 +2522,46 @@ "dev": true, "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/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "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", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "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/ohash": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", @@ -2060,6 +2588,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -2093,6 +2628,26 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "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/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/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -2121,6 +2676,229 @@ "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": "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/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-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-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/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/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/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -2183,6 +2961,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2227,6 +3029,29 @@ "node": ">=0.10.0" } }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/superjson": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", @@ -2240,6 +3065,80 @@ "node": ">=16" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/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/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -2257,6 +3156,19 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", @@ -2267,6 +3179,13 @@ "node": ">=6" } }, + "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/unplugin-utils": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", @@ -2315,6 +3234,13 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/vite": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", diff --git a/codeboy_frontend/package.json b/codeboy_frontend/package.json index 08afa54..0978f19 100644 --- a/codeboy_frontend/package.json +++ b/codeboy_frontend/package.json @@ -18,6 +18,9 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.2", + "autoprefixer": "^10.4.22", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.18", "vite": "^7.2.4", "vite-plugin-vue-devtools": "^8.0.5" } diff --git a/codeboy_frontend/postcss.config.cjs b/codeboy_frontend/postcss.config.cjs new file mode 100644 index 0000000..12a703d --- /dev/null +++ b/codeboy_frontend/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/codeboy_frontend/src/app/App.vue b/codeboy_frontend/src/app/App.vue index 3ed4b37..1c4ae55 100644 --- a/codeboy_frontend/src/app/App.vue +++ b/codeboy_frontend/src/app/App.vue @@ -1,4 +1,6 @@ - +