From 87d454852c03f8b142fdb410adc8ddfb6f14fca0 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Sun, 1 Feb 2026 23:26:21 +0530 Subject: [PATCH] Add Tailwind + shadcn UI primitives; add React Query + Orval client --- frontend/.eslintignore | 3 + frontend/eslint.config.mjs | 3 + frontend/orval.config.ts | 26 + frontend/package-lock.json | 2526 ++++++++++++++++- frontend/package.json | 14 +- frontend/postcss.config.js | 6 + .../api/generated/activities/activities.ts | 69 + frontend/src/api/generated/default/default.ts | 33 + frontend/src/api/generated/hr/hr.ts | 216 ++ .../src/api/generated/model/department.ts | 12 + .../api/generated/model/departmentCreate.ts | 11 + .../api/generated/model/departmentUpdate.ts | 11 + frontend/src/api/generated/model/employee.ts | 16 + .../src/api/generated/model/employeeCreate.ts | 15 + .../src/api/generated/model/employeeUpdate.ts | 15 + .../api/generated/model/employmentAction.ts | 15 + .../generated/model/employmentActionCreate.ts | 13 + .../generated/model/hTTPValidationError.ts | 11 + .../api/generated/model/headcountRequest.ts | 18 + .../generated/model/headcountRequestCreate.ts | 15 + .../generated/model/headcountRequestUpdate.ts | 11 + frontend/src/api/generated/model/index.ts | 31 + .../listActivitiesActivitiesGetParams.ts | 10 + .../listTaskCommentsTaskCommentsGetParams.ts | 10 + .../model/listTasksTasksGetParams.ts | 10 + frontend/src/api/generated/model/project.ts | 12 + .../src/api/generated/model/projectCreate.ts | 11 + .../src/api/generated/model/projectUpdate.ts | 11 + frontend/src/api/generated/model/task.ts | 19 + .../src/api/generated/model/taskComment.ts | 14 + .../api/generated/model/taskCommentCreate.ts | 12 + .../src/api/generated/model/taskCreate.ts | 16 + .../src/api/generated/model/taskUpdate.ts | 14 + .../api/generated/model/validationError.ts | 12 + frontend/src/api/generated/org/org.ts | 265 ++ .../src/api/generated/projects/projects.ts | 138 + frontend/src/api/generated/work/work.ts | 304 ++ frontend/src/api/mutator.ts | 22 + frontend/src/app/globals.css | 78 +- frontend/src/app/layout.tsx | 3 +- frontend/src/app/page.tsx | 182 +- frontend/src/app/providers.tsx | 20 + frontend/src/components/ui/button.tsx | 49 + frontend/src/components/ui/card.tsx | 51 + frontend/src/lib/utils.ts | 6 + frontend/tailwind.config.cjs | 50 + frontend/tsconfig.json | 17 +- 47 files changed, 4262 insertions(+), 164 deletions(-) create mode 100644 frontend/.eslintignore create mode 100644 frontend/orval.config.ts create mode 100644 frontend/postcss.config.js create mode 100644 frontend/src/api/generated/activities/activities.ts create mode 100644 frontend/src/api/generated/default/default.ts create mode 100644 frontend/src/api/generated/hr/hr.ts create mode 100644 frontend/src/api/generated/model/department.ts create mode 100644 frontend/src/api/generated/model/departmentCreate.ts create mode 100644 frontend/src/api/generated/model/departmentUpdate.ts create mode 100644 frontend/src/api/generated/model/employee.ts create mode 100644 frontend/src/api/generated/model/employeeCreate.ts create mode 100644 frontend/src/api/generated/model/employeeUpdate.ts create mode 100644 frontend/src/api/generated/model/employmentAction.ts create mode 100644 frontend/src/api/generated/model/employmentActionCreate.ts create mode 100644 frontend/src/api/generated/model/hTTPValidationError.ts create mode 100644 frontend/src/api/generated/model/headcountRequest.ts create mode 100644 frontend/src/api/generated/model/headcountRequestCreate.ts create mode 100644 frontend/src/api/generated/model/headcountRequestUpdate.ts create mode 100644 frontend/src/api/generated/model/index.ts create mode 100644 frontend/src/api/generated/model/listActivitiesActivitiesGetParams.ts create mode 100644 frontend/src/api/generated/model/listTaskCommentsTaskCommentsGetParams.ts create mode 100644 frontend/src/api/generated/model/listTasksTasksGetParams.ts create mode 100644 frontend/src/api/generated/model/project.ts create mode 100644 frontend/src/api/generated/model/projectCreate.ts create mode 100644 frontend/src/api/generated/model/projectUpdate.ts create mode 100644 frontend/src/api/generated/model/task.ts create mode 100644 frontend/src/api/generated/model/taskComment.ts create mode 100644 frontend/src/api/generated/model/taskCommentCreate.ts create mode 100644 frontend/src/api/generated/model/taskCreate.ts create mode 100644 frontend/src/api/generated/model/taskUpdate.ts create mode 100644 frontend/src/api/generated/model/validationError.ts create mode 100644 frontend/src/api/generated/org/org.ts create mode 100644 frontend/src/api/generated/projects/projects.ts create mode 100644 frontend/src/api/generated/work/work.ts create mode 100644 frontend/src/api/mutator.ts create mode 100644 frontend/src/app/providers.tsx create mode 100644 frontend/src/components/ui/button.tsx create mode 100644 frontend/src/components/ui/card.tsx create mode 100644 frontend/src/lib/utils.ts create mode 100644 frontend/tailwind.config.cjs diff --git a/frontend/.eslintignore b/frontend/.eslintignore new file mode 100644 index 00000000..c1c4fabb --- /dev/null +++ b/frontend/.eslintignore @@ -0,0 +1,3 @@ +tailwind.config.* +postcss.config.* +orval.config.* diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs index 05e726d1..b1cd1720 100644 --- a/frontend/eslint.config.mjs +++ b/frontend/eslint.config.mjs @@ -12,6 +12,9 @@ const eslintConfig = defineConfig([ "out/**", "build/**", "next-env.d.ts", + "tailwind.config.*", + "postcss.config.*", + "orval.config.*", ]), ]); diff --git a/frontend/orval.config.ts b/frontend/orval.config.ts new file mode 100644 index 00000000..16b24c38 --- /dev/null +++ b/frontend/orval.config.ts @@ -0,0 +1,26 @@ +import { defineConfig } from "orval"; + +export default defineConfig({ + api: { + input: { + target: "http://127.0.0.1:8000/openapi.json", + }, + output: { + mode: "tags-split", + target: "src/api/generated/index.ts", + schemas: "src/api/generated/model", + client: "fetch", + prettier: true, + override: { + mutator: { + path: "src/api/mutator.ts", + name: "customFetch", + }, + query: { + useQuery: true, + useMutation: true, + }, + }, + }, + }, +}); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d0ce0811..80a011fe 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "frontend", "version": "0.1.0", "dependencies": { + "@tanstack/react-query": "^5.90.20", "next": "16.1.6", "react": "19.2.3", "react-dom": "19.2.3" @@ -16,11 +17,34 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "autoprefixer": "^10.4.24", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "eslint": "^9", "eslint-config-next": "16.1.6", + "lucide-react": "^0.563.0", + "orval": "^8.2.0", + "postcss": "^8.5.6", + "prettier": "^3.8.1", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^3.4.17", + "tailwindcss-animate": "^1.0.7", "typescript": "^5" } }, + "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.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", @@ -294,6 +318,448 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -438,6 +904,20 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@gerrit0/mini-shiki": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.22.0.tgz", + "integrity": "sha512-jMpciqEVUBKE1QwU64S4saNMzpsSza6diNCk4MWAeCxO2+LFi2FIFmL2S0VDLzEJCxuvCbU783xi8Hp/gkM5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^3.22.0", + "@shikijs/langs": "^3.22.0", + "@shikijs/themes": "^3.22.0", + "@shikijs/types": "^3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1211,6 +1691,163 @@ "node": ">=12.4.0" } }, + "node_modules/@orval/angular": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/angular/-/angular-8.2.0.tgz", + "integrity": "sha512-M7Y8MHd8lkhmqXrwtN9A7qWLw4ec0PovlPpZuffe5wHA/dl1PCN4fVTVOqAG8TFD+Xml/r9yl2yVgvg6osK2Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0" + } + }, + "node_modules/@orval/axios": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/axios/-/axios-8.2.0.tgz", + "integrity": "sha512-aR/5DKE06FWZd9LV9vvPdxVkbu1oGwfPRn3smAfUiZSFFf8CYI8eFcA33Ihazyh0z0Y7FNsk0nXtTvlfPIgx0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0" + } + }, + "node_modules/@orval/core": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/core/-/core-8.2.0.tgz", + "integrity": "sha512-opnmNg03nZJ6rXGyMDJJ2UrsrMpINYHcJQIeCH+7WV8IHn8nBtgC7fZBeFpFkw2yK8cLyP7h+q5TDy8rkPEYPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/openapi-types": "0.5.3", + "acorn": "^8.15.0", + "chalk": "^5.6.2", + "compare-versions": "^6.1.1", + "debug": "^4.4.3", + "esbuild": "^0.27.2", + "esutils": "2.0.3", + "fs-extra": "^11.3.2", + "globby": "16.1.0", + "remeda": "^2.32.0", + "typedoc": "^0.28.15" + } + }, + "node_modules/@orval/core/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@orval/fetch": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/fetch/-/fetch-8.2.0.tgz", + "integrity": "sha512-dY82yR3z5QP4m4HGKiROf7p263D31nCIUPm4HCj1mpN6ua6gDEcqvjlvuclcOLd2x0DpG0NESq+ujZvQ3m2GGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0", + "@scalar/openapi-types": "0.5.3" + } + }, + "node_modules/@orval/hono": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/hono/-/hono-8.2.0.tgz", + "integrity": "sha512-qRZtQMwrZ/dQRPcYfG9L3EW0q1Tc3BGjPDFF/EPTbuxOAxYvIB/Jgq3KBVImHyuGdwmiJiBH1px7EIcfki1YbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0", + "@orval/zod": "8.2.0", + "fs-extra": "^11.3.2", + "remeda": "^2.32.0" + } + }, + "node_modules/@orval/mcp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/mcp/-/mcp-8.2.0.tgz", + "integrity": "sha512-n5jogm6/tJeZarGGHsnMxKPPLJkfYeSPFnZYOpR54UXt82KaEDqltqphTJLuKHpZLUkhmIxMRtUrhmpW7MWKEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0", + "@orval/fetch": "8.2.0", + "@orval/zod": "8.2.0" + } + }, + "node_modules/@orval/mock": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/mock/-/mock-8.2.0.tgz", + "integrity": "sha512-eJuPvKZnV6Ty89i/ab0gWiWE0LS2Xtu+M+67+3PBTi/PqpxI9jsYeIWlNnv8mhOmtMhZ9z/FRxydjfODKeGK+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0" + } + }, + "node_modules/@orval/query": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/query/-/query-8.2.0.tgz", + "integrity": "sha512-9/y55gKm1mF+BKZBetKowCcJrnz5HrcDlHOtnf2rZJjepQ73vgsOOnLviVxUrJf4w5Yxb4MPbgzL8KklOzhYPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0", + "@orval/fetch": "8.2.0", + "chalk": "^5.6.2", + "remeda": "^2.32.0" + } + }, + "node_modules/@orval/query/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@orval/solid-start": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/solid-start/-/solid-start-8.2.0.tgz", + "integrity": "sha512-FPxEC4cMi3VIMBb3lcuI33VrRug+PHREI5QMA6TqKULGfc07OtStKZaRXLugIP8Dxkkn+YU+xSZgE58/bG77Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0" + } + }, + "node_modules/@orval/swr": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/swr/-/swr-8.2.0.tgz", + "integrity": "sha512-CSvhQAWv/MD2MeF6ewfgMCIB1NB1neSnpo/iVxehodPnM0tWqf0+xSdUWktSofLbJa900Si/XRbmywa9wLd3Kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0", + "@orval/fetch": "8.2.0" + } + }, + "node_modules/@orval/zod": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@orval/zod/-/zod-8.2.0.tgz", + "integrity": "sha512-r710+ZNxl4AHiIuyh5/T1S3Gx/tGoA5b/ukWtRIsICNuSJpOd2o4Pct4CKWiBIn+Vyv4J0xN9hU2EZeRs0qXBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@orval/core": "8.2.0", + "remeda": "^2.32.0" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1218,6 +1855,209 @@ "dev": true, "license": "MIT" }, + "node_modules/@scalar/helpers": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.6.tgz", + "integrity": "sha512-A471YFBCj7ZOlGIkAYnU8oYgeyts82ZNX+4UicrlmKv3eAQ+kwboN3Dy0R6u1lcA/+I/zzeXi/fBObsT7P9qTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/json-magic": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.8.10.tgz", + "integrity": "sha512-TWdKQ/hcy4erFQDp2MVlFoPesFep2VY96Q69cjLHmx5hxM0ZUBfmNB4lA8Uh3klgx5JmCDfSNIGjPFIpxlosUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/helpers": "0.2.6", + "yaml": "^2.8.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@scalar/openapi-parser/-/openapi-parser-0.23.13.tgz", + "integrity": "sha512-YsljPOKOgQgZL/kBcEouwz2CUa+2hFfThlUZRWC2DFI2Fnw5Ur8F1IvGgPqCAHr9p2XMH+Z/Pag2jZUfLcxcww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/json-magic": "0.9.0", + "@scalar/openapi-types": "0.5.3", + "@scalar/openapi-upgrader": "0.1.7", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "ajv-formats": "^3.0.1", + "jsonpointer": "^5.0.1", + "leven": "^4.0.0", + "yaml": "^2.8.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/@scalar/helpers": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.7.tgz", + "integrity": "sha512-uFTcdi3XYDDuaJLWiMuM3ijQit1OBw7AkuOuujReY8L9UmUQHY56erYg0+Db3llTsinuIYFh+eS/WX/sYuevYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/@scalar/json-magic": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.9.0.tgz", + "integrity": "sha512-aSWd8rd3O73Ak9Ylson2TywvOuTjjOYiXydl9Cn8Ip/r7fi+h0QqAGom5gqo/WewrhySF9v+H/sW/Qmd05T/Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/helpers": "0.2.7", + "yaml": "^2.8.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@scalar/openapi-parser/node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@scalar/openapi-parser/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scalar/openapi-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.5.3.tgz", + "integrity": "sha512-m4n/Su3K01d15dmdWO1LlqecdSPKuNjuokrJLdiQ485kW/hRHbXW1QP6tJL75myhw/XhX5YhYAR+jrwnGjXiMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^4.1.11" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@scalar/openapi-upgrader": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@scalar/openapi-upgrader/-/openapi-upgrader-0.1.7.tgz", + "integrity": "sha512-065froUtqvaHjyeJtyitf8tb+k7oh7nU0OinAHYbj1Bqgwb1s2+uKMqHYHEES5CNpp+2xtL4lxup6Aq29yW+sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@scalar/openapi-types": "0.5.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", + "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz", + "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz", + "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1227,6 +2067,32 @@ "tslib": "^2.8.0" } }, + "node_modules/@tanstack/query-core": { + "version": "5.90.20", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.20.tgz", + "integrity": "sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.20", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz", + "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.90.20" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -1245,6 +2111,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1289,6 +2165,13 @@ "@types/react": "^19.2.0" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.54.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", @@ -1867,6 +2750,68 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1883,6 +2828,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", @@ -2077,6 +3050,43 @@ "node": ">= 0.4" } }, + "node_modules/autoprefixer": { + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "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.28.1", + "caniuse-lite": "^1.0.30001766", + "fraction.js": "^5.3.4", + "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/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -2129,6 +3139,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/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -2247,6 +3270,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.30001766", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", @@ -2284,12 +3317,73 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "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/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2310,6 +3404,23 @@ "dev": true, "license": "MIT" }, + "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/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2339,6 +3450,19 @@ "node": ">= 8" } }, + "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", @@ -2478,6 +3602,20 @@ "node": ">=8" } }, + "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/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2520,6 +3658,33 @@ "dev": true, "license": "MIT" }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-abstract": { "version": "1.24.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", @@ -2697,6 +3862,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3144,6 +4351,33 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3195,6 +4429,23 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -3205,6 +4456,22 @@ "reusify": "^1.0.4" } }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -3285,6 +4552,50 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3385,6 +4696,23 @@ "node": ">= 0.4" } }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", @@ -3459,6 +4787,67 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globby": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", + "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/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/globby/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/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3472,6 +4861,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -3583,6 +4979,16 @@ "hermes-estree": "0.25.1" } }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3689,6 +5095,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", @@ -3905,6 +5324,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -3953,6 +5398,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -4004,6 +5462,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -4082,6 +5553,16 @@ "node": ">= 0.4" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4149,6 +5630,29 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -4195,6 +5699,19 @@ "node": ">=0.10" } }, + "node_modules/leven": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-4.1.0.tgz", + "integrity": "sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4209,6 +5726,36 @@ "node": ">= 0.8.0" } }, + "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/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4255,6 +5802,41 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4265,6 +5847,13 @@ "node": ">= 0.4" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4319,6 +5908,18 @@ "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", @@ -4413,6 +6014,34 @@ } } }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -4420,6 +6049,59 @@ "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/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4430,6 +6112,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", @@ -4561,6 +6253,205 @@ "node": ">= 0.8.0" } }, + "node_modules/orval": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/orval/-/orval-8.2.0.tgz", + "integrity": "sha512-1X/OUopJNvnOJKHbkdhrjChF2QPIRRLWMLXgnI42efS8ErNViassU2HLm/T27tgptbYxTxbAsiidcSrgRbrL0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commander-js/extra-typings": "^14.0.0", + "@orval/angular": "8.2.0", + "@orval/axios": "8.2.0", + "@orval/core": "8.2.0", + "@orval/fetch": "8.2.0", + "@orval/hono": "8.2.0", + "@orval/mcp": "8.2.0", + "@orval/mock": "8.2.0", + "@orval/query": "8.2.0", + "@orval/solid-start": "8.2.0", + "@orval/swr": "8.2.0", + "@orval/zod": "8.2.0", + "@scalar/json-magic": "^0.8.8", + "@scalar/openapi-parser": "^0.23.9", + "@scalar/openapi-types": "0.5.3", + "chalk": "^5.6.2", + "chokidar": "^5.0.0", + "commander": "^14.0.2", + "enquirer": "^2.4.1", + "execa": "^9.6.1", + "find-up": "8.0.0", + "fs-extra": "^11.3.2", + "jiti": "^2.6.1", + "js-yaml": "4.1.1", + "remeda": "^2.32.0", + "string-argv": "^0.3.2", + "tsconfck": "^3.1.6", + "typedoc": "^0.28.15", + "typedoc-plugin-coverage": "^4.0.2", + "typedoc-plugin-markdown": "^4.9.0" + }, + "bin": { + "orval": "dist/bin/orval.mjs" + }, + "engines": { + "node": ">=22.18.0" + } + }, + "node_modules/orval/node_modules/@commander-js/extra-typings": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-14.0.0.tgz", + "integrity": "sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "commander": "~14.0.0" + } + }, + "node_modules/orval/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/orval/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/orval/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/orval/node_modules/find-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", + "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^8.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/locate-path": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", + "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/orval/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/orval/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -4624,6 +6515,19 @@ "node": ">=6" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4670,6 +6574,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/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -4681,9 +6605,10 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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", @@ -4700,14 +6625,105 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "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-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/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4718,6 +6734,38 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -4740,6 +6788,16 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4789,6 +6847,29 @@ "dev": true, "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/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -4833,6 +6914,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remeda": { + "version": "2.33.4", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz", + "integrity": "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/remeda" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -5186,6 +7287,32 @@ "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/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5216,6 +7343,16 @@ "node": ">= 0.4" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -5329,6 +7466,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -5339,6 +7489,19 @@ "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5375,6 +7538,29 @@ } } }, + "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/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5401,6 +7587,164 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "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.6", + "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", + "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-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "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/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/tailwindcss/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "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", @@ -5475,6 +7819,34 @@ "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/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "dev": true, + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -5598,6 +7970,82 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedoc": { + "version": "0.28.16", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.16.tgz", + "integrity": "sha512-x4xW77QC3i5DUFMBp0qjukOTnr/sSg+oEs86nB3LjDslvAmwe/PUGDWbe3GrIqt59oTqoXK5GRK9tAa0sYMiog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^3.17.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.8.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18", + "pnpm": ">= 10" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" + } + }, + "node_modules/typedoc-plugin-coverage": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-coverage/-/typedoc-plugin-coverage-4.0.2.tgz", + "integrity": "sha512-mfn0e7NCqB8x2PfvhXrtmd7KWlsNf1+B2N9y8gR/jexXBLrXl/0e+b2HdG5HaTXGi7i0t2pyQY2VRmq7gtdEHQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.28.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.9.0.tgz", + "integrity": "sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.28.x" + } + }, + "node_modules/typedoc/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/typedoc/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/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -5636,6 +8084,13 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -5662,6 +8117,29 @@ "dev": true, "license": "MIT" }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -5738,6 +8216,13 @@ "punycode": "^2.1.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/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5860,6 +8345,22 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5873,6 +8374,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", diff --git a/frontend/package.json b/frontend/package.json index aa2850ed..0bd957ad 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,9 +7,11 @@ "build": "next build", "start": "next start", "lint": "eslint", - "dev:lan": "next dev --hostname 0.0.0.0 --port 3000" + "dev:lan": "next dev --hostname 0.0.0.0 --port 3000", + "api:gen": "orval --config ./orval.config.ts" }, "dependencies": { + "@tanstack/react-query": "^5.90.20", "next": "16.1.6", "react": "19.2.3", "react-dom": "19.2.3" @@ -18,8 +20,18 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "autoprefixer": "^10.4.24", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "eslint": "^9", "eslint-config-next": "16.1.6", + "lucide-react": "^0.563.0", + "orval": "^8.2.0", + "postcss": "^8.5.6", + "prettier": "^3.8.1", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^3.4.17", + "tailwindcss-animate": "^1.0.7", "typescript": "^5" } } diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/frontend/src/api/generated/activities/activities.ts b/frontend/src/api/generated/activities/activities.ts new file mode 100644 index 00000000..ceb8c79a --- /dev/null +++ b/frontend/src/api/generated/activities/activities.ts @@ -0,0 +1,69 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import type { + HTTPValidationError, + ListActivitiesActivitiesGetParams, +} from ".././model"; + +import { customFetch } from "../../mutator"; + +/** + * @summary List Activities + */ +export type listActivitiesActivitiesGetResponse200 = { + data: unknown; + status: 200; +}; + +export type listActivitiesActivitiesGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listActivitiesActivitiesGetResponseSuccess = + listActivitiesActivitiesGetResponse200 & { + headers: Headers; + }; +export type listActivitiesActivitiesGetResponseError = + listActivitiesActivitiesGetResponse422 & { + headers: Headers; + }; + +export type listActivitiesActivitiesGetResponse = + | listActivitiesActivitiesGetResponseSuccess + | listActivitiesActivitiesGetResponseError; + +export const getListActivitiesActivitiesGetUrl = ( + params?: ListActivitiesActivitiesGetParams, +) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/activities?${stringifiedParams}` + : `/activities`; +}; + +export const listActivitiesActivitiesGet = async ( + params?: ListActivitiesActivitiesGetParams, + options?: RequestInit, +): Promise => { + return customFetch( + getListActivitiesActivitiesGetUrl(params), + { + ...options, + method: "GET", + }, + ); +}; diff --git a/frontend/src/api/generated/default/default.ts b/frontend/src/api/generated/default/default.ts new file mode 100644 index 00000000..cf6faab9 --- /dev/null +++ b/frontend/src/api/generated/default/default.ts @@ -0,0 +1,33 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import { customFetch } from "../../mutator"; + +/** + * @summary Health + */ +export type healthHealthGetResponse200 = { + data: unknown; + status: 200; +}; + +export type healthHealthGetResponseSuccess = healthHealthGetResponse200 & { + headers: Headers; +}; +export type healthHealthGetResponse = healthHealthGetResponseSuccess; + +export const getHealthHealthGetUrl = () => { + return `/health`; +}; + +export const healthHealthGet = async ( + options?: RequestInit, +): Promise => { + return customFetch(getHealthHealthGetUrl(), { + ...options, + method: "GET", + }); +}; diff --git a/frontend/src/api/generated/hr/hr.ts b/frontend/src/api/generated/hr/hr.ts new file mode 100644 index 00000000..eeda8981 --- /dev/null +++ b/frontend/src/api/generated/hr/hr.ts @@ -0,0 +1,216 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import type { + EmploymentAction, + EmploymentActionCreate, + HTTPValidationError, + HeadcountRequest, + HeadcountRequestCreate, + HeadcountRequestUpdate, +} from ".././model"; + +import { customFetch } from "../../mutator"; + +/** + * @summary List Headcount Requests + */ +export type listHeadcountRequestsHrHeadcountGetResponse200 = { + data: HeadcountRequest[]; + status: 200; +}; + +export type listHeadcountRequestsHrHeadcountGetResponseSuccess = + listHeadcountRequestsHrHeadcountGetResponse200 & { + headers: Headers; + }; +export type listHeadcountRequestsHrHeadcountGetResponse = + listHeadcountRequestsHrHeadcountGetResponseSuccess; + +export const getListHeadcountRequestsHrHeadcountGetUrl = () => { + return `/hr/headcount`; +}; + +export const listHeadcountRequestsHrHeadcountGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getListHeadcountRequestsHrHeadcountGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Headcount Request + */ +export type createHeadcountRequestHrHeadcountPostResponse200 = { + data: HeadcountRequest; + status: 200; +}; + +export type createHeadcountRequestHrHeadcountPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createHeadcountRequestHrHeadcountPostResponseSuccess = + createHeadcountRequestHrHeadcountPostResponse200 & { + headers: Headers; + }; +export type createHeadcountRequestHrHeadcountPostResponseError = + createHeadcountRequestHrHeadcountPostResponse422 & { + headers: Headers; + }; + +export type createHeadcountRequestHrHeadcountPostResponse = + | createHeadcountRequestHrHeadcountPostResponseSuccess + | createHeadcountRequestHrHeadcountPostResponseError; + +export const getCreateHeadcountRequestHrHeadcountPostUrl = () => { + return `/hr/headcount`; +}; + +export const createHeadcountRequestHrHeadcountPost = async ( + headcountRequestCreate: HeadcountRequestCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateHeadcountRequestHrHeadcountPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(headcountRequestCreate), + }, + ); +}; + +/** + * @summary Update Headcount Request + */ +export type updateHeadcountRequestHrHeadcountRequestIdPatchResponse200 = { + data: HeadcountRequest; + status: 200; +}; + +export type updateHeadcountRequestHrHeadcountRequestIdPatchResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type updateHeadcountRequestHrHeadcountRequestIdPatchResponseSuccess = + updateHeadcountRequestHrHeadcountRequestIdPatchResponse200 & { + headers: Headers; + }; +export type updateHeadcountRequestHrHeadcountRequestIdPatchResponseError = + updateHeadcountRequestHrHeadcountRequestIdPatchResponse422 & { + headers: Headers; + }; + +export type updateHeadcountRequestHrHeadcountRequestIdPatchResponse = + | updateHeadcountRequestHrHeadcountRequestIdPatchResponseSuccess + | updateHeadcountRequestHrHeadcountRequestIdPatchResponseError; + +export const getUpdateHeadcountRequestHrHeadcountRequestIdPatchUrl = ( + requestId: number, +) => { + return `/hr/headcount/${requestId}`; +}; + +export const updateHeadcountRequestHrHeadcountRequestIdPatch = async ( + requestId: number, + headcountRequestUpdate: HeadcountRequestUpdate, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateHeadcountRequestHrHeadcountRequestIdPatchUrl(requestId), + { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(headcountRequestUpdate), + }, + ); +}; + +/** + * @summary List Employment Actions + */ +export type listEmploymentActionsHrActionsGetResponse200 = { + data: EmploymentAction[]; + status: 200; +}; + +export type listEmploymentActionsHrActionsGetResponseSuccess = + listEmploymentActionsHrActionsGetResponse200 & { + headers: Headers; + }; +export type listEmploymentActionsHrActionsGetResponse = + listEmploymentActionsHrActionsGetResponseSuccess; + +export const getListEmploymentActionsHrActionsGetUrl = () => { + return `/hr/actions`; +}; + +export const listEmploymentActionsHrActionsGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getListEmploymentActionsHrActionsGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Employment Action + */ +export type createEmploymentActionHrActionsPostResponse200 = { + data: EmploymentAction; + status: 200; +}; + +export type createEmploymentActionHrActionsPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createEmploymentActionHrActionsPostResponseSuccess = + createEmploymentActionHrActionsPostResponse200 & { + headers: Headers; + }; +export type createEmploymentActionHrActionsPostResponseError = + createEmploymentActionHrActionsPostResponse422 & { + headers: Headers; + }; + +export type createEmploymentActionHrActionsPostResponse = + | createEmploymentActionHrActionsPostResponseSuccess + | createEmploymentActionHrActionsPostResponseError; + +export const getCreateEmploymentActionHrActionsPostUrl = () => { + return `/hr/actions`; +}; + +export const createEmploymentActionHrActionsPost = async ( + employmentActionCreate: EmploymentActionCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateEmploymentActionHrActionsPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(employmentActionCreate), + }, + ); +}; diff --git a/frontend/src/api/generated/model/department.ts b/frontend/src/api/generated/model/department.ts new file mode 100644 index 00000000..6edb4a68 --- /dev/null +++ b/frontend/src/api/generated/model/department.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface Department { + id?: number | null; + name: string; + head_employee_id?: number | null; +} diff --git a/frontend/src/api/generated/model/departmentCreate.ts b/frontend/src/api/generated/model/departmentCreate.ts new file mode 100644 index 00000000..69622566 --- /dev/null +++ b/frontend/src/api/generated/model/departmentCreate.ts @@ -0,0 +1,11 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface DepartmentCreate { + name: string; + head_employee_id?: number | null; +} diff --git a/frontend/src/api/generated/model/departmentUpdate.ts b/frontend/src/api/generated/model/departmentUpdate.ts new file mode 100644 index 00000000..0a11d7e1 --- /dev/null +++ b/frontend/src/api/generated/model/departmentUpdate.ts @@ -0,0 +1,11 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface DepartmentUpdate { + name?: string | null; + head_employee_id?: number | null; +} diff --git a/frontend/src/api/generated/model/employee.ts b/frontend/src/api/generated/model/employee.ts new file mode 100644 index 00000000..159ac3fd --- /dev/null +++ b/frontend/src/api/generated/model/employee.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface Employee { + id?: number | null; + name: string; + employee_type: string; + department_id?: number | null; + manager_id?: number | null; + title?: string | null; + status?: string; +} diff --git a/frontend/src/api/generated/model/employeeCreate.ts b/frontend/src/api/generated/model/employeeCreate.ts new file mode 100644 index 00000000..a6a58771 --- /dev/null +++ b/frontend/src/api/generated/model/employeeCreate.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface EmployeeCreate { + name: string; + employee_type: string; + department_id?: number | null; + manager_id?: number | null; + title?: string | null; + status?: string; +} diff --git a/frontend/src/api/generated/model/employeeUpdate.ts b/frontend/src/api/generated/model/employeeUpdate.ts new file mode 100644 index 00000000..d2a1706b --- /dev/null +++ b/frontend/src/api/generated/model/employeeUpdate.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface EmployeeUpdate { + name?: string | null; + employee_type?: string | null; + department_id?: number | null; + manager_id?: number | null; + title?: string | null; + status?: string | null; +} diff --git a/frontend/src/api/generated/model/employmentAction.ts b/frontend/src/api/generated/model/employmentAction.ts new file mode 100644 index 00000000..aa2bcecb --- /dev/null +++ b/frontend/src/api/generated/model/employmentAction.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface EmploymentAction { + id?: number | null; + employee_id: number; + issued_by_employee_id: number; + action_type: string; + notes?: string | null; + created_at?: string; +} diff --git a/frontend/src/api/generated/model/employmentActionCreate.ts b/frontend/src/api/generated/model/employmentActionCreate.ts new file mode 100644 index 00000000..df8cb1a5 --- /dev/null +++ b/frontend/src/api/generated/model/employmentActionCreate.ts @@ -0,0 +1,13 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface EmploymentActionCreate { + employee_id: number; + issued_by_employee_id: number; + action_type: string; + notes?: string | null; +} diff --git a/frontend/src/api/generated/model/hTTPValidationError.ts b/frontend/src/api/generated/model/hTTPValidationError.ts new file mode 100644 index 00000000..ce903fd6 --- /dev/null +++ b/frontend/src/api/generated/model/hTTPValidationError.ts @@ -0,0 +1,11 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import type { ValidationError } from "./validationError"; + +export interface HTTPValidationError { + detail?: ValidationError[]; +} diff --git a/frontend/src/api/generated/model/headcountRequest.ts b/frontend/src/api/generated/model/headcountRequest.ts new file mode 100644 index 00000000..de4d0929 --- /dev/null +++ b/frontend/src/api/generated/model/headcountRequest.ts @@ -0,0 +1,18 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface HeadcountRequest { + id?: number | null; + department_id: number; + requested_by_manager_id: number; + role_title: string; + employee_type: string; + quantity?: number; + justification?: string | null; + status?: string; + created_at?: string; +} diff --git a/frontend/src/api/generated/model/headcountRequestCreate.ts b/frontend/src/api/generated/model/headcountRequestCreate.ts new file mode 100644 index 00000000..1f5d180f --- /dev/null +++ b/frontend/src/api/generated/model/headcountRequestCreate.ts @@ -0,0 +1,15 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface HeadcountRequestCreate { + department_id: number; + requested_by_manager_id: number; + role_title: string; + employee_type: string; + quantity?: number; + justification?: string | null; +} diff --git a/frontend/src/api/generated/model/headcountRequestUpdate.ts b/frontend/src/api/generated/model/headcountRequestUpdate.ts new file mode 100644 index 00000000..fcd9b80f --- /dev/null +++ b/frontend/src/api/generated/model/headcountRequestUpdate.ts @@ -0,0 +1,11 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface HeadcountRequestUpdate { + status?: string | null; + justification?: string | null; +} diff --git a/frontend/src/api/generated/model/index.ts b/frontend/src/api/generated/model/index.ts new file mode 100644 index 00000000..7a5e58b3 --- /dev/null +++ b/frontend/src/api/generated/model/index.ts @@ -0,0 +1,31 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export * from "./department"; +export * from "./departmentCreate"; +export * from "./departmentUpdate"; +export * from "./employee"; +export * from "./employeeCreate"; +export * from "./employeeUpdate"; +export * from "./employmentAction"; +export * from "./employmentActionCreate"; +export * from "./headcountRequest"; +export * from "./headcountRequestCreate"; +export * from "./headcountRequestUpdate"; +export * from "./hTTPValidationError"; +export * from "./listActivitiesActivitiesGetParams"; +export * from "./listTaskCommentsTaskCommentsGetParams"; +export * from "./listTasksTasksGetParams"; +export * from "./project"; +export * from "./projectCreate"; +export * from "./projectUpdate"; +export * from "./task"; +export * from "./taskComment"; +export * from "./taskCommentCreate"; +export * from "./taskCreate"; +export * from "./taskUpdate"; +export * from "./validationError"; diff --git a/frontend/src/api/generated/model/listActivitiesActivitiesGetParams.ts b/frontend/src/api/generated/model/listActivitiesActivitiesGetParams.ts new file mode 100644 index 00000000..6211a8be --- /dev/null +++ b/frontend/src/api/generated/model/listActivitiesActivitiesGetParams.ts @@ -0,0 +1,10 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export type ListActivitiesActivitiesGetParams = { + limit?: number; +}; diff --git a/frontend/src/api/generated/model/listTaskCommentsTaskCommentsGetParams.ts b/frontend/src/api/generated/model/listTaskCommentsTaskCommentsGetParams.ts new file mode 100644 index 00000000..3542ea57 --- /dev/null +++ b/frontend/src/api/generated/model/listTaskCommentsTaskCommentsGetParams.ts @@ -0,0 +1,10 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export type ListTaskCommentsTaskCommentsGetParams = { + task_id: number; +}; diff --git a/frontend/src/api/generated/model/listTasksTasksGetParams.ts b/frontend/src/api/generated/model/listTasksTasksGetParams.ts new file mode 100644 index 00000000..d8200c89 --- /dev/null +++ b/frontend/src/api/generated/model/listTasksTasksGetParams.ts @@ -0,0 +1,10 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export type ListTasksTasksGetParams = { + project_id?: number | null; +}; diff --git a/frontend/src/api/generated/model/project.ts b/frontend/src/api/generated/model/project.ts new file mode 100644 index 00000000..5e3c8b5d --- /dev/null +++ b/frontend/src/api/generated/model/project.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface Project { + id?: number | null; + name: string; + status?: string; +} diff --git a/frontend/src/api/generated/model/projectCreate.ts b/frontend/src/api/generated/model/projectCreate.ts new file mode 100644 index 00000000..01a2db54 --- /dev/null +++ b/frontend/src/api/generated/model/projectCreate.ts @@ -0,0 +1,11 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface ProjectCreate { + name: string; + status?: string; +} diff --git a/frontend/src/api/generated/model/projectUpdate.ts b/frontend/src/api/generated/model/projectUpdate.ts new file mode 100644 index 00000000..84ea2e92 --- /dev/null +++ b/frontend/src/api/generated/model/projectUpdate.ts @@ -0,0 +1,11 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface ProjectUpdate { + name?: string | null; + status?: string | null; +} diff --git a/frontend/src/api/generated/model/task.ts b/frontend/src/api/generated/model/task.ts new file mode 100644 index 00000000..037f2c3d --- /dev/null +++ b/frontend/src/api/generated/model/task.ts @@ -0,0 +1,19 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface Task { + id?: number | null; + project_id: number; + title: string; + description?: string | null; + status?: string; + assignee_employee_id?: number | null; + reviewer_employee_id?: number | null; + created_by_employee_id?: number | null; + created_at?: string; + updated_at?: string; +} diff --git a/frontend/src/api/generated/model/taskComment.ts b/frontend/src/api/generated/model/taskComment.ts new file mode 100644 index 00000000..232db265 --- /dev/null +++ b/frontend/src/api/generated/model/taskComment.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface TaskComment { + id?: number | null; + task_id: number; + author_employee_id?: number | null; + body: string; + created_at?: string; +} diff --git a/frontend/src/api/generated/model/taskCommentCreate.ts b/frontend/src/api/generated/model/taskCommentCreate.ts new file mode 100644 index 00000000..01342715 --- /dev/null +++ b/frontend/src/api/generated/model/taskCommentCreate.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface TaskCommentCreate { + task_id: number; + author_employee_id?: number | null; + body: string; +} diff --git a/frontend/src/api/generated/model/taskCreate.ts b/frontend/src/api/generated/model/taskCreate.ts new file mode 100644 index 00000000..dc1aea90 --- /dev/null +++ b/frontend/src/api/generated/model/taskCreate.ts @@ -0,0 +1,16 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface TaskCreate { + project_id: number; + title: string; + description?: string | null; + status?: string; + assignee_employee_id?: number | null; + reviewer_employee_id?: number | null; + created_by_employee_id?: number | null; +} diff --git a/frontend/src/api/generated/model/taskUpdate.ts b/frontend/src/api/generated/model/taskUpdate.ts new file mode 100644 index 00000000..cd596be7 --- /dev/null +++ b/frontend/src/api/generated/model/taskUpdate.ts @@ -0,0 +1,14 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface TaskUpdate { + title?: string | null; + description?: string | null; + status?: string | null; + assignee_employee_id?: number | null; + reviewer_employee_id?: number | null; +} diff --git a/frontend/src/api/generated/model/validationError.ts b/frontend/src/api/generated/model/validationError.ts new file mode 100644 index 00000000..64b44465 --- /dev/null +++ b/frontend/src/api/generated/model/validationError.ts @@ -0,0 +1,12 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ + +export interface ValidationError { + loc: (string | number)[]; + msg: string; + type: string; +} diff --git a/frontend/src/api/generated/org/org.ts b/frontend/src/api/generated/org/org.ts new file mode 100644 index 00000000..152717bc --- /dev/null +++ b/frontend/src/api/generated/org/org.ts @@ -0,0 +1,265 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import type { + Department, + DepartmentCreate, + DepartmentUpdate, + Employee, + EmployeeCreate, + EmployeeUpdate, + HTTPValidationError, +} from ".././model"; + +import { customFetch } from "../../mutator"; + +/** + * @summary List Departments + */ +export type listDepartmentsDepartmentsGetResponse200 = { + data: Department[]; + status: 200; +}; + +export type listDepartmentsDepartmentsGetResponseSuccess = + listDepartmentsDepartmentsGetResponse200 & { + headers: Headers; + }; +export type listDepartmentsDepartmentsGetResponse = + listDepartmentsDepartmentsGetResponseSuccess; + +export const getListDepartmentsDepartmentsGetUrl = () => { + return `/departments`; +}; + +export const listDepartmentsDepartmentsGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getListDepartmentsDepartmentsGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Department + */ +export type createDepartmentDepartmentsPostResponse200 = { + data: Department; + status: 200; +}; + +export type createDepartmentDepartmentsPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createDepartmentDepartmentsPostResponseSuccess = + createDepartmentDepartmentsPostResponse200 & { + headers: Headers; + }; +export type createDepartmentDepartmentsPostResponseError = + createDepartmentDepartmentsPostResponse422 & { + headers: Headers; + }; + +export type createDepartmentDepartmentsPostResponse = + | createDepartmentDepartmentsPostResponseSuccess + | createDepartmentDepartmentsPostResponseError; + +export const getCreateDepartmentDepartmentsPostUrl = () => { + return `/departments`; +}; + +export const createDepartmentDepartmentsPost = async ( + departmentCreate: DepartmentCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateDepartmentDepartmentsPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(departmentCreate), + }, + ); +}; + +/** + * @summary Update Department + */ +export type updateDepartmentDepartmentsDepartmentIdPatchResponse200 = { + data: Department; + status: 200; +}; + +export type updateDepartmentDepartmentsDepartmentIdPatchResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type updateDepartmentDepartmentsDepartmentIdPatchResponseSuccess = + updateDepartmentDepartmentsDepartmentIdPatchResponse200 & { + headers: Headers; + }; +export type updateDepartmentDepartmentsDepartmentIdPatchResponseError = + updateDepartmentDepartmentsDepartmentIdPatchResponse422 & { + headers: Headers; + }; + +export type updateDepartmentDepartmentsDepartmentIdPatchResponse = + | updateDepartmentDepartmentsDepartmentIdPatchResponseSuccess + | updateDepartmentDepartmentsDepartmentIdPatchResponseError; + +export const getUpdateDepartmentDepartmentsDepartmentIdPatchUrl = ( + departmentId: number, +) => { + return `/departments/${departmentId}`; +}; + +export const updateDepartmentDepartmentsDepartmentIdPatch = async ( + departmentId: number, + departmentUpdate: DepartmentUpdate, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateDepartmentDepartmentsDepartmentIdPatchUrl(departmentId), + { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(departmentUpdate), + }, + ); +}; + +/** + * @summary List Employees + */ +export type listEmployeesEmployeesGetResponse200 = { + data: Employee[]; + status: 200; +}; + +export type listEmployeesEmployeesGetResponseSuccess = + listEmployeesEmployeesGetResponse200 & { + headers: Headers; + }; +export type listEmployeesEmployeesGetResponse = + listEmployeesEmployeesGetResponseSuccess; + +export const getListEmployeesEmployeesGetUrl = () => { + return `/employees`; +}; + +export const listEmployeesEmployeesGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getListEmployeesEmployeesGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Employee + */ +export type createEmployeeEmployeesPostResponse200 = { + data: Employee; + status: 200; +}; + +export type createEmployeeEmployeesPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createEmployeeEmployeesPostResponseSuccess = + createEmployeeEmployeesPostResponse200 & { + headers: Headers; + }; +export type createEmployeeEmployeesPostResponseError = + createEmployeeEmployeesPostResponse422 & { + headers: Headers; + }; + +export type createEmployeeEmployeesPostResponse = + | createEmployeeEmployeesPostResponseSuccess + | createEmployeeEmployeesPostResponseError; + +export const getCreateEmployeeEmployeesPostUrl = () => { + return `/employees`; +}; + +export const createEmployeeEmployeesPost = async ( + employeeCreate: EmployeeCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateEmployeeEmployeesPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(employeeCreate), + }, + ); +}; + +/** + * @summary Update Employee + */ +export type updateEmployeeEmployeesEmployeeIdPatchResponse200 = { + data: Employee; + status: 200; +}; + +export type updateEmployeeEmployeesEmployeeIdPatchResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type updateEmployeeEmployeesEmployeeIdPatchResponseSuccess = + updateEmployeeEmployeesEmployeeIdPatchResponse200 & { + headers: Headers; + }; +export type updateEmployeeEmployeesEmployeeIdPatchResponseError = + updateEmployeeEmployeesEmployeeIdPatchResponse422 & { + headers: Headers; + }; + +export type updateEmployeeEmployeesEmployeeIdPatchResponse = + | updateEmployeeEmployeesEmployeeIdPatchResponseSuccess + | updateEmployeeEmployeesEmployeeIdPatchResponseError; + +export const getUpdateEmployeeEmployeesEmployeeIdPatchUrl = ( + employeeId: number, +) => { + return `/employees/${employeeId}`; +}; + +export const updateEmployeeEmployeesEmployeeIdPatch = async ( + employeeId: number, + employeeUpdate: EmployeeUpdate, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateEmployeeEmployeesEmployeeIdPatchUrl(employeeId), + { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(employeeUpdate), + }, + ); +}; diff --git a/frontend/src/api/generated/projects/projects.ts b/frontend/src/api/generated/projects/projects.ts new file mode 100644 index 00000000..33c56884 --- /dev/null +++ b/frontend/src/api/generated/projects/projects.ts @@ -0,0 +1,138 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import type { + HTTPValidationError, + Project, + ProjectCreate, + ProjectUpdate, +} from ".././model"; + +import { customFetch } from "../../mutator"; + +/** + * @summary List Projects + */ +export type listProjectsProjectsGetResponse200 = { + data: Project[]; + status: 200; +}; + +export type listProjectsProjectsGetResponseSuccess = + listProjectsProjectsGetResponse200 & { + headers: Headers; + }; +export type listProjectsProjectsGetResponse = + listProjectsProjectsGetResponseSuccess; + +export const getListProjectsProjectsGetUrl = () => { + return `/projects`; +}; + +export const listProjectsProjectsGet = async ( + options?: RequestInit, +): Promise => { + return customFetch( + getListProjectsProjectsGetUrl(), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Project + */ +export type createProjectProjectsPostResponse200 = { + data: Project; + status: 200; +}; + +export type createProjectProjectsPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createProjectProjectsPostResponseSuccess = + createProjectProjectsPostResponse200 & { + headers: Headers; + }; +export type createProjectProjectsPostResponseError = + createProjectProjectsPostResponse422 & { + headers: Headers; + }; + +export type createProjectProjectsPostResponse = + | createProjectProjectsPostResponseSuccess + | createProjectProjectsPostResponseError; + +export const getCreateProjectProjectsPostUrl = () => { + return `/projects`; +}; + +export const createProjectProjectsPost = async ( + projectCreate: ProjectCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateProjectProjectsPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(projectCreate), + }, + ); +}; + +/** + * @summary Update Project + */ +export type updateProjectProjectsProjectIdPatchResponse200 = { + data: Project; + status: 200; +}; + +export type updateProjectProjectsProjectIdPatchResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type updateProjectProjectsProjectIdPatchResponseSuccess = + updateProjectProjectsProjectIdPatchResponse200 & { + headers: Headers; + }; +export type updateProjectProjectsProjectIdPatchResponseError = + updateProjectProjectsProjectIdPatchResponse422 & { + headers: Headers; + }; + +export type updateProjectProjectsProjectIdPatchResponse = + | updateProjectProjectsProjectIdPatchResponseSuccess + | updateProjectProjectsProjectIdPatchResponseError; + +export const getUpdateProjectProjectsProjectIdPatchUrl = ( + projectId: number, +) => { + return `/projects/${projectId}`; +}; + +export const updateProjectProjectsProjectIdPatch = async ( + projectId: number, + projectUpdate: ProjectUpdate, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateProjectProjectsProjectIdPatchUrl(projectId), + { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(projectUpdate), + }, + ); +}; diff --git a/frontend/src/api/generated/work/work.ts b/frontend/src/api/generated/work/work.ts new file mode 100644 index 00000000..2a8d454b --- /dev/null +++ b/frontend/src/api/generated/work/work.ts @@ -0,0 +1,304 @@ +/** + * Generated by orval v8.2.0 ๐Ÿบ + * Do not edit manually. + * OpenClaw Agency API + * OpenAPI spec version: 0.3.0 + */ +import type { + HTTPValidationError, + ListTaskCommentsTaskCommentsGetParams, + ListTasksTasksGetParams, + Task, + TaskComment, + TaskCommentCreate, + TaskCreate, + TaskUpdate, +} from ".././model"; + +import { customFetch } from "../../mutator"; + +/** + * @summary List Tasks + */ +export type listTasksTasksGetResponse200 = { + data: Task[]; + status: 200; +}; + +export type listTasksTasksGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listTasksTasksGetResponseSuccess = listTasksTasksGetResponse200 & { + headers: Headers; +}; +export type listTasksTasksGetResponseError = listTasksTasksGetResponse422 & { + headers: Headers; +}; + +export type listTasksTasksGetResponse = + | listTasksTasksGetResponseSuccess + | listTasksTasksGetResponseError; + +export const getListTasksTasksGetUrl = (params?: ListTasksTasksGetParams) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/tasks?${stringifiedParams}` + : `/tasks`; +}; + +export const listTasksTasksGet = async ( + params?: ListTasksTasksGetParams, + options?: RequestInit, +): Promise => { + return customFetch( + getListTasksTasksGetUrl(params), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Task + */ +export type createTaskTasksPostResponse200 = { + data: Task; + status: 200; +}; + +export type createTaskTasksPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createTaskTasksPostResponseSuccess = + createTaskTasksPostResponse200 & { + headers: Headers; + }; +export type createTaskTasksPostResponseError = + createTaskTasksPostResponse422 & { + headers: Headers; + }; + +export type createTaskTasksPostResponse = + | createTaskTasksPostResponseSuccess + | createTaskTasksPostResponseError; + +export const getCreateTaskTasksPostUrl = () => { + return `/tasks`; +}; + +export const createTaskTasksPost = async ( + taskCreate: TaskCreate, + options?: RequestInit, +): Promise => { + return customFetch(getCreateTaskTasksPostUrl(), { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(taskCreate), + }); +}; + +/** + * @summary Update Task + */ +export type updateTaskTasksTaskIdPatchResponse200 = { + data: Task; + status: 200; +}; + +export type updateTaskTasksTaskIdPatchResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type updateTaskTasksTaskIdPatchResponseSuccess = + updateTaskTasksTaskIdPatchResponse200 & { + headers: Headers; + }; +export type updateTaskTasksTaskIdPatchResponseError = + updateTaskTasksTaskIdPatchResponse422 & { + headers: Headers; + }; + +export type updateTaskTasksTaskIdPatchResponse = + | updateTaskTasksTaskIdPatchResponseSuccess + | updateTaskTasksTaskIdPatchResponseError; + +export const getUpdateTaskTasksTaskIdPatchUrl = (taskId: number) => { + return `/tasks/${taskId}`; +}; + +export const updateTaskTasksTaskIdPatch = async ( + taskId: number, + taskUpdate: TaskUpdate, + options?: RequestInit, +): Promise => { + return customFetch( + getUpdateTaskTasksTaskIdPatchUrl(taskId), + { + ...options, + method: "PATCH", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(taskUpdate), + }, + ); +}; + +/** + * @summary Delete Task + */ +export type deleteTaskTasksTaskIdDeleteResponse200 = { + data: unknown; + status: 200; +}; + +export type deleteTaskTasksTaskIdDeleteResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type deleteTaskTasksTaskIdDeleteResponseSuccess = + deleteTaskTasksTaskIdDeleteResponse200 & { + headers: Headers; + }; +export type deleteTaskTasksTaskIdDeleteResponseError = + deleteTaskTasksTaskIdDeleteResponse422 & { + headers: Headers; + }; + +export type deleteTaskTasksTaskIdDeleteResponse = + | deleteTaskTasksTaskIdDeleteResponseSuccess + | deleteTaskTasksTaskIdDeleteResponseError; + +export const getDeleteTaskTasksTaskIdDeleteUrl = (taskId: number) => { + return `/tasks/${taskId}`; +}; + +export const deleteTaskTasksTaskIdDelete = async ( + taskId: number, + options?: RequestInit, +): Promise => { + return customFetch( + getDeleteTaskTasksTaskIdDeleteUrl(taskId), + { + ...options, + method: "DELETE", + }, + ); +}; + +/** + * @summary List Task Comments + */ +export type listTaskCommentsTaskCommentsGetResponse200 = { + data: TaskComment[]; + status: 200; +}; + +export type listTaskCommentsTaskCommentsGetResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type listTaskCommentsTaskCommentsGetResponseSuccess = + listTaskCommentsTaskCommentsGetResponse200 & { + headers: Headers; + }; +export type listTaskCommentsTaskCommentsGetResponseError = + listTaskCommentsTaskCommentsGetResponse422 & { + headers: Headers; + }; + +export type listTaskCommentsTaskCommentsGetResponse = + | listTaskCommentsTaskCommentsGetResponseSuccess + | listTaskCommentsTaskCommentsGetResponseError; + +export const getListTaskCommentsTaskCommentsGetUrl = ( + params: ListTaskCommentsTaskCommentsGetParams, +) => { + const normalizedParams = new URLSearchParams(); + + Object.entries(params || {}).forEach(([key, value]) => { + if (value !== undefined) { + normalizedParams.append(key, value === null ? "null" : value.toString()); + } + }); + + const stringifiedParams = normalizedParams.toString(); + + return stringifiedParams.length > 0 + ? `/task-comments?${stringifiedParams}` + : `/task-comments`; +}; + +export const listTaskCommentsTaskCommentsGet = async ( + params: ListTaskCommentsTaskCommentsGetParams, + options?: RequestInit, +): Promise => { + return customFetch( + getListTaskCommentsTaskCommentsGetUrl(params), + { + ...options, + method: "GET", + }, + ); +}; + +/** + * @summary Create Task Comment + */ +export type createTaskCommentTaskCommentsPostResponse200 = { + data: TaskComment; + status: 200; +}; + +export type createTaskCommentTaskCommentsPostResponse422 = { + data: HTTPValidationError; + status: 422; +}; + +export type createTaskCommentTaskCommentsPostResponseSuccess = + createTaskCommentTaskCommentsPostResponse200 & { + headers: Headers; + }; +export type createTaskCommentTaskCommentsPostResponseError = + createTaskCommentTaskCommentsPostResponse422 & { + headers: Headers; + }; + +export type createTaskCommentTaskCommentsPostResponse = + | createTaskCommentTaskCommentsPostResponseSuccess + | createTaskCommentTaskCommentsPostResponseError; + +export const getCreateTaskCommentTaskCommentsPostUrl = () => { + return `/task-comments`; +}; + +export const createTaskCommentTaskCommentsPost = async ( + taskCommentCreate: TaskCommentCreate, + options?: RequestInit, +): Promise => { + return customFetch( + getCreateTaskCommentTaskCommentsPostUrl(), + { + ...options, + method: "POST", + headers: { "Content-Type": "application/json", ...options?.headers }, + body: JSON.stringify(taskCommentCreate), + }, + ); +}; diff --git a/frontend/src/api/mutator.ts b/frontend/src/api/mutator.ts new file mode 100644 index 00000000..54ffd1a4 --- /dev/null +++ b/frontend/src/api/mutator.ts @@ -0,0 +1,22 @@ +export async function customFetch( + url: string, + options: RequestInit, +): Promise { + const base = process.env.NEXT_PUBLIC_API_URL; + if (!base) throw new Error("NEXT_PUBLIC_API_URL is not set"); + + const res = await fetch(`${base}${url}`, { + ...options, + headers: { + "Content-Type": "application/json", + ...(options.headers ?? {}), + }, + }); + + if (!res.ok) { + const text = await res.text().catch(() => ""); + throw new Error(`${res.status} ${res.statusText}${text ? `: ${text}` : ""}`); + } + + return (await res.json()) as T; +} diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index fffb10f8..18e8490a 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -1,13 +1,67 @@ -:root{ - --mc-bg:#f6f4ef; - --mc-surface:#ffffff; - --mc-border:rgba(15,23,42,0.10); - --mc-text:#0f172a; - --mc-muted:rgba(15,23,42,0.62); - --mc-accent:#2563eb; - --mc-font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; - --mc-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --radius: 12px; +} + +.dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; +} + +* { + @apply border-border; +} + +body { + @apply bg-background text-foreground; } -html,body{height:100%} -body{margin:0;color:var(--mc-text);background:var(--mc-bg);font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji","Segoe UI Emoji";} -*{box-sizing:border-box} diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 1e83ed8b..b2e2c130 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,5 +1,6 @@ import type { Metadata } from "next"; import "./globals.css"; +import { Providers } from "./providers"; import { Shell } from "./_components/Shell"; export const metadata: Metadata = { @@ -15,7 +16,7 @@ export default function RootLayout({ return ( - {children} + {children} ); diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index a3dddb93..63ed4a83 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -1,146 +1,68 @@ "use client"; -import { useEffect, useState } from "react"; -import styles from "./_components/Shell.module.css"; -import { apiGet } from "../lib/api"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; -type Activity = { - id: number; - actor_employee_id: number | null; - entity_type: string; - entity_id: number | null; - verb: string; - payload: any; - created_at: string; -}; +import { useListProjectsProjectsGet } from "@/api/generated/projects/projects"; -type Project = { id: number; name: string; status: string }; - -type Department = { id: number; name: string; head_employee_id: number | null }; - -type Employee = { - id: number; - name: string; - employee_type: string; - department_id: number | null; - manager_id: number | null; - title: string | null; - status: string; -}; - -type Task = { - id: number; - project_id: number; - title: string; - status: string; - assignee_employee_id: number | null; - reviewer_employee_id: number | null; - created_at: string; - updated_at: string; -}; - -export default function MissionControlHome() { - const [activities, setActivities] = useState([]); - const [projects, setProjects] = useState([]); - const [departments, setDepartments] = useState([]); - const [employees, setEmployees] = useState([]); - const [tasks, setTasks] = useState([]); - const [error, setError] = useState(null); - - async function load() { - setError(null); - try { - const [a, p, d, e, t] = await Promise.all([ - apiGet("/activities?limit=20"), - apiGet("/projects"), - apiGet("/departments"), - apiGet("/employees"), - apiGet("/tasks"), - ]); - setActivities(a); - setProjects(p); - setDepartments(d); - setEmployees(e); - setTasks(t); - } catch (err: unknown) { - setError(err instanceof Error ? err.message : "Unknown error"); - } - } - - useEffect(() => { - load(); - }, []); - - const activeProjects = projects.filter((x) => x.status === "active").length; - const activeEmployees = employees.filter((x) => x.status === "active").length; - const blockedTasks = tasks.filter((t) => t.status === "blocked").length; - const reviewQueue = tasks.filter((t) => t.status === "review").length; +export default function Home() { + const projects = useListProjectsProjectsGet(); return ( -
-
+
+
-

Mission Control

-

- Company dashboard: departments, employees/agents, projects, and work โ€” designed to run like a real org. +

Company Mission Control

+

+ Orval-generated client + React Query + shadcn-style components.

- +
- {error ? ( -
-
Error
-
{error}
-
- ) : null} +
+ + + Projects + GET /projects + + + {projects.isLoading ?
Loadingโ€ฆ
: null} + {projects.error ? ( +
{(projects.error as Error).message}
+ ) : null} + {!projects.isLoading && !projects.error ? ( +
    + {projects.data?.map((p) => ( +
  • +
    {p.name}
    +
    {p.status}
    +
  • + ))} + {(projects.data?.length ?? 0) === 0 ? ( +
  • No projects yet.
  • + ) : null} +
+ ) : null} +
+
-
-
-
Company Snapshot
-
- Projects: {activeProjects} - Departments: {departments.length} - Active people: {activeEmployees} - In review: {reviewQueue} - Blocked: {blockedTasks} -
-
- {projects.slice(0, 6).map((p) => ( -
-
-
{p.name}
- {p.status} -
-
- Project ID: {p.id} -
-
- ))} - {projects.length === 0 ?
No projects yet. Create one in Projects.
: null} -
-
- -
-
Activity Feed
-
- {activities.map((a) => ( -
-
-
- {a.entity_type} ยท {a.verb} - {a.entity_id != null ? ` #${a.entity_id}` : ""} -
- {new Date(a.created_at).toLocaleString()} -
- {a.payload ?
{JSON.stringify(a.payload)}
: null} -
- ))} - {activities.length === 0 ?
No activity yet.
: null} -
-
+ + + API + Docs & health + + +
+ Docs: /docs +
+
+ Set NEXT_PUBLIC_API_URL in .env.local (example: http://192.168.1.101:8000). +
+
+
); diff --git a/frontend/src/app/providers.tsx b/frontend/src/app/providers.tsx new file mode 100644 index 00000000..35fd8b0a --- /dev/null +++ b/frontend/src/app/providers.tsx @@ -0,0 +1,20 @@ +"use client"; + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { useState } from "react"; + +export function Providers({ children }: { children: React.ReactNode }) { + const [client] = useState( + () => + new QueryClient({ + defaultOptions: { + queries: { + retry: 1, + refetchOnWindowFocus: false, + }, + }, + }) + ); + + return {children}; +} diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx new file mode 100644 index 00000000..80c7472d --- /dev/null +++ b/frontend/src/components/ui/button.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:opacity-90", + secondary: "bg-secondary text-secondary-foreground hover:opacity-90", + outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + destructive: "bg-destructive text-destructive-foreground hover:opacity-90", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps {} + +const Button = React.forwardRef( + ({ className, variant, size, ...props }, ref) => { + return ( +