diff --git a/.gitignore b/.gitignore
index a84107af3..57854c1fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,5 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+
+.env.local
diff --git a/.vscode/typescriptreact.json.code-snippets b/.vscode/typescriptreact.json.code-snippets
new file mode 100644
index 000000000..183c9a3e2
--- /dev/null
+++ b/.vscode/typescriptreact.json.code-snippets
@@ -0,0 +1,57 @@
+{
+ // Place your dojangNext workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
+ // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
+ // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
+ // used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
+ // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
+ // Placeholders with the same ids are connected.
+ // Example:
+ // "Print to console": {
+ // "scope": "javascript,typescript",
+ // "prefix": "log",
+ // "body": [
+ // "console.log('$1');",
+ // "$2"
+ // ],
+ // "description": "Log output to console"
+ // }
+
+
+ "comp": {
+ "prefix": "comp",
+ "body": [
+ "const ${1:${TM_FILENAME_BASE/(.)(.*)/${1:/capitalize}${2}/}} = () => {",
+ " return (",
+ "
${1:${TM_FILENAME_BASE/(.)(.*)/${1:/capitalize}${2}/}}
",
+ " )",
+ "}",
+ "",
+ "export default ${1:${TM_FILENAME_BASE/(.)(.*)/${1:/capitalize}${2}/}}"
+ ],
+ "description": "Create a component"
+ },
+"compt": {
+ "prefix": "compt",
+ "body": [
+ "const ${1:${TM_FILENAME_BASE/(.)(.*)/${1:/capitalize}${2}/}} = () => {",
+ " return (",
+ " ${1:${TM_FILENAME_BASE/(.)(.*)/${1:/capitalize}${2}/}}
",
+ " )",
+ "}",
+ "",
+ "export default ${1:${TM_FILENAME_BASE/(.)(.*)/${1:/capitalize}${2}/}}"
+ ],
+ "description": "Create a component with tailwind classname"
+ },
+
+"divt": {
+ "prefix": "divt",
+ "body": [
+
+ "
",
+ ],
+ "description": "Create a component with tailwind classname"
+ }
+
+
+}
\ No newline at end of file
diff --git a/calendarEvents.jsonl b/calendarEvents.jsonl
new file mode 100644
index 000000000..aa6018ef2
--- /dev/null
+++ b/calendarEvents.jsonl
@@ -0,0 +1,10 @@
+{"title": "Math","allDay": false,"start": "","end": ""}
+{"title": "English","allDay": false,"start": "","end": ""}
+{"title": "Biology","allDay": false,"start": "","end": ""}
+{"title": "Physics","allDay": false,"start": "","end": ""}
+{"title": "Chemistry","allDay": false,"start": "","end": ""}
+{"title": "History","allDay": false,"start": "","end": ""}
+{"title": "English","allDay": false,"start": "","end": ""}
+{"title": "Biology","allDay": false,"start": "","end": ""}
+{"title": "Physics","allDay": false,"start": "","end": ""}
+{"title": "History","allDay": false,"start": "","end": ""}
\ No newline at end of file
diff --git a/convex/README.md b/convex/README.md
new file mode 100644
index 000000000..4d82e1363
--- /dev/null
+++ b/convex/README.md
@@ -0,0 +1,90 @@
+# Welcome to your Convex functions directory!
+
+Write your Convex functions here.
+See https://docs.convex.dev/functions for more.
+
+A query function that takes two arguments looks like:
+
+```ts
+// functions.js
+import { query } from "./_generated/server";
+import { v } from "convex/values";
+
+export const myQueryFunction = query({
+ // Validators for arguments.
+ args: {
+ first: v.number(),
+ second: v.string(),
+ },
+
+ // Function implementation.
+ handler: async (ctx, args) => {
+ // Read the database as many times as you need here.
+ // See https://docs.convex.dev/database/reading-data.
+ const documents = await ctx.db.query("tablename").collect();
+
+ // Arguments passed from the client are properties of the args object.
+ console.log(args.first, args.second);
+
+ // Write arbitrary JavaScript here: filter, aggregate, build derived data,
+ // remove non-public properties, or create new objects.
+ return documents;
+ },
+});
+```
+
+Using this query function in a React component looks like:
+
+```ts
+const data = useQuery(api.functions.myQueryFunction, {
+ first: 10,
+ second: "hello",
+});
+```
+
+A mutation function looks like:
+
+```ts
+// functions.js
+import { mutation } from "./_generated/server";
+import { v } from "convex/values";
+
+export const myMutationFunction = mutation({
+ // Validators for arguments.
+ args: {
+ first: v.string(),
+ second: v.string(),
+ },
+
+ // Function implementation.
+ handler: async (ctx, args) => {
+ // Insert or modify documents in the database here.
+ // Mutations can also read from the database like queries.
+ // See https://docs.convex.dev/database/writing-data.
+ const message = { body: args.first, author: args.second };
+ const id = await ctx.db.insert("messages", message);
+
+ // Optionally, return a value from your mutation.
+ return await ctx.db.get(id);
+ },
+});
+```
+
+Using this mutation function in a React component looks like:
+
+```ts
+const mutation = useMutation(api.functions.myMutationFunction);
+function handleButtonPress() {
+ // fire and forget, the most common way to use mutations
+ mutation({ first: "Hello!", second: "me" });
+ // OR
+ // use the result once the mutation has completed
+ mutation({ first: "Hello!", second: "me" }).then((result) =>
+ console.log(result),
+ );
+}
+```
+
+Use the Convex CLI to push your functions to a deployment. See everything
+the Convex CLI can do by running `npx convex -h` in your project root
+directory. To learn more, launch the docs with `npx convex docs`.
diff --git a/convex/_generated/api.d.ts b/convex/_generated/api.d.ts
new file mode 100644
index 000000000..7ea88e4f4
--- /dev/null
+++ b/convex/_generated/api.d.ts
@@ -0,0 +1,40 @@
+/* prettier-ignore-start */
+
+/* eslint-disable */
+/**
+ * Generated `api` utility.
+ *
+ * THIS CODE IS AUTOMATICALLY GENERATED.
+ *
+ * To regenerate, run `npx convex dev`.
+ * @module
+ */
+
+import type {
+ ApiFromModules,
+ FilterApi,
+ FunctionReference,
+} from "convex/server";
+import type * as calendarEvents from "../calendarEvents.js";
+
+/**
+ * A utility for referencing Convex functions in your app's API.
+ *
+ * Usage:
+ * ```js
+ * const myFunctionReference = api.myModule.myFunction;
+ * ```
+ */
+declare const fullApi: ApiFromModules<{
+ calendarEvents: typeof calendarEvents;
+}>;
+export declare const api: FilterApi<
+ typeof fullApi,
+ FunctionReference
+>;
+export declare const internal: FilterApi<
+ typeof fullApi,
+ FunctionReference
+>;
+
+/* prettier-ignore-end */
diff --git a/convex/_generated/api.js b/convex/_generated/api.js
new file mode 100644
index 000000000..b5f2e089d
--- /dev/null
+++ b/convex/_generated/api.js
@@ -0,0 +1,26 @@
+/* prettier-ignore-start */
+
+/* eslint-disable */
+/**
+ * Generated `api` utility.
+ *
+ * THIS CODE IS AUTOMATICALLY GENERATED.
+ *
+ * To regenerate, run `npx convex dev`.
+ * @module
+ */
+
+import { anyApi } from "convex/server";
+
+/**
+ * A utility for referencing Convex functions in your app's API.
+ *
+ * Usage:
+ * ```js
+ * const myFunctionReference = api.myModule.myFunction;
+ * ```
+ */
+export const api = anyApi;
+export const internal = anyApi;
+
+/* prettier-ignore-end */
diff --git a/convex/_generated/dataModel.d.ts b/convex/_generated/dataModel.d.ts
new file mode 100644
index 000000000..4c7c9f853
--- /dev/null
+++ b/convex/_generated/dataModel.d.ts
@@ -0,0 +1,62 @@
+/* prettier-ignore-start */
+
+/* eslint-disable */
+/**
+ * Generated data model types.
+ *
+ * THIS CODE IS AUTOMATICALLY GENERATED.
+ *
+ * To regenerate, run `npx convex dev`.
+ * @module
+ */
+
+import { AnyDataModel } from "convex/server";
+import type { GenericId } from "convex/values";
+
+/**
+ * No `schema.ts` file found!
+ *
+ * This generated code has permissive types like `Doc = any` because
+ * Convex doesn't know your schema. If you'd like more type safety, see
+ * https://docs.convex.dev/using/schemas for instructions on how to add a
+ * schema file.
+ *
+ * After you change a schema, rerun codegen with `npx convex dev`.
+ */
+
+/**
+ * The names of all of your Convex tables.
+ */
+export type TableNames = string;
+
+/**
+ * The type of a document stored in Convex.
+ */
+export type Doc = any;
+
+/**
+ * An identifier for a document in Convex.
+ *
+ * Convex documents are uniquely identified by their `Id`, which is accessible
+ * on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).
+ *
+ * Documents can be loaded using `db.get(id)` in query and mutation functions.
+ *
+ * IDs are just strings at runtime, but this type can be used to distinguish them from other
+ * strings when type checking.
+ */
+export type Id =
+ GenericId;
+
+/**
+ * A type describing your Convex data model.
+ *
+ * This type includes information about what tables you have, the type of
+ * documents stored in those tables, and the indexes defined on them.
+ *
+ * This type is used to parameterize methods like `queryGeneric` and
+ * `mutationGeneric` to make them type-safe.
+ */
+export type DataModel = AnyDataModel;
+
+/* prettier-ignore-end */
diff --git a/convex/_generated/server.d.ts b/convex/_generated/server.d.ts
new file mode 100644
index 000000000..8190e1ff3
--- /dev/null
+++ b/convex/_generated/server.d.ts
@@ -0,0 +1,146 @@
+/* prettier-ignore-start */
+
+/* eslint-disable */
+/**
+ * Generated utilities for implementing server-side Convex query and mutation functions.
+ *
+ * THIS CODE IS AUTOMATICALLY GENERATED.
+ *
+ * To regenerate, run `npx convex dev`.
+ * @module
+ */
+
+import {
+ ActionBuilder,
+ HttpActionBuilder,
+ MutationBuilder,
+ QueryBuilder,
+ GenericActionCtx,
+ GenericMutationCtx,
+ GenericQueryCtx,
+ GenericDatabaseReader,
+ GenericDatabaseWriter,
+} from "convex/server";
+import type { DataModel } from "./dataModel.js";
+
+/**
+ * Define a query in this Convex app's public API.
+ *
+ * This function will be allowed to read your Convex database and will be accessible from the client.
+ *
+ * @param func - The query function. It receives a {@link QueryCtx} as its first argument.
+ * @returns The wrapped query. Include this as an `export` to name it and make it accessible.
+ */
+export declare const query: QueryBuilder;
+
+/**
+ * Define a query that is only accessible from other Convex functions (but not from the client).
+ *
+ * This function will be allowed to read from your Convex database. It will not be accessible from the client.
+ *
+ * @param func - The query function. It receives a {@link QueryCtx} as its first argument.
+ * @returns The wrapped query. Include this as an `export` to name it and make it accessible.
+ */
+export declare const internalQuery: QueryBuilder;
+
+/**
+ * Define a mutation in this Convex app's public API.
+ *
+ * This function will be allowed to modify your Convex database and will be accessible from the client.
+ *
+ * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
+ * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
+ */
+export declare const mutation: MutationBuilder;
+
+/**
+ * Define a mutation that is only accessible from other Convex functions (but not from the client).
+ *
+ * This function will be allowed to modify your Convex database. It will not be accessible from the client.
+ *
+ * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
+ * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
+ */
+export declare const internalMutation: MutationBuilder;
+
+/**
+ * Define an action in this Convex app's public API.
+ *
+ * An action is a function which can execute any JavaScript code, including non-deterministic
+ * code and code with side-effects, like calling third-party services.
+ * They can be run in Convex's JavaScript environment or in Node.js using the "use node" directive.
+ * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.
+ *
+ * @param func - The action. It receives an {@link ActionCtx} as its first argument.
+ * @returns The wrapped action. Include this as an `export` to name it and make it accessible.
+ */
+export declare const action: ActionBuilder;
+
+/**
+ * Define an action that is only accessible from other Convex functions (but not from the client).
+ *
+ * @param func - The function. It receives an {@link ActionCtx} as its first argument.
+ * @returns The wrapped function. Include this as an `export` to name it and make it accessible.
+ */
+export declare const internalAction: ActionBuilder;
+
+/**
+ * Define an HTTP action.
+ *
+ * This function will be used to respond to HTTP requests received by a Convex
+ * deployment if the requests matches the path and method where this action
+ * is routed. Be sure to route your action in `convex/http.js`.
+ *
+ * @param func - The function. It receives an {@link ActionCtx} as its first argument.
+ * @returns The wrapped function. Import this function from `convex/http.js` and route it to hook it up.
+ */
+export declare const httpAction: HttpActionBuilder;
+
+/**
+ * A set of services for use within Convex query functions.
+ *
+ * The query context is passed as the first argument to any Convex query
+ * function run on the server.
+ *
+ * This differs from the {@link MutationCtx} because all of the services are
+ * read-only.
+ */
+export type QueryCtx = GenericQueryCtx;
+
+/**
+ * A set of services for use within Convex mutation functions.
+ *
+ * The mutation context is passed as the first argument to any Convex mutation
+ * function run on the server.
+ */
+export type MutationCtx = GenericMutationCtx;
+
+/**
+ * A set of services for use within Convex action functions.
+ *
+ * The action context is passed as the first argument to any Convex action
+ * function run on the server.
+ */
+export type ActionCtx = GenericActionCtx;
+
+/**
+ * An interface to read from the database within Convex query functions.
+ *
+ * The two entry points are {@link DatabaseReader.get}, which fetches a single
+ * document by its {@link Id}, or {@link DatabaseReader.query}, which starts
+ * building a query.
+ */
+export type DatabaseReader = GenericDatabaseReader;
+
+/**
+ * An interface to read from and write to the database within Convex mutation
+ * functions.
+ *
+ * Convex guarantees that all writes within a single mutation are
+ * executed atomically, so you never have to worry about partial writes leaving
+ * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)
+ * for the guarantees Convex provides your functions.
+ */
+export type DatabaseWriter = GenericDatabaseWriter;
+
+/* prettier-ignore-end */
diff --git a/convex/_generated/server.js b/convex/_generated/server.js
new file mode 100644
index 000000000..33b487cd2
--- /dev/null
+++ b/convex/_generated/server.js
@@ -0,0 +1,93 @@
+/* prettier-ignore-start */
+
+/* eslint-disable */
+/**
+ * Generated utilities for implementing server-side Convex query and mutation functions.
+ *
+ * THIS CODE IS AUTOMATICALLY GENERATED.
+ *
+ * To regenerate, run `npx convex dev`.
+ * @module
+ */
+
+import {
+ actionGeneric,
+ httpActionGeneric,
+ queryGeneric,
+ mutationGeneric,
+ internalActionGeneric,
+ internalMutationGeneric,
+ internalQueryGeneric,
+} from "convex/server";
+
+/**
+ * Define a query in this Convex app's public API.
+ *
+ * This function will be allowed to read your Convex database and will be accessible from the client.
+ *
+ * @param func - The query function. It receives a {@link QueryCtx} as its first argument.
+ * @returns The wrapped query. Include this as an `export` to name it and make it accessible.
+ */
+export const query = queryGeneric;
+
+/**
+ * Define a query that is only accessible from other Convex functions (but not from the client).
+ *
+ * This function will be allowed to read from your Convex database. It will not be accessible from the client.
+ *
+ * @param func - The query function. It receives a {@link QueryCtx} as its first argument.
+ * @returns The wrapped query. Include this as an `export` to name it and make it accessible.
+ */
+export const internalQuery = internalQueryGeneric;
+
+/**
+ * Define a mutation in this Convex app's public API.
+ *
+ * This function will be allowed to modify your Convex database and will be accessible from the client.
+ *
+ * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
+ * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
+ */
+export const mutation = mutationGeneric;
+
+/**
+ * Define a mutation that is only accessible from other Convex functions (but not from the client).
+ *
+ * This function will be allowed to modify your Convex database. It will not be accessible from the client.
+ *
+ * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
+ * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
+ */
+export const internalMutation = internalMutationGeneric;
+
+/**
+ * Define an action in this Convex app's public API.
+ *
+ * An action is a function which can execute any JavaScript code, including non-deterministic
+ * code and code with side-effects, like calling third-party services.
+ * They can be run in Convex's JavaScript environment or in Node.js using the "use node" directive.
+ * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.
+ *
+ * @param func - The action. It receives an {@link ActionCtx} as its first argument.
+ * @returns The wrapped action. Include this as an `export` to name it and make it accessible.
+ */
+export const action = actionGeneric;
+
+/**
+ * Define an action that is only accessible from other Convex functions (but not from the client).
+ *
+ * @param func - The function. It receives an {@link ActionCtx} as its first argument.
+ * @returns The wrapped function. Include this as an `export` to name it and make it accessible.
+ */
+export const internalAction = internalActionGeneric;
+
+/**
+ * Define a Convex HTTP action.
+ *
+ * @param func - The function. It receives an {@link ActionCtx} as its first argument, and a `Request` object
+ * as its second.
+ * @returns The wrapped endpoint function. Route a URL path to this function in `convex/http.js`.
+ */
+export const httpAction = httpActionGeneric;
+
+/* prettier-ignore-end */
diff --git a/convex/calendarEvents.ts b/convex/calendarEvents.ts
new file mode 100644
index 000000000..eb21e1a21
--- /dev/null
+++ b/convex/calendarEvents.ts
@@ -0,0 +1,6 @@
+import { query } from "./_generated/server";
+
+
+export const get= query(()=>{
+ return "hello";
+});
\ No newline at end of file
diff --git a/convex/tsconfig.json b/convex/tsconfig.json
new file mode 100644
index 000000000..6fa874e81
--- /dev/null
+++ b/convex/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ /* This TypeScript project config describes the environment that
+ * Convex functions run in and is used to typecheck them.
+ * You can modify it, but some settings required to use Convex.
+ */
+ "compilerOptions": {
+ /* These settings are not required by Convex and can be modified. */
+ "allowJs": true,
+ "strict": true,
+ "moduleResolution": "Bundler",
+ "jsx": "react-jsx",
+ "skipLibCheck": true,
+ "allowSyntheticDefaultImports": true,
+
+ /* These compiler options are required by Convex */
+ "target": "ESNext",
+ "lib": ["ES2021", "dom"],
+ "forceConsistentCasingInFileNames": true,
+ "module": "ESNext",
+ "isolatedModules": true,
+ "noEmit": true
+ },
+ "include": ["./**/*"],
+ "exclude": ["./_generated"]
+}
diff --git a/next.config.mjs b/next.config.mjs
index 4678774e6..f9aeb06ad 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -1,4 +1,11 @@
/** @type {import('next').NextConfig} */
-const nextConfig = {};
+const nextConfig = {
+ images:{
+ remotePatterns:[
+ {hostname:"images.pexels.com"},
+ {hostname:"i.pravatar.cc"}
+ ],
+ }
+};
export default nextConfig;
diff --git a/package-lock.json b/package-lock.json
index cf999766d..d2cebe9d0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,19 +8,32 @@
"name": "lama-dev-next-dashboard",
"version": "0.1.0",
"dependencies": {
- "next": "14.2.5",
+ "@faker-js/faker": "^9.4.0",
+ "@hookform/resolvers": "^3.9.1",
+ "@prisma/client": "^6.5.0",
+ "@types/react-big-calendar": "^1.8.11",
+ "convex": "^1.16.0",
+ "moment": "^2.30.1",
+ "next": "^15.2.4",
"react": "^18",
- "react-dom": "^18"
+ "react-big-calendar": "^1.14.1",
+ "react-calendar": "^5.1.0",
+ "react-dom": "^18",
+ "react-hook-form": "^7.53.2",
+ "recharts": "^2.15.3",
+ "zod": "^3.23.8"
},
"devDependencies": {
- "@types/node": "^20",
+ "@types/node": "^20.17.16",
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint": "^8",
"eslint-config-next": "14.2.5",
"postcss": "^8",
+ "prisma": "^6.5.0",
"tailwindcss": "^3.4.1",
- "typescript": "^5"
+ "ts-node": "^10.9.2",
+ "typescript": "^5.7.3"
}
},
"node_modules/@alloc/quick-lru": {
@@ -36,6 +49,436 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@babel/runtime": {
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
+ "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz",
+ "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
+ "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz",
+ "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz",
+ "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz",
+ "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
+ "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz",
+ "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz",
+ "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz",
+ "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz",
+ "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz",
+ "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz",
+ "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz",
+ "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==",
+ "cpu": [
+ "loong64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz",
+ "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz",
+ "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz",
+ "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz",
+ "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
+ "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz",
+ "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz",
+ "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz",
+ "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz",
+ "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz",
+ "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz",
+ "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz",
+ "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -46,93 +489,479 @@
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@faker-js/faker": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.4.0.tgz",
+ "integrity": "sha512-85+k0AxaZSTowL0gXp8zYWDIrWclTbRPg/pm/V0dSFZ6W6D4lhcG3uuZl4zLsEKfEvs69xDbLN2cHQudwp95JA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fakerjs"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=9.0.0"
+ }
+ },
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.1.tgz",
+ "integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react-hook-form": "^7.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
- "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
- "dev": true,
- "license": "MIT",
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
},
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
}
},
- "node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
- "dev": true,
- "license": "MIT",
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
}
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+ "cpu": [
+ "x64"
+ ],
"license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
+ "@emnapi/runtime": "^1.2.0"
},
"engines": {
- "node": ">=10.10.0"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
- "license": "Apache-2.0",
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=12.22"
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
+ "url": "https://opencollective.com/libvips"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true,
- "license": "BSD-3-Clause"
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
@@ -235,9 +1064,9 @@
}
},
"node_modules/@next/env": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
- "integrity": "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz",
+ "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
@@ -251,9 +1080,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz",
- "integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz",
+ "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==",
"cpu": [
"arm64"
],
@@ -267,9 +1096,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz",
- "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz",
+ "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==",
"cpu": [
"x64"
],
@@ -283,9 +1112,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz",
- "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz",
+ "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==",
"cpu": [
"arm64"
],
@@ -299,9 +1128,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz",
- "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz",
+ "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==",
"cpu": [
"arm64"
],
@@ -315,9 +1144,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz",
- "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz",
+ "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==",
"cpu": [
"x64"
],
@@ -331,9 +1160,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz",
- "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz",
+ "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==",
"cpu": [
"x64"
],
@@ -347,9 +1176,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz",
- "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz",
+ "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==",
"cpu": [
"arm64"
],
@@ -362,26 +1191,10 @@
"node": ">= 10"
}
},
- "node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz",
- "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz",
- "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz",
+ "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==",
"cpu": [
"x64"
],
@@ -443,6 +1256,111 @@
"node": ">=14"
}
},
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@prisma/client": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.5.0.tgz",
+ "integrity": "sha512-M6w1Ql/BeiGoZmhMdAZUXHu5sz5HubyVcKukbLs3l0ELcQb8hTUJxtGEChhv4SVJ0QJlwtLnwOLgIRQhpsm9dw==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "peerDependencies": {
+ "prisma": "*",
+ "typescript": ">=5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "prisma": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@prisma/config": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.5.0.tgz",
+ "integrity": "sha512-sOH/2Go9Zer67DNFLZk6pYOHj+rumSb0VILgltkoxOjYnlLqUpHPAN826vnx8HigqnOCxj9LRhT6U7uLiIIWgw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esbuild": ">=0.12 <1",
+ "esbuild-register": "3.6.0"
+ }
+ },
+ "node_modules/@prisma/debug": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.5.0.tgz",
+ "integrity": "sha512-fc/nusYBlJMzDmDepdUtH9aBsJrda2JNErP9AzuHbgUEQY0/9zQYZdNlXmKoIWENtio+qarPNe/+DQtrX5kMcQ==",
+ "devOptional": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@prisma/engines": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.5.0.tgz",
+ "integrity": "sha512-FVPQYHgOllJklN9DUyujXvh3hFJCY0NX86sDmBErLvoZjy2OXGiZ5FNf3J/C4/RZZmCypZBYpBKEhx7b7rEsdw==",
+ "devOptional": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@prisma/debug": "6.5.0",
+ "@prisma/engines-version": "6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60",
+ "@prisma/fetch-engine": "6.5.0",
+ "@prisma/get-platform": "6.5.0"
+ }
+ },
+ "node_modules/@prisma/engines-version": {
+ "version": "6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60",
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60.tgz",
+ "integrity": "sha512-iK3EmiVGFDCmXjSpdsKGNqy9hOdLnvYBrJB61far/oP03hlIxrb04OWmDjNTwtmZ3UZdA5MCvI+f+3k2jPTflQ==",
+ "devOptional": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@prisma/fetch-engine": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.5.0.tgz",
+ "integrity": "sha512-3LhYA+FXP6pqY8FLHCjewyE8pGXXJ7BxZw2rhPq+CZAhvflVzq4K8Qly3OrmOkn6wGlz79nyLQdknyCG2HBTuA==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@prisma/debug": "6.5.0",
+ "@prisma/engines-version": "6.5.0-73.173f8d54f8d52e692c7e27e72a88314ec7aeff60",
+ "@prisma/get-platform": "6.5.0"
+ }
+ },
+ "node_modules/@prisma/get-platform": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.5.0.tgz",
+ "integrity": "sha512-xYcvyJwNMg2eDptBYFqFLUCfgi+wZLcj6HDMsj0Qw0irvauG4IKmkbywnqwok0B+k+W+p+jThM2DKTSmoPCkzw==",
+ "devOptional": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@prisma/debug": "6.5.0"
+ }
+ },
+ "node_modules/@restart/hooks": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz",
+ "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
"node_modules/@rushstack/eslint-patch": {
"version": "1.10.4",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
@@ -457,15 +1375,111 @@
"license": "Apache-2.0"
},
"node_modules/@swc/helpers": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
- "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+ "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
"license": "Apache-2.0",
"dependencies": {
- "@swc/counter": "^0.1.3",
- "tslib": "^2.4.0"
+ "tslib": "^2.8.0"
+ }
+ },
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
}
},
+ "node_modules/@types/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
+ "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/date-arithmetic": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@types/date-arithmetic/-/date-arithmetic-4.1.4.tgz",
+ "integrity": "sha512-p9eZ2X9B80iKiTW4ukVj8B4K6q9/+xFtQ5MGYA5HWToY9nL4EkhV9+6ftT2VHpVMEZb5Tv00Iel516bVdO+yRw==",
+ "license": "MIT"
+ },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -474,33 +1488,42 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "20.14.14",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz",
- "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==",
+ "version": "20.17.16",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.16.tgz",
+ "integrity": "sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.19.2"
}
},
"node_modules/@types/prop-types": {
"version": "15.7.12",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
"integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
- "dev": true,
"license": "MIT"
},
"node_modules/@types/react": {
"version": "18.3.3",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
"integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
}
},
+ "node_modules/@types/react-big-calendar": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/@types/react-big-calendar/-/react-big-calendar-1.8.11.tgz",
+ "integrity": "sha512-/j9WOY79Q9A3cLtAa/cEKCi9DPmzcjfG7WaKW/6xlJOLFRkqCb0d2BRxtBETLO0yzLY/nDC95z9Cnp9vG2EmjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/date-arithmetic": "*",
+ "@types/prop-types": "*",
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/react-dom": {
"version": "18.3.0",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
@@ -511,6 +1534,12 @@
"@types/react": "*"
}
},
+ "node_modules/@types/warning": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz",
+ "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==",
+ "license": "MIT"
+ },
"node_modules/@typescript-eslint/parser": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz",
@@ -652,6 +1681,15 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/@wojtekmaj/date-utils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@wojtekmaj/date-utils/-/date-utils-1.5.1.tgz",
+ "integrity": "sha512-+i7+JmNiE/3c9FKxzWFi2IjRJ+KzZl1QPu6QNrsgaa2MuBgXvUy4gA1TVzf/JMdIIloB76xSKikTWuyYAIVLww==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/wojtekmaj/date-utils?sponsor=1"
+ }
+ },
"node_modules/acorn": {
"version": "8.12.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
@@ -675,6 +1713,19 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/acorn-walk": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
+ "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -1150,11 +2201,34 @@
"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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -1167,9 +2241,20 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
"node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -1187,10 +2272,68 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/convex": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/convex/-/convex-1.16.0.tgz",
+ "integrity": "sha512-duu6ged8mL2WgN9Jxm/XykbRe8MW+Wotkj57KTX44l7TUlnwvNCKB3mmlAVCxbsd4epyU05TkQz8WGwb/4SssQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esbuild": "0.23.0",
+ "globals": "~15.9.0",
+ "jwt-decode": "^3.1.2",
+ "prettier": "3.2.5"
+ },
+ "bin": {
+ "convex": "bin/main.js"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=7.0.0"
+ },
+ "peerDependencies": {
+ "@auth0/auth0-react": "^2.0.1",
+ "@clerk/clerk-react": "^4.12.8 || ^5.0.0",
+ "react": "^17.0.2 || ^18.0.0",
+ "react-dom": "^17.0.2 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@auth0/auth0-react": {
+ "optional": true
+ },
+ "@clerk/clerk-react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/convex/node_modules/globals": {
+ "version": "15.9.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+ "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1219,9 +2362,129 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@@ -1283,11 +2546,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/date-arithmetic": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-arithmetic/-/date-arithmetic-4.1.0.tgz",
+ "integrity": "sha512-QWxYLR5P/6GStZcdem+V1xoto6DMadYWpMXU82ES3/RfR3Wdwr3D0+be7mgOJ+Ov0G9D5Dmb9T17sNLQYj9XOg==",
+ "license": "MIT"
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
@@ -1301,6 +2576,12 @@
}
}
},
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+ "license": "MIT"
+ },
"node_modules/deep-equal": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
@@ -1377,6 +2658,25 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -1384,6 +2684,16 @@
"dev": true,
"license": "Apache-2.0"
},
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -1417,6 +2727,16 @@
"node": ">=6.0.0"
}
},
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -1632,6 +2952,58 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/esbuild": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
+ "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.23.0",
+ "@esbuild/android-arm": "0.23.0",
+ "@esbuild/android-arm64": "0.23.0",
+ "@esbuild/android-x64": "0.23.0",
+ "@esbuild/darwin-arm64": "0.23.0",
+ "@esbuild/darwin-x64": "0.23.0",
+ "@esbuild/freebsd-arm64": "0.23.0",
+ "@esbuild/freebsd-x64": "0.23.0",
+ "@esbuild/linux-arm": "0.23.0",
+ "@esbuild/linux-arm64": "0.23.0",
+ "@esbuild/linux-ia32": "0.23.0",
+ "@esbuild/linux-loong64": "0.23.0",
+ "@esbuild/linux-mips64el": "0.23.0",
+ "@esbuild/linux-ppc64": "0.23.0",
+ "@esbuild/linux-riscv64": "0.23.0",
+ "@esbuild/linux-s390x": "0.23.0",
+ "@esbuild/linux-x64": "0.23.0",
+ "@esbuild/netbsd-x64": "0.23.0",
+ "@esbuild/openbsd-arm64": "0.23.0",
+ "@esbuild/openbsd-x64": "0.23.0",
+ "@esbuild/sunos-x64": "0.23.0",
+ "@esbuild/win32-arm64": "0.23.0",
+ "@esbuild/win32-ia32": "0.23.0",
+ "@esbuild/win32-x64": "0.23.0"
+ }
+ },
+ "node_modules/esbuild-register": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz",
+ "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.12 <1"
+ }
+ },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -2081,6 +3453,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2088,6 +3466,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-equals": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz",
+ "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/fast-glob": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -2346,6 +3733,18 @@
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
+ "node_modules/get-user-locale": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-2.3.2.tgz",
+ "integrity": "sha512-O2GWvQkhnbDoWFUJfaBlDIKUEdND8ATpBXD6KXcbhxlfktyD/d8w6mkzM/IlQEqGZAMz/PW6j6Hv53BiigKLUQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mem": "^8.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/wojtekmaj/get-user-locale?sponsor=1"
+ }
+ },
"node_modules/glob": {
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
@@ -2408,6 +3807,11 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/globalize": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/globalize/-/globalize-0.1.1.tgz",
+ "integrity": "sha512-5e01v8eLGfuQSOvx2MsDMOWS0GFtCx1wPzQSmcHw4hkxFzrQDBO3Xwg/m8Hr/7qXMrHeOIE29qWVzyv06u1TZA=="
+ },
"node_modules/globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -2479,6 +3883,7 @@
"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/graphemer": {
@@ -2647,6 +4052,24 @@
"node": ">= 0.4"
}
},
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
"node_modules/is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
@@ -2681,6 +4104,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/is-async-function": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
@@ -3188,6 +4618,12 @@
"node": ">=4.0"
}
},
+ "node_modules/jwt-decode": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
+ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==",
+ "license": "MIT"
+ },
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -3265,6 +4701,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "license": "MIT"
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -3291,6 +4739,56 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/luxon": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
+ "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-defer": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mem": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
+ "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
+ "license": "MIT",
+ "dependencies": {
+ "map-age-cleaner": "^0.1.3",
+ "mimic-fn": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/mem?sponsor=1"
+ }
+ },
+ "node_modules/memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
+ "license": "MIT"
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3302,9 +4800,9 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
- "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3315,6 +4813,15 @@
"node": ">=8.6"
}
},
+ "node_modules/mimic-fn": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
+ "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3348,11 +4855,32 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/moment": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/moment-timezone": {
+ "version": "0.5.45",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz",
+ "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "moment": "^2.29.4"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/mz": {
@@ -3368,9 +4896,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [
{
"type": "github",
@@ -3393,41 +4921,42 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "14.2.5",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.5.tgz",
- "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==",
+ "version": "15.2.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz",
+ "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==",
"license": "MIT",
"dependencies": {
- "@next/env": "14.2.5",
- "@swc/helpers": "0.5.5",
+ "@next/env": "15.2.4",
+ "@swc/counter": "0.1.3",
+ "@swc/helpers": "0.5.15",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
- "graceful-fs": "^4.2.11",
"postcss": "8.4.31",
- "styled-jsx": "5.1.1"
+ "styled-jsx": "5.1.6"
},
"bin": {
"next": "dist/bin/next"
},
"engines": {
- "node": ">=18.17.0"
+ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.5",
- "@next/swc-darwin-x64": "14.2.5",
- "@next/swc-linux-arm64-gnu": "14.2.5",
- "@next/swc-linux-arm64-musl": "14.2.5",
- "@next/swc-linux-x64-gnu": "14.2.5",
- "@next/swc-linux-x64-musl": "14.2.5",
- "@next/swc-win32-arm64-msvc": "14.2.5",
- "@next/swc-win32-ia32-msvc": "14.2.5",
- "@next/swc-win32-x64-msvc": "14.2.5"
+ "@next/swc-darwin-arm64": "15.2.4",
+ "@next/swc-darwin-x64": "15.2.4",
+ "@next/swc-linux-arm64-gnu": "15.2.4",
+ "@next/swc-linux-arm64-musl": "15.2.4",
+ "@next/swc-linux-x64-gnu": "15.2.4",
+ "@next/swc-linux-x64-musl": "15.2.4",
+ "@next/swc-win32-arm64-msvc": "15.2.4",
+ "@next/swc-win32-x64-msvc": "15.2.4",
+ "sharp": "^0.33.5"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
"@playwright/test": "^1.41.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
+ "babel-plugin-react-compiler": "*",
+ "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+ "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
"sass": "^1.3.0"
},
"peerDependenciesMeta": {
@@ -3437,6 +4966,9 @@
"@playwright/test": {
"optional": true
},
+ "babel-plugin-react-compiler": {
+ "optional": true
+ },
"sass": {
"optional": true
}
@@ -3484,7 +5016,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -3654,6 +5185,15 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -3985,11 +5525,54 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/prettier": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz",
+ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prisma": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.5.0.tgz",
+ "integrity": "sha512-yUGXmWqv5F4PByMSNbYFxke/WbnyTLjnJ5bKr8fLkcnY7U5rU9rUTh/+Fja+gOrRxEgtCbCtca94IeITj4j/pg==",
+ "devOptional": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@prisma/config": "6.5.0",
+ "@prisma/engines": "6.5.0"
+ },
+ "bin": {
+ "prisma": "build/index.js"
+ },
+ "engines": {
+ "node": ">=18.18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.3"
+ },
+ "peerDependencies": {
+ "typescript": ">=5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
@@ -4040,6 +5623,68 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-big-calendar": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/react-big-calendar/-/react-big-calendar-1.14.1.tgz",
+ "integrity": "sha512-6Le0kV/4yiV/mlqv5YYBBS+FaBeYBPNGjcYitLoVdPCiXsc0xzSHyX8+2FRqX9AM16XZYIjjomouK3wcnq6+XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.20.7",
+ "clsx": "^1.2.1",
+ "date-arithmetic": "^4.1.0",
+ "dayjs": "^1.11.7",
+ "dom-helpers": "^5.2.1",
+ "globalize": "^0.1.1",
+ "invariant": "^2.2.4",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "luxon": "^3.2.1",
+ "memoize-one": "^6.0.0",
+ "moment": "^2.29.4",
+ "moment-timezone": "^0.5.40",
+ "prop-types": "^15.8.1",
+ "react-overlays": "^5.2.1",
+ "uncontrollable": "^7.2.1"
+ },
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17 || ^18",
+ "react-dom": "^16.14.0 || ^17 || ^18"
+ }
+ },
+ "node_modules/react-big-calendar/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/react-calendar": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/react-calendar/-/react-calendar-5.1.0.tgz",
+ "integrity": "sha512-09o/rQHPZGEi658IXAJtWfra1N69D1eFnuJ3FQm9qUVzlzNnos1+GWgGiUeSs22QOpNm32aoVFOimq0p3Ug9Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "@wojtekmaj/date-utils": "^1.1.3",
+ "clsx": "^2.0.0",
+ "get-user-locale": "^2.2.1",
+ "warning": "^4.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/wojtekmaj/react-calendar?sponsor=1"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
@@ -4053,13 +5698,85 @@
"react": "^18.3.1"
}
},
+ "node_modules/react-hook-form": {
+ "version": "7.53.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.2.tgz",
+ "integrity": "sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/react-lifecycles-compat": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
+ "license": "MIT"
+ },
+ "node_modules/react-overlays": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.2.1.tgz",
+ "integrity": "sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.8",
+ "@popperjs/core": "^2.11.6",
+ "@restart/hooks": "^0.4.7",
+ "@types/warning": "^3.0.0",
+ "dom-helpers": "^5.2.0",
+ "prop-types": "^15.7.2",
+ "uncontrollable": "^7.2.1",
+ "warning": "^4.0.3"
+ },
+ "peerDependencies": {
+ "react": ">=16.3.0",
+ "react-dom": ">=16.3.0"
+ }
+ },
+ "node_modules/react-smooth": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz",
+ "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -4083,6 +5800,44 @@
"node": ">=8.10.0"
}
},
+ "node_modules/recharts": {
+ "version": "2.15.3",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.3.tgz",
+ "integrity": "sha512-EdOPzTwcFSuqtvkDoaM5ws/Km1+WTAO2eizL7rqiG0V2UVhTnz0m7J2i0CjVPUCdEkZImaWvXLbZDS2H5t6GFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.4",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
+ "license": "MIT",
+ "dependencies": {
+ "decimal.js-light": "^2.4.1"
+ }
+ },
+ "node_modules/recharts/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
"node_modules/reflect.getprototypeof": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
@@ -4105,6 +5860,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
@@ -4286,7 +6047,7 @@
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
- "dev": true,
+ "devOptional": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -4329,6 +6090,46 @@
"node": ">= 0.4"
}
},
+ "node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4384,6 +6185,16 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -4646,9 +6457,9 @@
}
},
"node_modules/styled-jsx": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
- "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
"license": "MIT",
"dependencies": {
"client-only": "0.0.1"
@@ -4657,7 +6468,7 @@
"node": ">= 12.0.0"
},
"peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
},
"peerDependenciesMeta": {
"@babel/core": {
@@ -4795,6 +6606,12 @@
"node": ">=0.8"
}
},
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4828,6 +6645,57 @@
"dev": true,
"license": "Apache-2.0"
},
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-node/node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tsconfig-paths": {
"version": "3.15.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
@@ -4842,9 +6710,9 @@
}
},
"node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/type-check": {
@@ -4951,10 +6819,10 @@
}
},
"node_modules/typescript": {
- "version": "5.5.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
- "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
- "dev": true,
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
+ "devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -4980,10 +6848,25 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/uncontrollable": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz",
+ "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.6.3",
+ "@types/react": ">=16.9.11",
+ "invariant": "^2.2.4",
+ "react-lifecycles-compat": "^3.0.4"
+ },
+ "peerDependencies": {
+ "react": ">=15.0.0"
+ }
+ },
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"dev": true,
"license": "MIT"
},
@@ -5004,6 +6887,44 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/victory-vendor": {
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
+ "license": "MIT AND ISC",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
+ "node_modules/warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -5234,6 +7155,16 @@
"node": ">= 14"
}
},
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
@@ -5246,6 +7177,15 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/zod": {
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
}
}
}
diff --git a/package.json b/package.json
index dd3389bbf..d6f6d73be 100644
--- a/package.json
+++ b/package.json
@@ -9,18 +9,34 @@
"lint": "next lint"
},
"dependencies": {
+ "@faker-js/faker": "^9.4.0",
+ "@hookform/resolvers": "^3.9.1",
+ "@prisma/client": "^6.5.0",
+ "@types/react-big-calendar": "^1.8.11",
+ "convex": "^1.16.0",
+ "moment": "^2.30.1",
+ "next": "^15.2.4",
"react": "^18",
+ "react-big-calendar": "^1.14.1",
+ "react-calendar": "^5.1.0",
"react-dom": "^18",
- "next": "14.2.5"
+ "react-hook-form": "^7.53.2",
+ "recharts": "^2.15.3",
+ "zod": "^3.23.8"
},
"devDependencies": {
- "typescript": "^5",
- "@types/node": "^20",
+ "@types/node": "^20.17.16",
"@types/react": "^18",
"@types/react-dom": "^18",
+ "eslint": "^8",
+ "eslint-config-next": "14.2.5",
"postcss": "^8",
+ "prisma": "^6.5.0",
"tailwindcss": "^3.4.1",
- "eslint": "^8",
- "eslint-config-next": "14.2.5"
+ "ts-node": "^10.9.2",
+ "typescript": "^5.7.3"
+ },
+ "prisma": {
+ "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts"
}
}
diff --git a/prisma/migrations/20250329190622_init_new01/migration.sql b/prisma/migrations/20250329190622_init_new01/migration.sql
new file mode 100644
index 000000000..c475f165e
--- /dev/null
+++ b/prisma/migrations/20250329190622_init_new01/migration.sql
@@ -0,0 +1,211 @@
+-- CreateEnum
+CREATE TYPE "MemberSex" AS ENUM ('MALE', 'FEMALE');
+
+-- CreateEnum
+CREATE TYPE "Itteration" AS ENUM ('MONTHLY', 'QUARTERLY', 'SEMESTERLY', 'ANNUALY', 'PERPETUALLY');
+
+-- CreateEnum
+CREATE TYPE "Day" AS ENUM ('MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY');
+
+-- CreateEnum
+CREATE TYPE "BloodType" AS ENUM ('A_POSITIVE', 'A_NEGATIVE', 'B_POSITIVE', 'B_NEGATIVE', 'AB_POSITIVE', 'AB_NEGATIVE', 'O_POSITIVE', 'O_NEGATIVE');
+
+-- CreateTable
+CREATE TABLE "Academy" (
+ "id" SERIAL NOT NULL,
+ "academyName" TEXT NOT NULL,
+ "academyLogo" TEXT,
+ "academyOwnerId" TEXT NOT NULL,
+ "academyIsActive" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Academy_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Admin" (
+ "id" TEXT NOT NULL,
+ "latest002" TEXT NOT NULL,
+ "username" TEXT NOT NULL,
+ "email" TEXT NOT NULL,
+
+ CONSTRAINT "Admin_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Member" (
+ "id" TEXT NOT NULL,
+ "username" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "surname" TEXT NOT NULL,
+ "email" TEXT,
+ "phone" TEXT,
+ "address" TEXT,
+ "img" TEXT,
+ "bloodType" "BloodType",
+ "isBloodDonor" BOOLEAN DEFAULT false,
+ "sex" "MemberSex",
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Member_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Parent" (
+ "id" TEXT NOT NULL,
+ "username" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "surname" TEXT NOT NULL,
+ "email" TEXT,
+ "phone" TEXT,
+ "address" TEXT,
+ "img" TEXT,
+ "bloodType" "BloodType",
+ "isBloodDonor" BOOLEAN DEFAULT false,
+ "sex" "MemberSex",
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "memberId" TEXT NOT NULL,
+
+ CONSTRAINT "Parent_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Instructor" (
+ "id" TEXT NOT NULL,
+ "username" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "name" TEXT NOT NULL,
+ "surname" TEXT NOT NULL,
+ "email" TEXT,
+ "phone" TEXT,
+ "address" TEXT,
+ "img" TEXT,
+ "bloodType" "BloodType",
+ "isBloodDonor" BOOLEAN DEFAULT false,
+ "sex" "MemberSex",
+
+ CONSTRAINT "Instructor_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Class" (
+ "id" SERIAL NOT NULL,
+ "className" TEXT NOT NULL,
+ "classDescription" TEXT NOT NULL,
+ "capacity" INTEGER NOT NULL,
+ "day" "Day" NOT NULL,
+ "startTime" TIMESTAMP(3) NOT NULL,
+ "endTime" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Class_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "MartialArtsDiscipline" (
+ "id" TEXT NOT NULL,
+ "artName" TEXT NOT NULL,
+ "artDescription" TEXT NOT NULL,
+
+ CONSTRAINT "MartialArtsDiscipline_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Belt" (
+ "id" TEXT NOT NULL,
+ "beltName" TEXT NOT NULL,
+ "martialArtsDisciplineId" TEXT NOT NULL,
+ "instructorID" TEXT NOT NULL,
+ "memberId" TEXT NOT NULL,
+
+ CONSTRAINT "Belt_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Certifications" (
+ "id" TEXT NOT NULL,
+ "certName" TEXT NOT NULL,
+ "certDescription" TEXT NOT NULL,
+ "certCircle" "Itteration" NOT NULL,
+ "memberId" TEXT NOT NULL,
+
+ CONSTRAINT "Certifications_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Announcements" (
+ "id" SERIAL NOT NULL,
+ "title" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+ "date" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Announcements_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Events" (
+ "id" SERIAL NOT NULL,
+ "startTime" TIMESTAMP(3) NOT NULL,
+ "endTime" TIMESTAMP(3) NOT NULL,
+ "title" TEXT NOT NULL,
+ "description" TEXT NOT NULL,
+
+ CONSTRAINT "Events_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Admin_username_key" ON "Admin"("username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Admin_email_key" ON "Admin"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Member_username_key" ON "Member"("username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Member_email_key" ON "Member"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Parent_username_key" ON "Parent"("username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Parent_email_key" ON "Parent"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Parent_memberId_key" ON "Parent"("memberId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Instructor_username_key" ON "Instructor"("username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Instructor_email_key" ON "Instructor"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "MartialArtsDiscipline_artName_key" ON "MartialArtsDiscipline"("artName");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Belt_instructorID_key" ON "Belt"("instructorID");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Belt_memberId_key" ON "Belt"("memberId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Certifications_memberId_key" ON "Certifications"("memberId");
+
+-- AddForeignKey
+ALTER TABLE "Parent" ADD CONSTRAINT "Parent_memberId_fkey" FOREIGN KEY ("memberId") REFERENCES "Member"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Belt" ADD CONSTRAINT "Belt_martialArtsDisciplineId_fkey" FOREIGN KEY ("martialArtsDisciplineId") REFERENCES "MartialArtsDiscipline"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Belt" ADD CONSTRAINT "Belt_instructorID_fkey" FOREIGN KEY ("instructorID") REFERENCES "Instructor"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Belt" ADD CONSTRAINT "Belt_memberId_fkey" FOREIGN KEY ("memberId") REFERENCES "Member"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Certifications" ADD CONSTRAINT "Certifications_memberId_fkey" FOREIGN KEY ("memberId") REFERENCES "Member"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250330172805_init_new02/migration.sql b/prisma/migrations/20250330172805_init_new02/migration.sql
new file mode 100644
index 000000000..a44d2dd66
--- /dev/null
+++ b/prisma/migrations/20250330172805_init_new02/migration.sql
@@ -0,0 +1,12 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `latest002` on the `Admin` table. All the data in the column will be lost.
+
+*/
+-- DropIndex
+DROP INDEX "MartialArtsDiscipline_artName_key";
+
+-- AlterTable
+ALTER TABLE "Admin" DROP COLUMN "latest002",
+ADD COLUMN "latest003" TEXT NOT NULL DEFAULT '003';
diff --git a/prisma/migrations/20250330175956_init_new02/migration.sql b/prisma/migrations/20250330175956_init_new02/migration.sql
new file mode 100644
index 000000000..ad7acbb84
--- /dev/null
+++ b/prisma/migrations/20250330175956_init_new02/migration.sql
@@ -0,0 +1,9 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `latest003` on the `Admin` table. All the data in the column will be lost.
+
+*/
+-- AlterTable
+ALTER TABLE "Admin" DROP COLUMN "latest003",
+ADD COLUMN "latest002" TEXT NOT NULL DEFAULT '003';
diff --git a/prisma/migrations/20250330180501_init_new02/migration.sql b/prisma/migrations/20250330180501_init_new02/migration.sql
new file mode 100644
index 000000000..54530941e
--- /dev/null
+++ b/prisma/migrations/20250330180501_init_new02/migration.sql
@@ -0,0 +1,2 @@
+-- DropIndex
+DROP INDEX "Parent_memberId_key";
diff --git a/prisma/migrations/20250330181106_init_new033/migration.sql b/prisma/migrations/20250330181106_init_new033/migration.sql
new file mode 100644
index 000000000..b02c3c4df
--- /dev/null
+++ b/prisma/migrations/20250330181106_init_new033/migration.sql
@@ -0,0 +1,5 @@
+-- DropIndex
+DROP INDEX "Belt_instructorID_key";
+
+-- DropIndex
+DROP INDEX "Belt_memberId_key";
diff --git a/prisma/migrations/20250414181622_additions/migration.sql b/prisma/migrations/20250414181622_additions/migration.sql
new file mode 100644
index 000000000..29afcf5ee
--- /dev/null
+++ b/prisma/migrations/20250414181622_additions/migration.sql
@@ -0,0 +1,16 @@
+-- AlterTable
+ALTER TABLE "Member" ADD COLUMN "firebaseId" TEXT;
+
+-- CreateTable
+CREATE TABLE "MemberMetrics" (
+ "id" TEXT NOT NULL,
+ "weight" DOUBLE PRECISION NOT NULL,
+ "height" DOUBLE PRECISION NOT NULL,
+ "dateofentry" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "memberId" TEXT NOT NULL,
+
+ CONSTRAINT "MemberMetrics_pkey" PRIMARY KEY ("id")
+);
+
+-- AddForeignKey
+ALTER TABLE "MemberMetrics" ADD CONSTRAINT "MemberMetrics_memberId_fkey" FOREIGN KEY ("memberId") REFERENCES "Member"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250418161719_additions_2/migration.sql b/prisma/migrations/20250418161719_additions_2/migration.sql
new file mode 100644
index 000000000..2bf9ce36b
--- /dev/null
+++ b/prisma/migrations/20250418161719_additions_2/migration.sql
@@ -0,0 +1,5 @@
+-- AlterTable
+ALTER TABLE "Academy" ADD COLUMN "memberId" TEXT;
+
+-- AddForeignKey
+ALTER TABLE "Academy" ADD CONSTRAINT "Academy_memberId_fkey" FOREIGN KEY ("memberId") REFERENCES "Member"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20250420093858_additions_3/migration.sql b/prisma/migrations/20250420093858_additions_3/migration.sql
new file mode 100644
index 000000000..5e66e1836
--- /dev/null
+++ b/prisma/migrations/20250420093858_additions_3/migration.sql
@@ -0,0 +1,16 @@
+-- CreateTable
+CREATE TABLE "_InstructorToMartialArtsDiscipline" (
+ "A" TEXT NOT NULL,
+ "B" TEXT NOT NULL,
+
+ CONSTRAINT "_InstructorToMartialArtsDiscipline_AB_pkey" PRIMARY KEY ("A","B")
+);
+
+-- CreateIndex
+CREATE INDEX "_InstructorToMartialArtsDiscipline_B_index" ON "_InstructorToMartialArtsDiscipline"("B");
+
+-- AddForeignKey
+ALTER TABLE "_InstructorToMartialArtsDiscipline" ADD CONSTRAINT "_InstructorToMartialArtsDiscipline_A_fkey" FOREIGN KEY ("A") REFERENCES "Instructor"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_InstructorToMartialArtsDiscipline" ADD CONSTRAINT "_InstructorToMartialArtsDiscipline_B_fkey" FOREIGN KEY ("B") REFERENCES "MartialArtsDiscipline"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml
new file mode 100644
index 000000000..648c57fd5
--- /dev/null
+++ b/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (e.g., Git)
+provider = "postgresql"
\ No newline at end of file
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
new file mode 100644
index 000000000..fc428c1b9
--- /dev/null
+++ b/prisma/schema.prisma
@@ -0,0 +1,223 @@
+// This is your Prisma schema file,
+// learn more about it in the docs: https://pris.ly/d/prisma-schema
+
+// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
+// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
+
+generator client {
+ provider = "prisma-client-js"
+}
+
+datasource db {
+ provider = "postgresql"
+ url = env("DATABASE_URL")
+}
+
+model Academy {
+ id Int @id @default(autoincrement())
+ academyName String
+ academyLogo String?
+ academyOwnerId String
+ academyIsActive Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ Member Member? @relation(fields: [memberId], references: [id])
+ memberId String?
+}
+
+model Admin {
+ id String @id
+ latest002 String @default("003")
+ username String @unique
+ email String @unique
+}
+
+/**
+ * model Profile {
+ * id String @id @default(cuid())
+ * name String
+ * surname String
+ * email String? @unique
+ * phone String?
+ * address String?
+ * img String?
+ * bloodType BloodType?
+ * isBloodDonor Boolean? @default(false)
+ * sex MemberSex?
+ * createdAt DateTime @default(now())
+ * updatedAt DateTime @updatedAt
+ * belt Belt[]
+ * //1 to 1 relationship with a member
+ * memberId String? @unique
+ * member Member? @relation(fields: [memberId], references: [id])
+ * //1 to 1 relationship with a parent
+ * parentId String? @unique
+ * parent Parent? @relation(fields: [parentId], references: [id])
+ * instructorId String? @unique
+ * instructor Instructor? @relation(fields: [instructorId], references: [id])
+ * certifications Certifications[]
+ * }
+ */
+
+model Member {
+ id String @id @default(cuid())
+ username String @unique
+ firebaseId String?
+ name String
+ surname String
+ email String? @unique
+ phone String?
+ address String?
+ img String?
+ bloodType BloodType?
+ isBloodDonor Boolean? @default(false)
+ sex MemberSex?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ belt Belt[]
+ certification Certifications[]
+ memberMetrics MemberMetrics[]
+ parent Parent[]
+ academy Academy[]
+}
+
+model MemberMetrics {
+ id String @id @default(cuid())
+ weight Float
+ height Float
+ dateofentry DateTime @default(now())
+
+ memberId String
+ member Member @relation(fields: [memberId], references: [id])
+}
+
+model Parent {
+ id String @id @default(cuid())
+ username String @unique
+
+ name String
+ surname String
+ email String? @unique
+ phone String?
+ address String?
+ img String?
+ bloodType BloodType?
+ isBloodDonor Boolean? @default(false)
+ sex MemberSex?
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+
+ memberId String
+ member Member @relation(fields: [memberId], references: [id])
+}
+
+model Instructor {
+ id String @id @default(cuid())
+ username String @unique
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ name String
+ surname String
+ email String? @unique
+ phone String?
+ address String?
+ img String?
+ bloodType BloodType?
+ isBloodDonor Boolean? @default(false)
+ sex MemberSex?
+
+ disciplines MartialArtsDiscipline[]
+ Belt Belt[]
+}
+
+model Class {
+ id Int @id @default(autoincrement())
+ className String
+ classDescription String
+ capacity Int
+ day Day
+ startTime DateTime
+ endTime DateTime
+}
+
+model MartialArtsDiscipline {
+ id String @id @default(cuid())
+ artName String
+ artDescription String
+ belts Belt[]
+ instructor Instructor[]
+}
+
+model Belt {
+ id String @id @default(cuid())
+ beltName String
+ martialArtsDisciplineId String
+ martialArtsDiscipline MartialArtsDiscipline @relation(fields: [martialArtsDisciplineId], references: [id])
+
+ instructorID String
+ instructor Instructor @relation(fields: [instructorID], references: [id])
+
+ memberId String
+ member Member @relation(fields: [memberId], references: [id])
+}
+
+model Certifications {
+ id String @id @default(cuid())
+ certName String
+ certDescription String
+ certCircle Itteration
+
+ memberId String @unique
+ member Member @relation(fields: [memberId], references: [id])
+}
+
+model Announcements {
+ id Int @id @default(autoincrement())
+ title String
+ description String
+ date DateTime
+}
+
+model Events {
+ id Int @id @default(autoincrement())
+ startTime DateTime
+ endTime DateTime
+ title String
+ description String
+}
+
+enum MemberSex {
+ MALE
+ FEMALE
+}
+
+enum Itteration {
+ MONTHLY
+ QUARTERLY
+ SEMESTERLY
+ ANNUALY
+ PERPETUALLY
+}
+
+enum Day {
+ MONDAY
+ TUESDAY
+ WEDNESDAY
+ THURSDAY
+ FRIDAY
+ SATURDAY
+ SUNDAY
+}
+
+enum BloodType {
+ A_POSITIVE
+ A_NEGATIVE
+ B_POSITIVE
+ B_NEGATIVE
+ AB_POSITIVE
+ AB_NEGATIVE
+ O_POSITIVE
+ O_NEGATIVE
+}
diff --git a/prisma/seed.ts b/prisma/seed.ts
new file mode 100644
index 000000000..ab01cde33
--- /dev/null
+++ b/prisma/seed.ts
@@ -0,0 +1,154 @@
+import { PrismaClient } from "@prisma/client";
+import { faker } from "@faker-js/faker";
+
+const prisma = new PrismaClient();
+
+async function main() {
+ // Seed Academy
+ const academy = await prisma.academy.create({
+ data: {
+ academyName: faker.company.name(),
+ academyOwnerId: faker.string.uuid(),
+ academyIsActive: true,
+ },
+ });
+
+ // Seed Admins
+ for (let i = 0; i < 2; i++) {
+ await prisma.admin.create({
+ data: {
+ id: faker.string.uuid(),
+ latest002: faker.lorem.word(),
+ username: faker.internet.userName(),
+ email: faker.internet.email(),
+ },
+ });
+ }
+
+ // Seed Martial Arts Disciplines
+ const disciplines = await Promise.all(
+ ["Kickboxing", "Hwal Moo Do", "Tang Soo Do"].map(async (artName) => {
+ return prisma.martialArtsDiscipline.create({
+ data: {
+ artName,
+ artDescription: faker.lorem.sentence(),
+ },
+ });
+ })
+ );
+
+ // Seed Members
+ const memberIds: string[] = [];
+ for (let i = 0; i < 80; i++) {
+ const member = await prisma.member.create({
+ data: {
+ id: faker.string.uuid(),
+ username: faker.internet.userName(),
+ name: faker.person.firstName(),
+ surname: faker.person.lastName(),
+ email: faker.internet.email(),
+ phone: faker.phone.number(),
+ address: faker.location.streetAddress(),
+ bloodType: faker.helpers.arrayElement([
+ "A_POSITIVE",
+ "A_NEGATIVE",
+ "B_POSITIVE",
+ "B_NEGATIVE",
+ "AB_POSITIVE",
+ "AB_NEGATIVE",
+ "O_POSITIVE",
+ "O_NEGATIVE",
+ ]),
+ isBloodDonor: faker.datatype.boolean(),
+ sex: faker.helpers.arrayElement(["MALE", "FEMALE"]),
+ },
+ });
+ memberIds.push(member.id);
+ }
+
+ // Seed Parents
+ for (let i = 0; i < 30; i++) {
+ await prisma.parent.create({
+ data: {
+ id: faker.string.uuid(),
+ username: faker.internet.userName(),
+ name: faker.person.firstName(),
+ surname: faker.person.lastName(),
+ email: faker.internet.email(),
+ phone: faker.phone.number(),
+ address: faker.location.streetAddress(),
+ bloodType: faker.helpers.arrayElement([
+ "A_POSITIVE",
+ "A_NEGATIVE",
+ "B_POSITIVE",
+ "B_NEGATIVE",
+ "AB_POSITIVE",
+ "AB_NEGATIVE",
+ "O_POSITIVE",
+ "O_NEGATIVE",
+ ]),
+ isBloodDonor: faker.datatype.boolean(),
+ sex: faker.helpers.arrayElement(["MALE", "FEMALE"]),
+ memberId: faker.helpers.arrayElement(memberIds),
+ },
+ });
+ }
+
+ // Seed Instructors
+ const instructorIds: string[] = [];
+ for (let i = 0; i < 15; i++) {
+ const instructor = await prisma.instructor.create({
+ data: {
+ id: faker.string.uuid(),
+ username: faker.internet.userName(),
+ name: faker.person.firstName(),
+ surname: faker.person.lastName(),
+ email: faker.internet.email(),
+ phone: faker.phone.number(),
+ address: faker.location.streetAddress(),
+ bloodType: faker.helpers.arrayElement([
+ "A_POSITIVE",
+ "A_NEGATIVE",
+ "B_POSITIVE",
+ "B_NEGATIVE",
+ "AB_POSITIVE",
+ "AB_NEGATIVE",
+ "O_POSITIVE",
+ "O_NEGATIVE",
+ ]),
+ isBloodDonor: faker.datatype.boolean(),
+ sex: faker.helpers.arrayElement(["MALE", "FEMALE"]),
+ },
+ });
+ instructorIds.push(instructor.id);
+ }
+
+ // Seed Belts for each discipline
+ const beltNames = ["White", "Yellow", "Orange", "Green", "Blue", "Brown", "Red", "Black"];
+ await Promise.all(
+ disciplines.map(async (discipline) => {
+ await Promise.all(
+ beltNames.map(async (beltName, index) => {
+ await prisma.belt.create({
+ data: {
+ beltName,
+ martialArtsDisciplineId: discipline.id,
+ instructorID: instructorIds[index % instructorIds.length], // Assign instructors in rotation
+ memberId: memberIds[index % memberIds.length], // Assign members in rotation
+ },
+ });
+ })
+ );
+ })
+ );
+
+ console.log("Database seeded successfully!");
+}
+
+main()
+ .then(() => prisma.$disconnect())
+ .catch((e) => {
+ console.error(e);
+ prisma.$disconnect();
+ process.exit(1);
+ });
diff --git a/public/blackandwhite-belt.png b/public/blackandwhite-belt.png
new file mode 100644
index 000000000..7ec26067a
Binary files /dev/null and b/public/blackandwhite-belt.png differ
diff --git a/public/box.png b/public/box.png
new file mode 100644
index 000000000..40e88974a
Binary files /dev/null and b/public/box.png differ
diff --git a/public/conversation.png b/public/conversation.png
new file mode 100644
index 000000000..f26936832
Binary files /dev/null and b/public/conversation.png differ
diff --git a/public/create.png b/public/create.png
new file mode 100644
index 000000000..0fb69e831
Binary files /dev/null and b/public/create.png differ
diff --git a/public/home.png b/public/home.png
deleted file mode 100644
index e5a6e99c0..000000000
Binary files a/public/home.png and /dev/null differ
diff --git a/public/homeBold.png b/public/homeBold.png
new file mode 100644
index 000000000..f4e24ba8c
Binary files /dev/null and b/public/homeBold.png differ
diff --git a/public/logo-black.png b/public/logo-black.png
new file mode 100644
index 000000000..66695ab0a
Binary files /dev/null and b/public/logo-black.png differ
diff --git a/public/logo-black.svg b/public/logo-black.svg
new file mode 100644
index 000000000..c4b551715
--- /dev/null
+++ b/public/logo-black.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/logo-color.png b/public/logo-color.png
new file mode 100644
index 000000000..7cd1239be
Binary files /dev/null and b/public/logo-color.png differ
diff --git a/public/logo-color.svg b/public/logo-color.svg
new file mode 100644
index 000000000..9c9434da6
--- /dev/null
+++ b/public/logo-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/logo-no-background.png b/public/logo-no-background.png
new file mode 100644
index 000000000..1809717cd
Binary files /dev/null and b/public/logo-no-background.png differ
diff --git a/public/logo-no-background.svg b/public/logo-no-background.svg
new file mode 100644
index 000000000..b26c6f51f
--- /dev/null
+++ b/public/logo-no-background.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/logo-white.png b/public/logo-white.png
new file mode 100644
index 000000000..04a508b39
Binary files /dev/null and b/public/logo-white.png differ
diff --git a/public/logo-white.svg b/public/logo-white.svg
new file mode 100644
index 000000000..7c78c6c35
--- /dev/null
+++ b/public/logo-white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/marketing.png b/public/marketing.png
new file mode 100644
index 000000000..1ab16b820
Binary files /dev/null and b/public/marketing.png differ
diff --git a/public/martial-arts.png b/public/martial-arts.png
new file mode 100644
index 000000000..210584c70
Binary files /dev/null and b/public/martial-arts.png differ
diff --git a/public/mechanism.png b/public/mechanism.png
new file mode 100644
index 000000000..91763807c
Binary files /dev/null and b/public/mechanism.png differ
diff --git a/public/noAvatar.png b/public/noAvatar.png
new file mode 100644
index 000000000..2347bce68
Binary files /dev/null and b/public/noAvatar.png differ
diff --git a/public/parent.png b/public/parent.png
deleted file mode 100644
index 56ddf9c9d..000000000
Binary files a/public/parent.png and /dev/null differ
diff --git a/public/parentBold.png b/public/parentBold.png
new file mode 100644
index 000000000..67ab544e9
Binary files /dev/null and b/public/parentBold.png differ
diff --git a/public/parents.png b/public/parents.png
new file mode 100644
index 000000000..667a18509
Binary files /dev/null and b/public/parents.png differ
diff --git a/public/schedule.png b/public/schedule.png
new file mode 100644
index 000000000..b46f496f4
Binary files /dev/null and b/public/schedule.png differ
diff --git a/public/switch.png b/public/switch.png
new file mode 100644
index 000000000..75b0aca68
Binary files /dev/null and b/public/switch.png differ
diff --git a/public/trophy.png b/public/trophy.png
new file mode 100644
index 000000000..1a602ecf3
Binary files /dev/null and b/public/trophy.png differ
diff --git a/public/update.png b/public/update.png
new file mode 100644
index 000000000..bb6685bbe
Binary files /dev/null and b/public/update.png differ
diff --git a/public/user.png b/public/user.png
new file mode 100644
index 000000000..7127aa862
Binary files /dev/null and b/public/user.png differ
diff --git a/src/app/(dashboard)/admin/page.tsx b/src/app/(dashboard)/admin/page.tsx
new file mode 100644
index 000000000..833505b75
--- /dev/null
+++ b/src/app/(dashboard)/admin/page.tsx
@@ -0,0 +1,46 @@
+import Announcements from "@/components/Announcements"
+import AttendanceChart from "@/components/AttendanceChart"
+import CountChart from "@/components/CountChart"
+import EventCalendar from "@/components/EventCalendar"
+import FinanceChart from "@/components/FinanceChart"
+import UserCard from "@/components/UserCard"
+
+const AdminPage = () => {
+ return (
+
+ {/* LEFT */}
+
+ {/**USER CARDS */}
+
+
+
+
+
+
+ {/* MIDDLE SECTION */}
+
+ {/* COUNT CHART */}
+
+
+
+ {/* ATTENDANCE CHART */}
+
+
+ {/* Bottom Charts */}
+
+
+
+
+ {/* RIGHT */}
+
+
+
+ )
+}
+
+export default AdminPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx
new file mode 100644
index 000000000..b5d9f8217
--- /dev/null
+++ b/src/app/(dashboard)/layout.tsx
@@ -0,0 +1,31 @@
+import Image from "next/image";
+import Link from "next/link";
+import Menu from "@/components/Menu";
+import Navbar from "@/components/Navbar";
+
+export default function DashboardLayout({
+ children,
+ }: Readonly<{
+ children: React.ReactNode;
+ }>) {
+ return (
+
+ {/* Left */}
+
+
+
+ {/*
+ DojangNext
+ */}
+
+
+
+ {/* Right */}
+
+
+ {children}
+
+
+ );
+ }
+
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/events/page.tsx b/src/app/(dashboard)/list/events/page.tsx
new file mode 100644
index 000000000..6f22d8af3
--- /dev/null
+++ b/src/app/(dashboard)/list/events/page.tsx
@@ -0,0 +1,129 @@
+import Pagination from "@/components/Pagination";
+import Table from "@/components/Table";
+import TableSearch from "@/components/TableSearch";
+import { role, teachersData } from "@/lib/data";
+import Image from "next/image";
+import Link from "next/link";
+
+type Teacher = {
+ id:number;
+ teacherId:string;
+ name:string;
+ email?:string;
+ photo:string;
+ phone:string;
+ subjects:string[];
+ classes:string[];
+ address:string;
+
+}
+
+
+
+const columns = [
+ {
+ header:"info", accessor:"info"
+ },
+ {
+ header:"Teacher ID",
+ accessor:"teacherId",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Subjects",
+ accessor:"subjects",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Classes",
+ accessor:"classes",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Phone",
+ accessor:"phone",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Address",
+ accessor:"address",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Actions",
+ accessor:"actions",
+ },
+];
+
+const renderRow = (item:Teacher)=>(
+
+
+
+
+
{item.name}
+
{item?.email}
+
+
+ {item.teacherId}
+ {item.subjects.join(",")}
+ {item.classes.join(",")}
+ {item.phone}
+ {item?.address}
+
+
+
+
+
+
+
+ {
+ role==="admin" &&
+ (
+
+
+
+ )
+ }
+
+
+
+
+);
+
+const EventsListPage = () => {
+ return (
+
+
+ {/* TOP SECTION*/}
+
+
All Teachers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* LIST SECTION*/}
+
+ {/* PAGINATION SECTION*/}
+
+
+ )
+}
+
+export default EventsListPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/instructors/[id]/bck.tsx b/src/app/(dashboard)/list/instructors/[id]/bck.tsx
new file mode 100644
index 000000000..9be7cc699
--- /dev/null
+++ b/src/app/(dashboard)/list/instructors/[id]/bck.tsx
@@ -0,0 +1,117 @@
+import Announcements from "@/components/Announcements"
+import BigCalendar from "@/components/BigCalendar"
+import Image from "next/image"
+
+const SingleTeacherPage = () => {
+ return (
+
+ {/* LEFT */}
+
+ {/* TOP */}
+
+ {/* Info Card */}
+
+
+
+
+
+
George Antzoulis
+
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
+
+
+
+
+ A+
+
+
+
+ November 2024
+
+
+
+ gantzoulis@hotmail.com
+
+
+
+ 6970142125
+
+
+
+
+ {/* Small Cards */}
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+
+
+
90%
+ Attendance
+
+
+
+
+ {/* BOTTOM */}
+
+
Instructors Schedule
+
+
+
+ {/* RIGHT */}
+
+
+ )
+}
+
+export default SingleTeacherPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/instructors/[id]/page.tsx b/src/app/(dashboard)/list/instructors/[id]/page.tsx
new file mode 100644
index 000000000..f4f83a3dc
--- /dev/null
+++ b/src/app/(dashboard)/list/instructors/[id]/page.tsx
@@ -0,0 +1,171 @@
+import Announcements from "@/components/Announcements"
+import BigCalendar from "@/components/BigCalendar"
+import FormModal from "@/components/FormModal"
+import Performance from "@/components/Performance"
+import { teachersData } from "@/lib/data"
+import Image from "next/image"
+import Link from "next/link"
+import { role } from "@/lib/data"
+
+const SingleTeacherPage = () => {
+ return (
+
+ {/* LEFT */}
+
+ {/* TOP */}
+
+ {/* USER INFO CARD */}
+
+
+
+
+
+
+
Leonard Snyder
+ {role === "admin" && }
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit.
+
+
+
+
+ A+
+
+
+
+ January 2025
+
+
+
+ user@gmail.com
+
+
+
+ +1 234 567
+
+
+
+
+ {/* SMALL CARDS */}
+
+ {/* CARD */}
+
+
+
+
90%
+ Attendance
+
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+
+
+ {/* BOTTOM*/}
+
+
Teacher Schedule
+
+
+
+
+ {/* RIGHT */}
+ {/*
+
+
+
Shortcuts
+
+
+ Teacher's Classes
+
+
+ Teacher's Students
+
+
+ Teacher's Lessons
+
+
+ Teacher's Exams
+
+
+ Teacher's Assignments
+
+
+
+
+
+
+ */}
+
+ );
+};
+
+export default SingleTeacherPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/instructors/[id]/page_.bck.tsx b/src/app/(dashboard)/list/instructors/[id]/page_.bck.tsx
new file mode 100644
index 000000000..7bd4a94ba
--- /dev/null
+++ b/src/app/(dashboard)/list/instructors/[id]/page_.bck.tsx
@@ -0,0 +1,168 @@
+import Announcements from "@/components/Announcements"
+import BigCalendar from "@/components/BigCalendar"
+import FormModal from "@/components/FormModal"
+import Performance from "@/components/Performance"
+import { teachersData } from "@/lib/data"
+import Image from "next/image"
+import Link from "next/link"
+import { role } from "@/lib/data"
+
+const SingleTeacherPage = () => {
+ return (
+
+ {/* LEFT */}
+
+ {/* TOP */}
+
+ {/* USER INFO CARD */}
+
+
+
+
+
+
+
Leonard Snyder
+ {role === "admin" && }
+
+
+ Lorem ipsum, dolor sit amet consectetur adipisicing elit.
+
+
+
+
+ A+
+
+
+
+ January 2025
+
+
+
+ user@gmail.com
+
+
+
+ +1 234 567
+
+
+
+
+ {/* SMALL CARDS */}
+
+ {/* CARD */}
+
+
+
+
90%
+ Attendance
+
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+
+
+ {/* BOTTOM */}
+
+
Teacher's Schedule
+
+
+
+ {/* RIGHT */}
+
+
+
Shortcuts
+
+
+ Teacher's Classes
+
+
+ Teacher's Students
+
+
+ Teacher's Lessons
+
+
+ Teacher's Exams
+
+
+ Teacher's Assignments
+
+
+
+
+
+
+
+ );
+};
+
+export default SingleTeacherPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/instructors/page.tsx b/src/app/(dashboard)/list/instructors/page.tsx
new file mode 100644
index 000000000..85ea1799c
--- /dev/null
+++ b/src/app/(dashboard)/list/instructors/page.tsx
@@ -0,0 +1,146 @@
+import FormModal from "@/components/FormModal";
+import Pagination from "@/components/Pagination";
+import Table from "@/components/Table";
+import TableSearch from "@/components/TableSearch";
+import { role, teachersData } from "@/lib/data";
+import prisma from "@/lib/prisma";
+import { Instructor, MartialArtsDiscipline } from "@prisma/client";
+import Image from "next/image";
+import Link from "next/link";
+import { ITEMS_PER_PAGE } from "@/lib/settings";
+import { count } from "console";
+
+
+type InstsuctorList = Instructor & {disciplines:MartialArtsDiscipline[]}
+
+const columns = [
+ {
+ header:"info", accessor:"info"
+ },
+ {
+ header:"Disciplines",
+ accessor:"disciplines",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Bloodtype",
+ accessor:"bloodType",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Phone",
+ accessor:"phone",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Address",
+ accessor:"address",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Actions",
+ accessor:"actions",
+ },
+];
+
+const renderRow = (item:InstsuctorList)=>(
+
+
+
+
+
{item.name} {item.surname}
+
{item?.email}
+
+
+
+ {item.disciplines.map(disc=>disc.artName).join(",")}
+ {item.bloodType}
+ {item.phone}
+ {item?.address}
+
+
+
+
+
+
+
+ {
+ role==="admin" &&
+ (
+ <>
+
+
+ >
+
+ )
+ }
+
+
+
+);
+
+const InstructorListPage = async ({searchParams}:
+ {
+ searchParams:{[key:string]:string | undefined};
+ }
+) => {
+
+
+ const {page, ...queryParams} = await searchParams;
+
+ const p = page ? parseInt(page) : 1;
+
+ const [data, countItems] = await prisma.$transaction([
+ prisma.instructor.findMany(
+ {
+ take:ITEMS_PER_PAGE,
+ skip: ITEMS_PER_PAGE *(p - 1),
+ include:{
+ disciplines:true,
+ }
+ }
+ ),
+ prisma.instructor.count(),
+ ]);
+
+ console.log("resolving " + countItems);
+
+
+ return (
+
+ {/* TOP SECTION*/}
+
+
Instructors (Δάσκαλοι) {countItems} total Teachers
+
+
+
+
+
+
+
+
+
+ {role === "admin" && (
+ //
+ //
+ //
+
+ )}
+
+
+
+ {/* LIST SECTION*/}
+
+ {/* PAGINATION SECTION*/}
+
+
+ )
+}
+
+export default InstructorListPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/parents/page.tsx b/src/app/(dashboard)/list/parents/page.tsx
new file mode 100644
index 000000000..b69ba851b
--- /dev/null
+++ b/src/app/(dashboard)/list/parents/page.tsx
@@ -0,0 +1,112 @@
+import FormModal from "@/components/FormModal";
+import Pagination from "@/components/Pagination";
+import Table from "@/components/Table";
+import TableSearch from "@/components/TableSearch";
+import { role, parentsData } from "@/lib/data";
+import Image from "next/image";
+import Link from "next/link";
+
+type Parent = {
+ id:number;
+ name:string;
+ email?:string;
+ students:string[];
+ phone:string;
+ address:string;
+
+}
+
+
+const columns = [
+ {
+ header:"info", accessor:"info"
+ },
+ {
+ header:"Student Names",
+ accessor:"students",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Phone",
+ accessor:"phone",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Address",
+ accessor:"address",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Actions",
+ accessor:"actions",
+ },
+];
+
+const renderRow = (item:Parent)=>(
+
+
+
+
{item.name}
+
{item?.email}
+
+
+ {item.students.join(",")}
+ {item.phone}
+ {item?.address}
+
+
+ {/*
+
+
+
+ */}
+ {
+ role==="admin" &&
+ (
+ <>
+
+
+ >
+ )
+ }
+
+
+
+);
+
+const ParentsListPage = () => {
+ return (
+
+
+ {/* TOP SECTION*/}
+
+
All Parents
+
+
+
+
+
+
+
+
+
+ {
+ role==="admin" &&
+ (
+ <>
+
+ >
+ )
+ }
+
+
+
+ {/* LIST SECTION*/}
+
+ {/* PAGINATION SECTION*/}
+
+
+ )
+}
+
+export default ParentsListPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/students/[id]/page.tsx b/src/app/(dashboard)/list/students/[id]/page.tsx
new file mode 100644
index 000000000..2d545c0ad
--- /dev/null
+++ b/src/app/(dashboard)/list/students/[id]/page.tsx
@@ -0,0 +1,132 @@
+
+import Announcements from "@/components/Announcements"
+import BigCalendar from "@/components/BigCalendar"
+import Performance from "@/components/Performance"
+import Image from "next/image"
+import Link from "next/link"
+
+const SingleStudentPage = () => {
+ return (
+
+ {/* LEFT */}
+
+ {/* TOP */}
+
+ {/* Info Card */}
+
+
+
+
+
+
Evelyn
+
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
+
+
+
+
+ A+
+
+
+
+ November 2024
+
+
+
+ evelina@hotmail.com
+
+
+
+ 6970142125
+
+
+
+
+ {/* Small Cards */}
+
+ {/* CARD */}
+
+
+
+
Black 4th Dan
+ Belt
+
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+ {/* CARD */}
+
+
+
+
90%
+ Attendance
+
+
+
+
+ {/* BOTTOM */}
+
+
Student Schedule
+
+
+
+ {/* RIGHT */}
+
+
+
Shortcuts
+
+ Lessons
+ Teachers
+ Exams
+ Results
+ Assignments
+ Events
+
+
+
+
+
+
+ )
+}
+
+export default SingleStudentPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/students/page.tsx b/src/app/(dashboard)/list/students/page.tsx
new file mode 100644
index 000000000..478e3b320
--- /dev/null
+++ b/src/app/(dashboard)/list/students/page.tsx
@@ -0,0 +1,134 @@
+import FormModal from "@/components/FormModal";
+import Pagination from "@/components/Pagination";
+import Table from "@/components/Table";
+import TableSearch from "@/components/TableSearch";
+import { role, studentsData, teachersData } from "@/lib/data";
+import Image from "next/image";
+import Link from "next/link";
+
+type Student = {
+ id:number;
+ studentId:string;
+ name:string;
+ email?:string;
+ photo:string;
+ phone:string;
+ grade:number;
+ class:string;
+ address:string;
+}
+
+
+
+const columns = [
+ {
+ header:"info", accessor:"info"
+ },
+ {
+ header:"Student ID",
+ accessor:"studentId",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Grade",
+ accessor:"grade",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Class",
+ accessor:"class",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Phone",
+ accessor:"phone",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Address",
+ accessor:"address",
+ className:"hidden lg:table-cell"
+ },
+ {
+ header:"Actions",
+ accessor:"actions",
+ },
+
+];
+
+const renderRow = (item:Student)=>(
+
+
+
+
+
{item.name}
+
{item?.email}
+
+
+ {item.studentId}
+ {item.grade}
+ {item.class}
+ {item.phone}
+ {item?.address}
+
+
+
+ {
+ role==="admin" &&
+ (
+ //
+ //
+ //
+ <>
+
+
+ >
+ )
+ }
+
+
+
+
+);
+
+const StudentListPage = () => {
+ return (
+
+
+ {/* TOP SECTION*/}
+
+
All Students
+
+
+
+
+
+
+
+
+
+ {/*
+
+ */}
+ {role==="admin" &&
+ (
+
+ )}
+
+
+
+ {/* LIST SECTION*/}
+
+ {/* PAGINATION SECTION*/}
+
+
+ )
+}
+
+export default StudentListPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/list/subjects/page.tsx b/src/app/(dashboard)/list/subjects/page.tsx
new file mode 100644
index 000000000..9d3feb9a0
--- /dev/null
+++ b/src/app/(dashboard)/list/subjects/page.tsx
@@ -0,0 +1,91 @@
+import Pagination from "@/components/Pagination";
+import Table from "@/components/Table";
+import TableSearch from "@/components/TableSearch";
+import { role, subjectsData } from "@/lib/data";
+import Image from "next/image";
+import Link from "next/link";
+
+type Subject = {
+ id:number;
+ name:string;
+ teachers:string[];
+
+}
+
+
+
+const columns = [
+ {
+ header:"Subject Name", accessor:"info"
+ },
+ {
+ header:"Subjects",
+ accessor:"subjects",
+ className:"hidden md:table-cell"
+ },
+ {
+ header:"Actions",
+ accessor:"actions",
+ },
+];
+
+const renderRow = (item:Subject)=>(
+
+
+
+
{item.name}
+
+
+ {item.teachers.join(",")}
+
+
+
+
+
+
+
+ {
+ role==="admin" &&
+ (
+
+
+
+ )
+ }
+
+
+
+
+);
+
+const SubjectsListPage = () => {
+ return (
+
+
+ {/* TOP SECTION*/}
+
+
All Subjects
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* LIST SECTION*/}
+
+ {/* PAGINATION SECTION*/}
+
+
+ )
+}
+
+export default SubjectsListPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/parent/page.tsx b/src/app/(dashboard)/parent/page.tsx
new file mode 100644
index 000000000..9ca8c69d1
--- /dev/null
+++ b/src/app/(dashboard)/parent/page.tsx
@@ -0,0 +1,23 @@
+import Announcements from '@/components/Announcements'
+import BigCalendar from '@/components/BigCalendar'
+import React from 'react'
+
+const ParentPage = () => {
+ return (
+
+ {/* LEFT */}
+
+
+
Schedule (StudentName)
+
+
+
+ {/* RIGHT */}
+
+
+ )
+}
+
+export default ParentPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/student/page.tsx b/src/app/(dashboard)/student/page.tsx
new file mode 100644
index 000000000..2f78f7b82
--- /dev/null
+++ b/src/app/(dashboard)/student/page.tsx
@@ -0,0 +1,25 @@
+import Announcements from '@/components/Announcements'
+import BigCalendar from '@/components/BigCalendar'
+import EventCalendar from '@/components/EventCalendar'
+import React from 'react'
+
+const StudentPage = () => {
+ return (
+
+ {/* LEFT */}
+
+ {/* RIGHT */}
+
+
+ )
+}
+
+export default StudentPage
\ No newline at end of file
diff --git a/src/app/(dashboard)/teacher/page.tsx b/src/app/(dashboard)/teacher/page.tsx
new file mode 100644
index 000000000..80aad4c5f
--- /dev/null
+++ b/src/app/(dashboard)/teacher/page.tsx
@@ -0,0 +1,23 @@
+import Announcements from '@/components/Announcements'
+import BigCalendar from '@/components/BigCalendar'
+import React from 'react'
+
+const TeacherPage = () => {
+ return (
+
+ {/* LEFT */}
+
+
+
Schedule (TeachersName)
+
+
+
+ {/* RIGHT */}
+
+
+ )
+}
+
+export default TeacherPage
\ No newline at end of file
diff --git a/src/app/globals.css b/src/app/globals.css
index bd6213e1d..266f6ec59 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,3 +1,102 @@
@tailwind base;
@tailwind components;
-@tailwind utilities;
\ No newline at end of file
+@tailwind utilities;
+
+.react-calendar{
+ width: 100% !important;
+ border: none !important;
+ font-family: "Inter", sans-serif !important;
+}
+
+.react-calendar__navigation__label__labelText{
+ font-weight: 600;
+}
+
+.react-calendar__tile--active {
+ background-color: #302780 !important;
+
+}
+
+.rbc-btn-group:first-child {
+ display: none !important;
+}
+
+.rbc-toolbar-label{
+ text-align: right !important;
+ padding:0px 20px !important ;
+}
+
+.rbc-btn-group:last-child {
+ font-size: 13px !important;
+}
+
+.rbc-btn-group:last-child button {
+ border: none !important;
+ background-color: #f1f0ff !important;
+ margin-left: 2px !important;
+}
+
+.rbc-toolbar button.rbc-active {
+ box-shadow: none !important;
+ background-color: #7e57eb !important;
+ color:white !important;
+}
+
+.rbc-time-view{
+ border-color: #eee !important;
+}
+
+.rbc-time-header {
+ display: none !important;
+}
+
+.rbc-time-content {
+ border: none !important;
+}
+
+.rbc-time-gutter.rbc-time-column {
+ font-size: 12px !important;
+}
+
+.rbc-time-gutter.rbc-time-column .rbc-timeslot-group {
+ padding: 0px 20px !important;
+}
+
+.rbc-timeslot-group {
+ background-color: #f7fdff !important;
+}
+
+.rbc-day-slot {
+ font-size: 12px !important;
+}
+
+.rbc-event {
+ border: none !important;
+ color:black !important;
+ width: 99% !important;
+ padding: 8px !important;
+
+
+}
+
+.rbc-event:nth-child(1) {
+ background-color: #e2f8ff !important;
+}
+
+.rbc-event:nth-child(2) {
+ background-color: #fefce8 !important;
+}
+.rbc-event:nth-child(3) {
+ background-color: red !important;
+}
+.rbc-event:nth-child(4) {
+ background-color: red !important;
+}
+.rbc-event:nth-child(5) {
+ background-color: red !important;
+}
+
+.rbc-event-label{
+ color: gray;
+ margin-bottom: 5px;
+}
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 44c71f8db..d4061c8c5 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -5,7 +5,7 @@ import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
- title: "Lama Dev School Management Dashboard",
+ title: "DojangNext Management Dashboard",
description: "Next.js School Management System",
};
@@ -16,7 +16,7 @@ export default function RootLayout({
}>) {
return (
- {children}
+ {children}
);
}
diff --git a/src/app/sign-in/page.tsx b/src/app/sign-in/page.tsx
new file mode 100644
index 000000000..ced4ceac2
--- /dev/null
+++ b/src/app/sign-in/page.tsx
@@ -0,0 +1,7 @@
+const LoginPage = () => {
+ return (
+ LoginPage
+ )
+}
+
+export default LoginPage
\ No newline at end of file
diff --git a/src/components/Announcements.tsx b/src/components/Announcements.tsx
new file mode 100644
index 000000000..c5dd84f54
--- /dev/null
+++ b/src/components/Announcements.tsx
@@ -0,0 +1,56 @@
+"use client";
+
+const announcements =
+[
+ {
+ id:1,
+ title:"Lorem ipsum dolor sit",
+ date:"08-10-2024",
+ description:"Ducimus voluptates quasi, blanditiis alias fugiat, autem ea assumenda odio delectus"},
+ {
+ id:2,
+ title:"Lorem ipsum dolor sit",
+ date:"09-10-2024",
+ description:"Ducimus voluptates quasi, blanditiis alias fugiat.Quisquam reiciendis atque est quam quod natus minima numquam animi corporis"
+ },
+ {
+ id:3,
+ title:"Lorem ipsum dolor sit",
+ date:"10-10-2024",
+ description:"Autem ea assumenda odio delectus.Quisquam reiciendis atque est quam quod natus minima numquam animi corporis"
+ },
+ {
+ id:4,
+ title:"Lorem ipsum dolor sit",
+ date:"11-10-2024",
+ description:"Odio delectus.Quisquam reiciendis atque est quam quod natus minima numquam animi corporis"
+ }
+];
+
+const Announcements = () => {
+ return (
+
+
+
Announcements
+ View all
+
+
+ {
+ announcements.map(announcement=>(
+
+
+
{announcement.title}
+ {announcement.date}
+
+
+ {announcement.description}
+
+
+ ))
+ }
+
+
+ )
+}
+
+export default Announcements
\ No newline at end of file
diff --git a/src/components/AttendanceChart.tsx b/src/components/AttendanceChart.tsx
new file mode 100644
index 000000000..81a1a012a
--- /dev/null
+++ b/src/components/AttendanceChart.tsx
@@ -0,0 +1,72 @@
+"use client";
+
+import Image from 'next/image';
+import { BarChart, Bar, Rectangle, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
+
+const data = [
+ {
+ name: 'Mon',
+ present: 60,
+ absent: 24,
+ },
+ {
+ name: 'Tue',
+ present: 30,
+ absent: 13,
+ },
+ {
+ name: 'Wed',
+ present: 20,
+ absent: 58,
+ },
+ {
+ name: 'Thu',
+ present: 27,
+ absent: 39,
+
+ },
+ {
+ name: 'Fri',
+ present: 18,
+ absent: 48,
+ },
+];
+
+
+const AttendanceChart = () => {
+ return (
+
+
+
Attendance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default AttendanceChart
\ No newline at end of file
diff --git a/src/components/BigCalendar.tsx b/src/components/BigCalendar.tsx
new file mode 100644
index 000000000..10a88bcbd
--- /dev/null
+++ b/src/components/BigCalendar.tsx
@@ -0,0 +1,37 @@
+"use client";
+
+import { Calendar, momentLocalizer, View, Views } from 'react-big-calendar'
+import moment from 'moment'
+import { calendarEvents } from '@/lib/data';
+import "react-big-calendar/lib/css/react-big-calendar.css";
+import { useState } from 'react';
+
+const localizer = momentLocalizer(moment);
+
+const BigCalendar = () => {
+ const [view, setView] = useState(Views.WORK_WEEK);
+
+ const handleOnChangeView = (selectedView:View)=>{
+ setView(selectedView);
+ }
+
+
+ return(
+ <>
+
+ >
+ );
+}
+
+export default BigCalendar;
\ No newline at end of file
diff --git a/src/components/ConvexClientProvider.tsx b/src/components/ConvexClientProvider.tsx
new file mode 100644
index 000000000..bc549c73b
--- /dev/null
+++ b/src/components/ConvexClientProvider.tsx
@@ -0,0 +1,10 @@
+"use client";
+
+import { ConvexProvider, ConvexReactClient } from "convex/react";
+import { ReactNode } from "react";
+
+const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);
+
+export function ConvexClientProvider({ children }: { children: ReactNode }) {
+ return {children} ;
+}
\ No newline at end of file
diff --git a/src/components/CountChart.tsx b/src/components/CountChart.tsx
new file mode 100644
index 000000000..b81aa97e9
--- /dev/null
+++ b/src/components/CountChart.tsx
@@ -0,0 +1,64 @@
+"use client";
+
+import Image from 'next/image';
+import { RadialBarChart, RadialBar, Legend, ResponsiveContainer } from 'recharts';
+
+const data = [
+ {
+ name: 'Total',
+ count:200,
+ fill: 'white',
+ },
+ {
+ name: 'Girls',
+ count:83,
+ fill: '#de7ed6',
+ },
+ {
+ name: 'Boys',
+ count:117,
+ fill: '#7e57eb',
+ },
+
+];
+
+const CountChart = () => {
+ return (
+
+ {/** TITLE */}
+
+
Students
+
+
+ {/** CHART */}
+
+
+
+
+ {/* */}
+
+
+
+
+ {/** BOTTOM */}
+
+
+ )
+}
+
+export default CountChart
\ No newline at end of file
diff --git a/src/components/EventCalendar.tsx b/src/components/EventCalendar.tsx
new file mode 100644
index 000000000..c0869128d
--- /dev/null
+++ b/src/components/EventCalendar.tsx
@@ -0,0 +1,58 @@
+'use client';
+
+import Image from "next/image";
+import { useState } from "react";
+import Calendar from "react-calendar";
+import 'react-calendar/dist/Calendar.css';
+
+type ValuePiece = Date | null;
+
+type Value = ValuePiece | [ValuePiece, ValuePiece];
+
+const events = [
+ {
+ id:1,
+ title:"Mulberry Street",
+ time:"2:49 PM",
+ description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Sint, maxime autem quaerat, dicta aliquam laborum aut ex"
+ },
+ {
+ id:2,
+ title:"Jay Mohr: Funny for a Girl",
+ time:"6:28 PM",
+ description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Sint, maxime autem quaerat, dicta aliquam laborum aut ex"
+ },
+ {
+ id:3,
+ title:"Year Zero: The Silent Death of Cambodia",
+ time:"9:32 AM",
+ description:"Lorem ipsum dolor sit amet consectetur adipisicing elit. Sint, maxime autem quaerat, dicta aliquam laborum aut ex"
+ }];
+
+const EventCalendar = () => {
+ const [value, onChange] = useState(new Date());
+ return (
+
+ {/*
*/}
+
+
Events
+
+
+
+ {
+ events.map(event=>(
+
+
+
{event.title}
+ {event.time}
+
+
{event.description}
+
+ ))
+ }
+
+
+ )
+}
+
+export default EventCalendar
\ No newline at end of file
diff --git a/src/components/FinanceChart.tsx b/src/components/FinanceChart.tsx
new file mode 100644
index 000000000..eac41d122
--- /dev/null
+++ b/src/components/FinanceChart.tsx
@@ -0,0 +1,119 @@
+"use client";
+import Image from 'next/image';
+import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
+
+
+const data = [
+ {
+ name: 'Sep',
+ income: 400,
+ expenses: 2400,
+ amt: 2400,
+ },
+ {
+ name: 'Oct',
+ income: 645,
+ expenses: 1000,
+ amt: 2210,
+ },
+ {
+ name: 'Nov',
+ income: 700,
+ expenses: 800,
+ amt: 2290,
+ },
+ {
+ name: 'Dec',
+ income: 1200,
+ expenses: 50,
+ amt: 2000,
+ },
+ {
+ name: 'Jan',
+ income: 500,
+ expenses: 2400,
+ amt: 2181,
+ },
+ {
+ name: 'Feb',
+ income: 450,
+ expenses: 145,
+ amt: 2500,
+ },
+ {
+ name: 'Mar',
+ income: 1400,
+ expenses: 600,
+ amt: 2100,
+ },
+ {
+ name: 'Mai',
+ income: 1670,
+ expenses: 500,
+ amt: 2100,
+ },
+ {
+ name: 'Jun',
+ income: 1200,
+ expenses: 2400,
+ amt: 2100,
+ },
+ {
+ name: 'Jul',
+ income: 300,
+ expenses: 1200,
+ amt: 2100,
+ },
+ {
+ name: 'Aug',
+ income: 0,
+ expenses: 800,
+ amt: 2100,
+ },
+ ];
+
+const FinanceChart = () => {
+ return (
+
+
+
Finances
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+
+export default FinanceChart
\ No newline at end of file
diff --git a/src/components/FormModal.tsx b/src/components/FormModal.tsx
new file mode 100644
index 000000000..1850b130d
--- /dev/null
+++ b/src/components/FormModal.tsx
@@ -0,0 +1,86 @@
+"use client";
+
+import dynamic from "next/dynamic";
+import Image from "next/image";
+import { useState } from "react";
+// import TeacherForm from "./forms/TeacherForm";
+// import MemberForm from "./forms/MemberForm";
+
+
+const InstructorForm = dynamic(()=>import("./forms/InstructorForm"),{
+ loading:()=> Loading...
+});
+const MemberForm = dynamic(()=>import("./forms/MemberForm"),{
+ loading:()=> Loading...
+});
+
+const forms :{[key:string]:(type:"create" | "update" , data?:any)=>JSX.Element;
+
+}={
+ instructor: (type,data) => ,
+ student: (type, data) => ,
+};
+
+const FormModal = ({table, type, data, id}:{
+ table:
+ | "instructor"
+ | "student"
+ | "parent"
+ | "class"
+ | "lesson"
+ | "event"
+ | "announcement";
+ type:"create" | "update" | "delete" | "view";
+ data?:any;
+ id?: string;
+
+
+}) => {
+
+ const size = type ==="create" ? "w-8 h-8" : "w-7 h-7";
+ const bgColor =
+ type === "create"
+ ? "bg-zeidYellow"
+ : type === "update"
+ ? "bg-zeidSky"
+ : "bg-zeidPurple";
+ const [open, setOpen] = useState(false);
+
+
+ const Form = () => {
+ return (
+ type === "delete" && id ?
+ (
+
+ )
+ : type === "create" || type === "update" ?
+ (
+ forms[table](type, data)
+ ) : "Form not found!"
+ );
+ };
+
+
+ return (
+ <>
+ setOpen(true)}>
+
+
+ {open && (
+
+
+
+
setOpen(false)}>
+
+
+
+
+ )}
+ >
+ )
+}
+
+export default FormModal
\ No newline at end of file
diff --git a/src/components/InputField.tsx b/src/components/InputField.tsx
new file mode 100644
index 000000000..b3346ca52
--- /dev/null
+++ b/src/components/InputField.tsx
@@ -0,0 +1,38 @@
+import { FieldError } from "react-hook-form";
+
+type InputFieldProps = {
+ label: string;
+ type?: string;
+ register: any;
+ name: string;
+ defaultValue?: string;
+ error?: FieldError;
+ inputProps?: React.InputHTMLAttributes;
+}
+
+
+const InputField = ({
+ label,
+ type = "text",
+ register,
+ name,
+ defaultValue,
+ error,
+ inputProps
+}:InputFieldProps) => {
+ return (
+
+
{label}
+
+ {error?.message &&
{error?.message.toString()}
}
+
+ )
+}
+
+export default InputField
\ No newline at end of file
diff --git a/src/components/Menu.tsx b/src/components/Menu.tsx
index de074fa04..5c2dcb558 100644
--- a/src/components/Menu.tsx
+++ b/src/components/Menu.tsx
@@ -1,87 +1,61 @@
+import { role } from "@/lib/data";
+import Image from "next/image";
+import Link from "next/link";
+
const menuItems = [
{
title: "MENU",
items: [
{
- icon: "/home.png",
+ icon: "/homeBold.png",
label: "Home",
href: "/",
visible: ["admin", "teacher", "student", "parent"],
},
{
- icon: "/teacher.png",
+ icon: "/blackandwhite-belt.png",
label: "Teachers",
href: "/list/teachers",
visible: ["admin", "teacher"],
},
{
- icon: "/student.png",
- label: "Students",
+ icon: "/martial-arts.png",
+ label: "Members",
href: "/list/students",
visible: ["admin", "teacher"],
},
{
- icon: "/parent.png",
+ icon: "/parentBold.png",
label: "Parents",
href: "/list/parents",
visible: ["admin", "teacher"],
},
{
- icon: "/subject.png",
- label: "Subjects",
+ icon: "/box.png",
+ label: "Classes",
href: "/list/subjects",
visible: ["admin"],
},
{
- icon: "/class.png",
- label: "Classes",
- href: "/list/classes",
- visible: ["admin", "teacher"],
- },
- {
- icon: "/lesson.png",
- label: "Lessons",
- href: "/list/lessons",
- visible: ["admin", "teacher"],
- },
- {
- icon: "/exam.png",
- label: "Exams",
- href: "/list/exams",
- visible: ["admin", "teacher", "student", "parent"],
- },
- {
- icon: "/assignment.png",
- label: "Assignments",
- href: "/list/assignments",
- visible: ["admin", "teacher", "student", "parent"],
- },
- {
- icon: "/result.png",
+ icon: "/trophy.png",
label: "Results",
href: "/list/results",
visible: ["admin", "teacher", "student", "parent"],
},
{
- icon: "/attendance.png",
- label: "Attendance",
- href: "/list/attendance",
- visible: ["admin", "teacher", "student", "parent"],
- },
- {
- icon: "/calendar.png",
+ icon: "/schedule.png",
label: "Events",
href: "/list/events",
visible: ["admin", "teacher", "student", "parent"],
},
{
- icon: "/message.png",
+ icon: "/conversation.png",
label: "Messages",
href: "/list/messages",
visible: ["admin", "teacher", "student", "parent"],
},
{
- icon: "/announcement.png",
+ icon: "/marketing.png",
label: "Announcements",
href: "/list/announcements",
visible: ["admin", "teacher", "student", "parent"],
@@ -92,23 +66,51 @@ const menuItems = [
title: "OTHER",
items: [
{
- icon: "/profile.png",
+ icon: "/user.png",
label: "Profile",
href: "/profile",
visible: ["admin", "teacher", "student", "parent"],
},
{
- icon: "/setting.png",
+ icon: "/mechanism.png",
label: "Settings",
href: "/settings",
visible: ["admin", "teacher", "student", "parent"],
},
{
- icon: "/logout.png",
+ icon: "/switch.png",
label: "Logout",
href: "/logout",
visible: ["admin", "teacher", "student", "parent"],
},
],
},
-];
\ No newline at end of file
+];
+
+const Menu = () => {
+ return (
+
+ {menuItems.map(i=>(
+
+ {i.title}
+ {
+ i.items.map((item)=>{
+ if(item.visible.includes(role))
+ return(
+
+
+ {item.label}
+
+ )
+ })
+ }
+
+ ))}
+
+ )
+}
+
+export default Menu
\ No newline at end of file
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
new file mode 100644
index 000000000..855cafa7a
--- /dev/null
+++ b/src/components/Navbar.tsx
@@ -0,0 +1,31 @@
+import Image from "next/image"
+
+const Navbar = () => {
+ return (
+
+ {/* SEARCH BAR */}
+
+
+
+
+ {/* ICONS AND USER */}
+
+
+
+
+
+
+ John Doe
+ Admin
+
+
+
+
+
+ )
+}
+
+export default Navbar
\ No newline at end of file
diff --git a/src/components/Pagination.tsx b/src/components/Pagination.tsx
new file mode 100644
index 000000000..c91c5ec0d
--- /dev/null
+++ b/src/components/Pagination.tsx
@@ -0,0 +1,45 @@
+"use client";
+
+import { ITEMS_PER_PAGE } from "@/lib/settings";
+import { useRouter } from "next/navigation";
+
+const Pagination = ({page, count}:{page:number; count: number}) => {
+
+ const router = useRouter();
+
+ const changePage = (newPage:number) => {
+ const params = new URLSearchParams(window.location.search);
+ params.set("page",newPage.toString())
+ router.push(`${window.location.pathname}?${params}`)
+ }
+
+ return (
+
+
{changePage(page-1)}}>
+ Prev
+
+
+ {Array.from({ length: Math.ceil(count / ITEMS_PER_PAGE)},
+ (_, index)=>{
+ const pageIndex = index+1;
+ return {changePage(pageIndex)}}>
+
+ {pageIndex}
+
+ } )}
+
+
+
+
{changePage(page+1)}}>
+ Next
+
+
+ )
+}
+
+export default Pagination
\ No newline at end of file
diff --git a/src/components/Performance.tsx b/src/components/Performance.tsx
new file mode 100644
index 000000000..230ac8d7a
--- /dev/null
+++ b/src/components/Performance.tsx
@@ -0,0 +1,40 @@
+"use client";
+import Image from 'next/image';
+import { PieChart, Pie, Sector, Cell, ResponsiveContainer } from 'recharts';
+
+const data = [
+ { name: 'Group A', value: 92 , fill:"#C3EBFA"},
+ { name: 'Group B', value: 8, fill:"#FAE27C" },
+];
+
+const Performance = () => {
+ return (
+
+
+
Performance
+
+
+
+
+
+
+
+
+
1st Semester - 2nd Semester
+
+ )
+}
+
+export default Performance
\ No newline at end of file
diff --git a/src/components/Table.tsx b/src/components/Table.tsx
new file mode 100644
index 000000000..2c25a0bdb
--- /dev/null
+++ b/src/components/Table.tsx
@@ -0,0 +1,29 @@
+const Table = (
+ {
+ columns,
+ renderRow,
+ data
+ }:{
+ columns:{header:string; accessor:string; className?:string;}[];
+ renderRow:(item:any)=> React.ReactNode;
+ data:any[];
+ }) => {
+ return (
+
+
+
+ {columns.map(col=>(
+ {col.header}
+ ))}
+
+
+
+ {
+ data.map((item)=>renderRow(item))
+ }
+
+
+ )
+}
+
+export default Table
\ No newline at end of file
diff --git a/src/components/TableSearch.tsx b/src/components/TableSearch.tsx
new file mode 100644
index 000000000..c1ff060a8
--- /dev/null
+++ b/src/components/TableSearch.tsx
@@ -0,0 +1,12 @@
+import Image from "next/image";
+
+ const TableSearch = () => {
+ return (
+
+
+
+
+ )
+ }
+
+ export default TableSearch
\ No newline at end of file
diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx
new file mode 100644
index 000000000..e2dca1a30
--- /dev/null
+++ b/src/components/UserCard.tsx
@@ -0,0 +1,16 @@
+import Image from "next/image"
+
+const UserCard = ({type}:{type:string}) => {
+ return (
+
+
+ 2024/25
+
+
+
1,234
+
{type}
+
+ )
+}
+
+export default UserCard
\ No newline at end of file
diff --git a/src/components/forms/InstructorForm.tsx b/src/components/forms/InstructorForm.tsx
new file mode 100644
index 000000000..ec605dba6
--- /dev/null
+++ b/src/components/forms/InstructorForm.tsx
@@ -0,0 +1,160 @@
+"use client";
+
+import { zodResolver } from "@hookform/resolvers/zod";
+import { useForm } from "react-hook-form";
+import { z } from "zod";
+import InputField from "../InputField";
+import Image from "next/image";
+
+
+const schema = z.object({
+ username: z.string()
+ .min(3, { message: 'Username must be at least 3 character long!' })
+ .max(20, { message: 'Username must be max 20 character long!' }),
+ email: z.string()
+ .email({message:"invalid email address"}),
+ password: z.string()
+ .min(8, { message: 'Password must be at least 8 character long!' })
+ .max(40, { message: 'Password must be max 40 character long!' }),
+ bloodType: z.string().optional(),
+ firstName: z.string().min(1, {message:"FirstName field is required"}),
+ lastName: z.string().min(1, {message:"LastName field is required"}),
+ phone: z.string().min(1, {message:"Phone field is required"}),
+ address: z.string().min(1, {message:"Address field is required"}),
+ birthday: z.date({message:"Birthday field is required"}),
+ sex: z.enum(["male", "famale"], {message:"You need to choose"}),
+ img: z.instanceof(File, {message: "Image is Required"}),
+ });
+
+ type Inputs = z.infer;
+
+const InstructorForm = ({
+ type,
+ data
+ }:{
+ type:"create" | "update";
+ data?:any
+ }) => {
+
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: zodResolver(schema),
+ });
+
+
+ const onSubmit = handleSubmit(data=>{
+ console.log(data);
+ })
+
+
+ return (
+ <>
+
+ >
+ )
+}
+
+export default InstructorForm
\ No newline at end of file
diff --git a/src/components/forms/MemberForm.tsx b/src/components/forms/MemberForm.tsx
new file mode 100644
index 000000000..095c3c998
--- /dev/null
+++ b/src/components/forms/MemberForm.tsx
@@ -0,0 +1,160 @@
+"use client";
+
+import { zodResolver } from "@hookform/resolvers/zod";
+import { useForm } from "react-hook-form";
+import { z } from "zod";
+import InputField from "../InputField";
+import Image from "next/image";
+
+
+const schema = z.object({
+ username: z.string()
+ .min(3, { message: 'Username must be at least 3 character long!' })
+ .max(20, { message: 'Username must be max 20 character long!' }),
+ email: z.string()
+ .email({message:"invalid email address"}),
+ password: z.string()
+ .min(8, { message: 'Password must be at least 8 character long!' })
+ .max(40, { message: 'Password must be max 40 character long!' }),
+ bloodType: z.string().optional(),
+ firstName: z.string().min(1, {message:"FirstName field is required"}),
+ lastName: z.string().min(1, {message:"LastName field is required"}),
+ phone: z.string().min(1, {message:"Phone field is required"}),
+ address: z.string().min(1, {message:"Address field is required"}),
+ birthday: z.date({message:"Birthday field is required"}),
+ sex: z.enum(["male", "famale"], {message:"You need to choose"}),
+ img: z.instanceof(File, {message: "Image is Required"}),
+ });
+
+ type Inputs = z.infer;
+
+const MemberForm = ({
+ type,
+ data
+ }:{
+ type:"create" | "update";
+ data?:any
+ }) => {
+
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: zodResolver(schema),
+ });
+
+
+ const onSubmit = handleSubmit(data=>{
+ console.log(data);
+ })
+
+
+ return (
+ <>
+
+ >
+ )
+}
+
+export default MemberForm
\ No newline at end of file
diff --git a/src/lib/data.ts b/src/lib/data.ts
index 5fcd9281e..bb2ea229e 100644
--- a/src/lib/data.ts
+++ b/src/lib/data.ts
@@ -921,8 +921,8 @@ export const calendarEvents = [
{
title: "Math",
allDay: false,
- start: new Date(2024, 7, 12, 8, 0),
- end: new Date(2024, 7, 12, 8, 45),
+ start: new Date(2024, 9, 9, 8, 0),
+ end: new Date(2024, 9, 9, 8, 45),
},
{
title: "English",
@@ -1051,13 +1051,31 @@ export const calendarEvents = [
{
title: "Chemistry",
allDay: false,
- start: new Date(2024, 7, 16, 13, 0),
- end: new Date(2024, 7, 16, 13, 45),
+ start: new Date(2024, 8, 16, 18, 0),
+ end: new Date(2024, 8, 16, 19, 0),
},
{
title: "History",
allDay: false,
- start: new Date(2024, 7, 16, 14, 0),
- end: new Date(2024, 7, 16, 14, 45),
+ start: new Date(2024, 8, 16, 19, 0),
+ end: new Date(2024, 8, 16, 20, 0),
+ },
+ {
+ title: "HMD-Juniors",
+ allDay: false,
+ start: new Date(2024, 8, 23, 19, 0),
+ end: new Date(2024, 8, 23, 20, 0),
+ },
+ {
+ title: "HMD-Juniors",
+ allDay: false,
+ start: new Date(2024, 9, 2, 19, 0),
+ end: new Date(2024, 9, 2, 19, 30),
+ },
+ {
+ title: "HMD-BlackBelts",
+ allDay: false,
+ start: new Date(2024, 9, 2, 20, 30),
+ end: new Date(2024, 9, 2, 21, 0),
},
];
\ No newline at end of file
diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts
new file mode 100644
index 000000000..f31a86c9c
--- /dev/null
+++ b/src/lib/prisma.ts
@@ -0,0 +1,16 @@
+import { PrismaClient } from "@prisma/client";
+
+
+const prismaClientSingleton = () => {
+ return new PrismaClient();
+}
+
+declare const globalThis: {
+ prismaGlobal: ReturnType;
+}& typeof global;
+
+const prisma = globalThis.prismaGlobal ?? prismaClientSingleton()
+
+export default prisma
+
+if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma
\ No newline at end of file
diff --git a/src/lib/settings.ts b/src/lib/settings.ts
new file mode 100644
index 000000000..93fb84ec1
--- /dev/null
+++ b/src/lib/settings.ts
@@ -0,0 +1 @@
+export const ITEMS_PER_PAGE = 5;
\ No newline at end of file
diff --git a/tailwind.config.ts b/tailwind.config.ts
index e9a0944e7..1e0232165 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -13,6 +13,17 @@ const config: Config = {
"gradient-conic":
"conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
},
+ colors:{
+ zeidSky:"#C3EBFA",
+ zeidSkyLight:"#EDF9FD",
+ zeidPurple:"#CFCEFF",
+ zeidPurpleLight:"#F1F0FF",
+ zeidYellow:"#FAE27C",
+ zeidYellowLight:"#FEFCE8",
+ zeidBlue:"#302780",
+ zeidBlueLight:"#7e57eb",
+ zeidPink:"#de7ed6",
+ }
},
},
plugins: [],
diff --git a/tsconfig.json b/tsconfig.json
index 7b2858930..01731839a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,10 @@
{
"compilerOptions": {
- "lib": ["dom", "dom.iterable", "esnext"],
+ "lib": [
+ "dom",
+ "dom.iterable",
+ "esnext"
+ ],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
@@ -12,15 +16,27 @@
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
+ "checkJs": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
- "@/*": ["./src/*"]
- }
+ "@/*": [
+ "./src/*"
+ ]
+ },
+ "target": "ES2017"
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ "prisma/seed.js"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
}