From 0e43fa8d6e17a5665197aea686ab38a5e01a9471 Mon Sep 17 00:00:00 2001 From: Brian Mukuka Date: Sun, 8 Oct 2023 07:28:41 +0200 Subject: [PATCH] create account (#12) Co-authored-by: Olivier JM Maniraho --- .env | 0 .github/workflows/sanity.yml | 24 +- .gitignore | 1 + next.config.js | 7 +- package.json | 9 +- src/app/api/auth/[...nextauth]/route.ts | 6 + src/app/api/auth/[slug]/route.ts | 24 + src/app/api/auth/constants.ts | 62 ++ src/app/api/auth/signup.ts | 84 ++ src/app/api/db/auth/[...nextauth].ts | 65 -- src/app/api/lib/db/collections.ts | 8 + src/app/api/lib/db/index.ts | 37 + src/app/api/lib/db/realm.ts | 5 + src/app/api/{ => lib}/db/schema.ts | 188 ++-- src/app/api/lib/db/types.ts | 6 + src/app/auth/signup/page.tsx | 16 + src/app/custom.css | 55 +- src/app/layout.tsx | 29 +- src/app/links.ts | 5 + src/app/portal/page.tsx | 8 +- src/app/types/index.ts | 7 + src/components/LandingPage/index.tsx | 5 +- src/components/auth/constants.ts | 16 + src/components/auth/signup.tsx | 73 ++ src/components/auth/types.ts | 8 + src/components/layouts/guestLayout/index.tsx | 19 +- src/components/layouts/portalLayout/index.tsx | 30 + src/components/logo/index.tsx | 4 +- src/components/svgs/index.tsx | 10 +- src/hooks/useAuth/index.ts | 49 ++ src/hooks/useAuth/types.ts | 4 + src/utils/intl/index.ts | 24 + tsconfig.json | 48 +- yarn.lock | 824 +++++++++++++++++- 34 files changed, 1504 insertions(+), 256 deletions(-) create mode 100644 .env create mode 100644 src/app/api/auth/[...nextauth]/route.ts create mode 100644 src/app/api/auth/[slug]/route.ts create mode 100644 src/app/api/auth/constants.ts create mode 100644 src/app/api/auth/signup.ts delete mode 100644 src/app/api/db/auth/[...nextauth].ts create mode 100644 src/app/api/lib/db/collections.ts create mode 100644 src/app/api/lib/db/index.ts create mode 100644 src/app/api/lib/db/realm.ts rename src/app/api/{ => lib}/db/schema.ts (53%) create mode 100644 src/app/api/lib/db/types.ts create mode 100644 src/app/auth/signup/page.tsx create mode 100644 src/app/links.ts create mode 100644 src/app/types/index.ts create mode 100644 src/components/auth/constants.ts create mode 100644 src/components/auth/signup.tsx create mode 100644 src/components/auth/types.ts create mode 100644 src/components/layouts/portalLayout/index.tsx create mode 100644 src/hooks/useAuth/index.ts create mode 100644 src/hooks/useAuth/types.ts create mode 100644 src/utils/intl/index.ts diff --git a/.env b/.env new file mode 100644 index 00000000..e69de29b diff --git a/.github/workflows/sanity.yml b/.github/workflows/sanity.yml index 23c0ebdd..6d2c125a 100644 --- a/.github/workflows/sanity.yml +++ b/.github/workflows/sanity.yml @@ -5,13 +5,12 @@ name: Check code sanity on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: build: - runs-on: ubuntu-latest strategy: @@ -20,12 +19,13 @@ jobs: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: yarn install --frozen-lockfile - - run: yarn build - # - run: npm test + - name: 'setup env file' + run: | + echo "${{ secrets.ENV_FILE }}" > .env + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: yarn install --frozen-lockfile + - run: yarn build diff --git a/.gitignore b/.gitignore index 8f322f0d..9a868834 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts +mongodb-realm \ No newline at end of file diff --git a/next.config.js b/next.config.js index 56158c97..d3902c28 100644 --- a/next.config.js +++ b/next.config.js @@ -1,8 +1,9 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - env: { - REALM_APP_ID: "sparked-next-vbuim", - NEXTAUTH_URL: "https://example.com", + env: {}, + webpack: (config) => { + config.externals = [...config.externals, { realm: "realm" }]; // required to make realm + return config; }, }; diff --git a/package.json b/package.json index 19e736f9..6b8055e7 100644 --- a/package.json +++ b/package.json @@ -9,25 +9,32 @@ "lint": "next lint" }, "dependencies": { + "@auth/mongodb-adapter": "^2.0.0", "@headlessui/react": "^1.7.17", "@types/node": "20.5.0", "@types/react": "18.2.20", "@types/react-dom": "18.2.7", + "antd": "^5.9.2", + "axios": "^1.5.0", "eslint": "8.47.0", "eslint-config-next": "13.4.17", "flowbite": "^1.8.1", "flowbite-react": "^0.5.0", + "i18next": "^23.5.1", "mobx": "^6.10.0", "mobx-react-lite": "^4.0.3", + "mongodb": "^6.1.0", "next": "13.4.17", "next-auth": "^4.23.1", "react": "18.2.0", "react-dom": "18.2.0", "realm": "^12.1.0", - "typescript": "5.1.6" + "typescript": "5.1.6", + "zod-form-data": "^2.0.1" }, "devDependencies": { "autoprefixer": "^10.4.15", + "nodemailer": "^6.9.5", "postcss": "^8.4.28", "tailwindcss": "^3.3.3" } diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 00000000..bebc5cf3 --- /dev/null +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,6 @@ +import NextAuth from "next-auth" +import { authOptions } from "../constants"; + +const handler = NextAuth(authOptions); + +export { handler as GET, handler as POST } \ No newline at end of file diff --git a/src/app/api/auth/[slug]/route.ts b/src/app/api/auth/[slug]/route.ts new file mode 100644 index 00000000..669c6801 --- /dev/null +++ b/src/app/api/auth/[slug]/route.ts @@ -0,0 +1,24 @@ +import signup_ from "../signup"; + +const authApiHandler_ = async function GET( + request: Request, + { params }: { params: { slug: string } } +) { + const slug = params.slug; + + const authFunctions: { [key: string]: (request: Request) => {} } = { + signup: signup_, + }; + + if (authFunctions[slug]) { + return authFunctions[slug](request); + } else { + const response = { isError: true }; + + return new Response(JSON.stringify(response), { + status: 200, + }); + } +}; + +export { authApiHandler_ as POST }; diff --git a/src/app/api/auth/constants.ts b/src/app/api/auth/constants.ts new file mode 100644 index 00000000..5b7deb9e --- /dev/null +++ b/src/app/api/auth/constants.ts @@ -0,0 +1,62 @@ +import { MongoDBAdapter } from "@auth/mongodb-adapter"; +import NextAuth, { NextAuthOptions } from "next-auth"; +import EmailProvider from "next-auth/providers/email"; +import CredentialsProvider from "next-auth/providers/credentials"; +import mongoClientPromise from "../lib/db"; + +export const authOptions: NextAuthOptions = { + adapter: MongoDBAdapter(mongoClientPromise), + + + pages: { + signIn: "/auth/signin", + signOut: "/auth/signout", + error: "/auth/error", // Error code passed in query string as ?error= + verifyRequest: "/auth/verify-request", // (used for check email message) + newUser: "/auth/new-user", // New users will be directed here on first sign in (leave the property out if not of interest) + }, + + providers: [ + CredentialsProvider({ + // The name to display on the sign in form (e.g. "Sign in with...") + name: "Credentials", + // `credentials` is used to generate a form on the sign in page. + // You can specify which fields should be submitted, by adding keys to the `credentials` object. + // e.g. domain, username, password, 2FA token, etc. + // You can pass any HTML attribute to the tag through the object. + credentials: { + username: { label: "Username", type: "text", placeholder: "jsmith" }, + password: { label: "Password", type: "password" }, + }, + async authorize(credentials, req) { + // Add logic here to look up the user from the credentials supplied + const user = { id: "1", name: "J Smith", email: "jsmith@example.com" }; + + if (!user) { + // Any object returned will be saved in `user` property of the JWT + return user; + } else { + // If you return null then an error will be displayed advising the user to check their details. + return null; + + // You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter + } + }, + }), + EmailProvider({ + server: process.env.EMAIL_SERVER, + from: process.env.EMAIL_FROM, + }), + ], + theme: { + colorScheme: "light", + }, + callbacks: { + async jwt({ token }) { + token.userRole = "admin"; + return token; + }, + }, +}; + +export default NextAuth(authOptions); diff --git a/src/app/api/auth/signup.ts b/src/app/api/auth/signup.ts new file mode 100644 index 00000000..566eb36a --- /dev/null +++ b/src/app/api/auth/signup.ts @@ -0,0 +1,84 @@ +import { zfd } from "zod-form-data"; +import { realmApp } from "../lib/db/realm"; +import { dbClient } from "../lib/db"; +import { dbCollections } from "../lib/db/collections"; +import i18next from "i18next"; + +export default async function signup_(request: Request) { + const schema = zfd.formData({ + email: zfd.text(), + password: zfd.text(), + }); + const formBody = await request.json(); + + const { email, password } = schema.parse(formBody); + + try { + const db = await dbClient(); + + if (!db) { + const response = { + isError: true, + msg: i18next.t("home"), + }; + return new Response(JSON.stringify(response), { + status: 200, + }); + } + + const user = await db.collection(dbCollections.users.name).findOne({ + email, + }); + + if (user) { + const response = { + isError: true, + msg: i18next.t("user_exist"), + }; + return new Response(JSON.stringify(response), { + status: 200, + }); + } + + const resp = await realmApp.emailPasswordAuth.registerUser({ + email, + password, + }); + + //TODO: verify schema + await db.collection(dbCollections.users.name).insertOne({ + email, + is_verified: false, + created_at: new Date(), + }); + + const response = { + isError: false, + msg: i18next.t('user_created'), + email, + }; + + return new Response(JSON.stringify(response), { + status: 200, + }); + } catch (error) { + const errorCodeIndex = `${JSON.stringify(error)}`.lastIndexOf("code"); + + const code = + errorCodeIndex === -1 + ? 0 + : Number(`${error}`.substring(errorCodeIndex).match(/\d+/g)); + + const resp = { + isError: true, + msg: + code === 4348 + ? i18next.t("email_error") + : i18next.t('unknown_error'), + }; + + return new Response(JSON.stringify(resp), { + status: 200, + }); + } +} diff --git a/src/app/api/db/auth/[...nextauth].ts b/src/app/api/db/auth/[...nextauth].ts deleted file mode 100644 index bd74dac1..00000000 --- a/src/app/api/db/auth/[...nextauth].ts +++ /dev/null @@ -1,65 +0,0 @@ -import NextAuth, { NextAuthOptions } from "next-auth"; -import GoogleProvider from "next-auth/providers/google"; -import FacebookProvider from "next-auth/providers/facebook"; -import GithubProvider from "next-auth/providers/github"; -import TwitterProvider from "next-auth/providers/twitter"; -import Auth0Provider from "next-auth/providers/auth0"; -// import AppleProvider from "next-auth/providers/apple" -// import EmailProvider from "next-auth/providers/email" - -// For more information on each option (and a full list of options) go to -// https://next-auth.js.org/configuration/options -export const authOptions: NextAuthOptions = { - // https://next-auth.js.org/configuration/providers/oauth - providers: [ - /* EmailProvider({ - server: process.env.EMAIL_SERVER, - from: process.env.EMAIL_FROM, - }), - // Temporarily removing the Apple provider from the demo site as the - // callback URL for it needs updating due to Vercel changing domains - - Providers.Apple({ - clientId: process.env.APPLE_ID, - clientSecret: { - appleId: process.env.APPLE_ID, - teamId: process.env.APPLE_TEAM_ID, - privateKey: process.env.APPLE_PRIVATE_KEY, - keyId: process.env.APPLE_KEY_ID, - }, - }), - */ - FacebookProvider({ - clientId: process.env.FACEBOOK_ID || "", - clientSecret: process.env.FACEBOOK_SECRET || "", - }), - GithubProvider({ - clientId: process.env.GITHUB_ID || "", - clientSecret: process.env.GITHUB_SECRET || "", - }), - GoogleProvider({ - clientId: process.env.GOOGLE_ID || "", - clientSecret: process.env.GOOGLE_SECRET || "", - }), - TwitterProvider({ - clientId: process.env.TWITTER_ID || "", - clientSecret: process.env.TWITTER_SECRET || "", - }), - Auth0Provider({ - clientId: process.env.AUTH0_ID || "", - clientSecret: process.env.AUTH0_SECRET || "", - issuer: process.env.AUTH0_ISSUER, - }), - ], - theme: { - colorScheme: "light", - }, - callbacks: { - async jwt({ token }) { - token.userRole = "admin"; - return token; - }, - }, -}; - -export default NextAuth(authOptions); diff --git a/src/app/api/lib/db/collections.ts b/src/app/api/lib/db/collections.ts new file mode 100644 index 00000000..56383f8a --- /dev/null +++ b/src/app/api/lib/db/collections.ts @@ -0,0 +1,8 @@ +import { TdbCollection } from "./types"; + +export const dbCollections: TdbCollection = { + users: { + name: "users", + label: "Users", + }, +}; diff --git a/src/app/api/lib/db/index.ts b/src/app/api/lib/db/index.ts new file mode 100644 index 00000000..b95d75e1 --- /dev/null +++ b/src/app/api/lib/db/index.ts @@ -0,0 +1,37 @@ +import { MongoClient } from "mongodb"; + +if (!process.env.MONGODB_URI) { + throw new Error('Invalid/Missing environment variable: "MONGODB_URI"'); +} + +const uri = process.env.MONGODB_URI; +const options = {}; + +let client: MongoClient; +let mongoClientPromise: Promise; + +if (process.env.NODE_ENV === "development") { + //@ts-ignore + if (!global._mongomongoClientPromise) { + client = new MongoClient(uri, options); + //@ts-ignore + global._mongomongoClientPromise = client.connect(); + } + //@ts-ignore + mongoClientPromise = global._mongomongoClientPromise; +} else { + client = new MongoClient(uri, options); + mongoClientPromise = client.connect(); +} + +export const dbClient = async () => { + try { + const mongoClient = new MongoClient(uri, options); + const dbConnection = await mongoClient.connect(); + return dbConnection.db(process.env.MONGODB_DB); + } catch (error) { + return null; + } +}; + +export default mongoClientPromise; diff --git a/src/app/api/lib/db/realm.ts b/src/app/api/lib/db/realm.ts new file mode 100644 index 00000000..c4478991 --- /dev/null +++ b/src/app/api/lib/db/realm.ts @@ -0,0 +1,5 @@ +import Realm from "realm"; + +export const realmApp = new Realm.App({ + id: process.env.REALM_APP_ID as string, +}); diff --git a/src/app/api/db/schema.ts b/src/app/api/lib/db/schema.ts similarity index 53% rename from src/app/api/db/schema.ts rename to src/app/api/lib/db/schema.ts index 66c383d0..178fe5d2 100644 --- a/src/app/api/db/schema.ts +++ b/src/app/api/lib/db/schema.ts @@ -12,18 +12,18 @@ export type bookmarks = { }; export const bookmarksSchema = { - name: 'bookmarks', + name: "bookmarks", properties: { - _id: 'objectId', - color: 'string', - created_at: 'date', - description: 'string', - resource_id: 'objectId', - title: 'string', - updated_at: 'date?', - user_id: 'objectId', + _id: "objectId", + color: "string", + created_at: "date", + description: "string", + resource_id: "objectId", + title: "string", + updated_at: "date?", + user_id: "objectId", }, - primaryKey: '_id', + primaryKey: "_id", }; export type course_topics = { @@ -37,17 +37,17 @@ export type course_topics = { }; export const course_topicsSchema = { - name: 'course_topics', + name: "course_topics", properties: { - _id: 'objectId', - created_at: 'date', - created_by_id: 'objectId', - description: 'string', - name: 'string', - updated_at: 'date?', - updated_by_id: 'objectId?', + _id: "objectId", + created_at: "date", + created_by_id: "objectId", + description: "string", + name: "string", + updated_at: "date?", + updated_by_id: "objectId?", }, - primaryKey: '_id', + primaryKey: "_id", }; export type courses = { @@ -57,7 +57,7 @@ export type courses = { created_by_id: Realm.BSON.ObjectId; institutions_id?: Realm.BSON.ObjectId; is_visible?: boolean; - languages : Realm.List; + languages: Realm.List; name: string; program_id?: Realm.BSON.ObjectId; school_id?: Realm.BSON.ObjectId; @@ -66,33 +66,33 @@ export type courses = { }; export const coursesSchema = { - name: 'courses', + name: "courses", properties: { - _id: 'objectId', - code: 'string', - created_at: 'date', - created_by_id: 'objectId', - institutions_id: 'objectId?', - is_visible: 'bool?', - languages : 'courses_languages []', - name: 'string', - program_id: 'objectId?', - school_id: 'objectId?', - updated_at: 'date?', - updated_by_id: 'objectId?', + _id: "objectId", + code: "string", + created_at: "date", + created_by_id: "objectId", + institutions_id: "objectId?", + is_visible: "bool?", + languages: "courses_languages []", + name: "string", + program_id: "objectId?", + school_id: "objectId?", + updated_at: "date?", + updated_by_id: "objectId?", }, - primaryKey: '_id', + primaryKey: "_id", }; -export type courses_languages = { +export type courses_languages = { language_id?: string; }; export const courses_languagesSchema = { - name: 'courses_languages ', + name: "courses_languages ", embedded: true, properties: { - language_id: 'string?', + language_id: "string?", }, }; @@ -106,16 +106,16 @@ export type feed_back = { }; export const feed_backSchema = { - name: 'feed_back', + name: "feed_back", properties: { - _id: 'objectId?', - attachment_link: 'string?', - created_at: 'date?', - message: 'string?', - reported_by_id: 'objectId?', - updated_at: 'date?', + _id: "objectId?", + attachment_link: "string?", + created_at: "date?", + message: "string?", + reported_by_id: "objectId?", + updated_at: "date?", }, - primaryKey: '_id', + primaryKey: "_id", }; export type languages = { @@ -126,14 +126,14 @@ export type languages = { }; export const languagesSchema = { - name: 'languages', + name: "languages", properties: { - _id: 'objectId?', - code: 'string?', - label: 'string?', - name: 'string?', + _id: "objectId?", + code: "string?", + label: "string?", + name: "string?", }, - primaryKey: '_id', + primaryKey: "_id", }; export type preferences = { @@ -147,17 +147,17 @@ export type preferences = { }; export const preferencesSchema = { - name: 'preferences', + name: "preferences", properties: { - _id: 'objectId', - created_at: 'date?', - created_by_id: 'objectId?', - description: 'string?', - title: 'string?', - updated_at: 'date?', - updated_by_id: 'date?', + _id: "objectId", + created_at: "date?", + created_by_id: "objectId?", + description: "string?", + title: "string?", + updated_at: "date?", + updated_by_id: "date?", }, - primaryKey: '_id', + primaryKey: "_id", }; export type settings = { @@ -171,17 +171,17 @@ export type settings = { }; export const settingsSchema = { - name: 'settings', + name: "settings", properties: { - _id: 'objectId', - created_at: 'date', - created_by_id: 'objectId', - description: 'string?', - title: 'string', - upated_at: 'date?', - updated_by_id: 'objectId?', + _id: "objectId", + created_at: "date", + created_by_id: "objectId", + description: "string?", + title: "string", + upated_at: "date?", + updated_by_id: "objectId?", }, - primaryKey: '_id', + primaryKey: "_id", }; export type user_permissions = { @@ -196,23 +196,23 @@ export type user_permissions = { }; export const user_permissionsSchema = { - name: 'user_permissions', + name: "user_permissions", properties: { - _id: 'objectId', - created_at: 'date', - created_by_id: 'objectId', - description: 'string?', - label: 'string', - name: 'string', - updated_at: 'date?', - updated_by_id: 'objectId?', + _id: "objectId", + created_at: "date", + created_by_id: "objectId", + description: "string?", + label: "string", + name: "string", + updated_at: "date?", + updated_by_id: "objectId?", }, - primaryKey: '_id', + primaryKey: "_id", }; export type user_roles = { _id?: Realm.BSON.ObjectId; - created_by_id?: Realm.BSON.ObjectId; + created_by_id?: Realm.BSON.ObjectId; created_at?: Date; description?: string; label?: string; @@ -223,21 +223,17 @@ export type user_roles = { }; export const user_rolesSchema = { - name: 'user_roles', + name: "user_roles", properties: { - _id: 'objectId?', - created_by_id: 'objectId?', - created_at: 'date?', - description: 'string?', - label: 'string?', - name: 'string?', - permission_ids: 'user_permissions[]', - updated_at: 'date?', - updated_by_id: 'objectId?', + _id: "objectId?", + created_by_id: "objectId?", + created_at: "date?", + description: "string?", + label: "string?", + name: "string?", + permission_ids: "user_permissions[]", + updated_at: "date?", + updated_by_id: "objectId?", }, - primaryKey: '_id', -}; - - - - + primaryKey: "_id", +}; \ No newline at end of file diff --git a/src/app/api/lib/db/types.ts b/src/app/api/lib/db/types.ts new file mode 100644 index 00000000..31602d3c --- /dev/null +++ b/src/app/api/lib/db/types.ts @@ -0,0 +1,6 @@ +export type TdbCollection = { + [key: string]: { + name: string; + label: string; + }; +}; diff --git a/src/app/auth/signup/page.tsx b/src/app/auth/signup/page.tsx new file mode 100644 index 00000000..b885adaa --- /dev/null +++ b/src/app/auth/signup/page.tsx @@ -0,0 +1,16 @@ +"use client"; + +import Signup from "@components/auth/signup"; +import GuestLayout from "@components/layouts/guestLayout"; +import PortalLayout from "@components/layouts/portalLayout"; +import React from "react"; + +const Home: React.FC = (props) => { + return ( + + + + ); +}; + +export default Home; diff --git a/src/app/custom.css b/src/app/custom.css index f0bc50e1..c2dc72f1 100644 --- a/src/app/custom.css +++ b/src/app/custom.css @@ -1,54 +1,46 @@ -.logo{ - margin-top:-20px !important; +.logo { + margin-top: -20px !important; } -.landing-page-container{ - background-color:#FAF8F4 !important; - background-image:url('/landing-page-feature-image.png') ; +.landing-page-container { + background-color: #faf8f4 !important; + background-image: url("/landing-page-feature-image.png"); background-position: right; background-repeat: no-repeat; } -.guest-layout{ - +.guest-layout { } -.nav-bar{ - background-image:url('https://media.istockphoto.com/id/1085039192/vector/abstract-background-of-engineering-drawing-technological-wallpaper-made-with-circles-and.webp?b=1&s=612x612&w=0&k=20&c=GopWlnZX4z5n_DG5Sdx2iIouMZ-eSNbTjb462paNlFM='); +.nav-bar { + background-image: url("https://media.istockphoto.com/id/1085039192/vector/abstract-background-of-engineering-drawing-technological-wallpaper-made-with-circles-and.webp?b=1&s=612x612&w=0&k=20&c=GopWlnZX4z5n_DG5Sdx2iIouMZ-eSNbTjb462paNlFM="); background-position: left; background-repeat: no-repeat; - background-size: cover; - - - + background-size: cover; } .nav-bar::before { - content: ''; + content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100 %; - background-color: rgba(0, 0, 0, 0.034); + background-color: rgba(0, 0, 0, 0.034); } - -.landing-page-plain-card{ +.landing-page-plain-card { } -.landing-page-main-card-container{ - margin-top:110px; - - +.landing-page-main-card-container { + margin-top: 110px; } - .project-card { margin: 1em; height: 50px; width: 300px; - background-color:#EC975F; + background-color: #ec975f; position: relative; overflow: hidden; } @@ -58,11 +50,22 @@ width: 300px; padding: 0.3rem 90px; box-sizing: border-box; - background-color: #7471F0; + background-color: #7471f0; transform: rotateZ(-45deg); top: 0; left: 0; transform-origin: 150px 150px; text-align: center; - color:white -} \ No newline at end of file + color: white; +} + +.auth-card { + background-color: #f0f0f0; + margin: 30px; + min-height: 80%; + max-width: 80%; +} + +.auth-container { + margin: 0 auto; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index ab7ac6de..452ae267 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,24 +1,27 @@ -import './globals.css' -import "./custom.css"; -import type { Metadata } from 'next' -import { Inter } from 'next/font/google' +"use client"; -const inter = Inter({ subsets: ['latin'] }) +import { SessionProvider } from "next-auth/react"; +import { Inter } from "next/font/google"; +import "./custom.css"; +import "./globals.css"; +import "utils/intl"; -export const metadata: Metadata = { - title: "SparkEd", - description: - "Software for organizing and presenting educational and training content for delivery on most platforms", -}; +const inter = Inter({ subsets: ["latin"] }); export default function RootLayout({ children, + pageProps, }: { - children: React.ReactNode + children: React.ReactNode; + pageProps?: any; }) { return ( - {children} + + + {children} + + - ) + ); } diff --git a/src/app/links.ts b/src/app/links.ts new file mode 100644 index 00000000..6549946b --- /dev/null +++ b/src/app/links.ts @@ -0,0 +1,5 @@ +import { Tlink } from "./types"; + +export const API_LINKS: Tlink = { + SIGNUP: "/api/auth/signup", +}; diff --git a/src/app/portal/page.tsx b/src/app/portal/page.tsx index 4bf5a9ae..e761be39 100644 --- a/src/app/portal/page.tsx +++ b/src/app/portal/page.tsx @@ -1,10 +1,14 @@ "use client"; -import LandingPage from "@components/LandingPage"; +import PortalLayout from "@components/layouts/portalLayout"; import React from "react"; const Home: React.FC = (props) => { - return ; + return ( + +

Login

+
+ ); }; export default Home; diff --git a/src/app/types/index.ts b/src/app/types/index.ts new file mode 100644 index 00000000..ba07ba63 --- /dev/null +++ b/src/app/types/index.ts @@ -0,0 +1,7 @@ +export type Tlink = { + [key:string]:string +} + + + + diff --git a/src/components/LandingPage/index.tsx b/src/components/LandingPage/index.tsx index 48c1d12b..e7f6711d 100644 --- a/src/components/LandingPage/index.tsx +++ b/src/components/LandingPage/index.tsx @@ -5,16 +5,15 @@ import { Button, Card } from "flowbite-react"; import GuestLayout from "../layouts/guestLayout"; import { CourseBasedSvgImage, EducationSvgImage, UniversitySvgImage } from "@components/svgs"; - - const LandingPage:React.FC = ()=> { + return (

- Presenting Educational And Training Content With Passion And AI. + Presenting Educational And Training Content With Passion And AI.{" "}

diff --git a/src/components/auth/constants.ts b/src/components/auth/constants.ts new file mode 100644 index 00000000..a59d8258 --- /dev/null +++ b/src/components/auth/constants.ts @@ -0,0 +1,16 @@ +import { IsignupFormFields } from "./types"; +import i18next from "i18next"; + +export const SIGNUP_FORM_FIELDS: IsignupFormFields = { + ["email"]: { + label: i18next.t("email"), + key: "email", + errorMsg: i18next.t("email_error"), + }, + + ["password"]: { + label: i18next.t("password"), + key: "password", + errorMsg: i18next.t("password_error"), + }, +}; diff --git a/src/components/auth/signup.tsx b/src/components/auth/signup.tsx new file mode 100644 index 00000000..4dc19746 --- /dev/null +++ b/src/components/auth/signup.tsx @@ -0,0 +1,73 @@ +import { Col, Form, Input, Row } from "antd"; +import i18next from "i18next"; +import { CourseBasedSvgImage } from "@components/svgs"; +import { Card } from "antd"; +import { Button } from "flowbite-react"; +import { SIGNUP_FORM_FIELDS } from "./constants"; +import useAuth from "@hooks/useAuth"; + +const onFinishFailed = (errorInfo: any) => {}; + +const Signup: React.FC = () => { + const { handleSignup } = useAuth(); + + return ( + + + + + + + +
+ + + + + + + + + + + +
+
+ +
+ ); +}; + +export default Signup; diff --git a/src/components/auth/types.ts b/src/components/auth/types.ts new file mode 100644 index 00000000..2edfefa5 --- /dev/null +++ b/src/components/auth/types.ts @@ -0,0 +1,8 @@ +export interface IsignupFormFields { + [key: string]: { + label: string; + key: string; + errorMsg?: string; + }; +} + diff --git a/src/components/layouts/guestLayout/index.tsx b/src/components/layouts/guestLayout/index.tsx index baea18cb..aba83f72 100644 --- a/src/components/layouts/guestLayout/index.tsx +++ b/src/components/layouts/guestLayout/index.tsx @@ -1,10 +1,16 @@ "use client"; -import { ReactNode, FC } from "react"; -import { Navbar } from "flowbite-react"; import AppLogo from "@components/logo"; +import { Navbar } from "flowbite-react"; +import { FC, ReactNode } from "react"; + +import useAuth from "@hooks/useAuth"; + +const GuestLayout: FC<{ + children: ReactNode; +}> = ({ children }) => { + const { isAuthenticated } = useAuth(); -const GuestLayout: FC<{ children: ReactNode }> = ({ children }) => { return (
@@ -17,9 +23,10 @@ const GuestLayout: FC<{ children: ReactNode }> = ({ children }) => { Home About - Services - Pricing - Contact + Resources + {!isAuthenticated && ( + Login | Sign up + )} {children} diff --git a/src/components/layouts/portalLayout/index.tsx b/src/components/layouts/portalLayout/index.tsx new file mode 100644 index 00000000..1e65781b --- /dev/null +++ b/src/components/layouts/portalLayout/index.tsx @@ -0,0 +1,30 @@ +"use client"; + +import { ReactNode, FC } from "react"; +import { Navbar } from "flowbite-react"; +import AppLogo from "@components/logo"; + +const PortalLayout: FC<{ children: ReactNode }> = ({ children }) => { + return ( +
+ + + + + + + + Home + + About + Services + Pricing + Contact + + + {children} +
+ ); +}; + +export default PortalLayout; diff --git a/src/components/logo/index.tsx b/src/components/logo/index.tsx index 3f92adae..151e856f 100644 --- a/src/components/logo/index.tsx +++ b/src/components/logo/index.tsx @@ -1,7 +1,5 @@ - import Image from "next/image"; - const AppLogo = () => (
(
); -export default AppLogo; \ No newline at end of file +export default AppLogo; diff --git a/src/components/svgs/index.tsx b/src/components/svgs/index.tsx index ab86e25f..0ed030d0 100644 --- a/src/components/svgs/index.tsx +++ b/src/components/svgs/index.tsx @@ -5,9 +5,13 @@ import UniversitySvg from "@components/svgs/assets/undraw_educator_re_ju47.svg"; import EducationSvg from "@components/svgs/assets/undraw_education_f8ru.svg"; import Image from "next/image"; -export const CourseBasedSvgImage =() =>( - -); +export const CourseBasedSvgImage = ({ + width = 100, + height = 100, +}: { + width?: number; + height?: number; +}) => ; export const UniversitySvgImage = () => ( ); diff --git a/src/hooks/useAuth/index.ts b/src/hooks/useAuth/index.ts new file mode 100644 index 00000000..210a6d78 --- /dev/null +++ b/src/hooks/useAuth/index.ts @@ -0,0 +1,49 @@ +import { message } from "antd"; +import { API_LINKS } from "app/links"; +import { useSession } from "next-auth/react"; +import { TsignupFields } from "./types"; +import i18next from "i18next"; + +const useAuth = () => { + const { data: session, status } = useSession(); + + const isAuthenticated = status === "authenticated"; + + const handleSignup = async (fields: TsignupFields) => { + const url = API_LINKS.SIGNUP; + const formData = { + body: JSON.stringify({ ...fields }), + method: "post", + headers: { + "Content-Type": "application/json", + }, + }; + + try { + const resp = await fetch(url, formData); + + if (!resp.ok) { + message.warning(i18next.t('unknown_error')); + return false; + } + + const responseData = await resp.json(); + + if (responseData.isError) { + message.warning(responseData.msg); + return false; + } + message.success(responseData.msg); + } catch (err: any) { + message.error(`${i18next.t("unknown_error")}. ${err.msg ? err.msg : ""}`); + return false; + } + }; + + return { + isAuthenticated, + handleSignup, + }; +}; + +export default useAuth; diff --git a/src/hooks/useAuth/types.ts b/src/hooks/useAuth/types.ts new file mode 100644 index 00000000..798b5584 --- /dev/null +++ b/src/hooks/useAuth/types.ts @@ -0,0 +1,4 @@ +export type TsignupFields = { + email: string; + password: string; +}; diff --git a/src/utils/intl/index.ts b/src/utils/intl/index.ts new file mode 100644 index 00000000..1bae4506 --- /dev/null +++ b/src/utils/intl/index.ts @@ -0,0 +1,24 @@ +import i18next from "i18next"; + + i18next.init({ + lng: "en", // if you're using a language detector, do not define the lng option + debug: true, + resources: { + en: { + translation: { + home: "Home", + signup: "Sign Up", + email: "Email", + password: "Password", + form: "Form", + email_error: "Please input your email", + password_error: "Please input your password!", + unknown_error: "Sorry something went wrong", + user_created: "Account successfully created", + user_exist: "Sorry account already exits", + user_exist2: "Sorry account already exits. Please sign in", + }, + }, + }, +}); + diff --git a/tsconfig.json b/tsconfig.json index c3513327..76ade3f9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,11 @@ "compilerOptions": { "baseUrl": "./src", "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -20,19 +24,33 @@ } ], "paths": { - "@/*": ["./src/*",], - "@components/*": [ - "components/*" - ], - "@hooks/*": [ - "hooks/*" - ], - "@state/*": [ - "state/*" - ], - + "@/*": [ + "./src/*", + ], + "@components/*": [ + "components/*" + ], + "@hooks/*": [ + "hooks/*" + ], + "@state/*": [ + "state/*" + ], + "@app/api*": [ + "app/api*" + ], + "@app/api/lib*": [ + "app/api/lib*" + ], } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 832539e9..3e04ffa8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,13 +12,94 @@ resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== -"@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7": +"@ant-design/colors@^7.0.0": + version "7.0.0" + resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.0.0.tgz#eb7eecead124c3533aea05d61254f0a17f2b61b3" + integrity sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg== + dependencies: + "@ctrl/tinycolor" "^3.4.0" + +"@ant-design/cssinjs@^1.16.0": + version "1.17.0" + resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.17.0.tgz#a3f69cf5131539b76ccdbfced43d242557599fea" + integrity sha512-MgGCZ6sfD3yQB0XW0hN4jgixMxApTlDYyct+pc7fRZNO4CaqWWm/9iXkkljNR27lyWLZmm+XiDfcIOo1bnrnMA== + dependencies: + "@babel/runtime" "^7.11.1" + "@emotion/hash" "^0.8.0" + "@emotion/unitless" "^0.7.5" + classnames "^2.3.1" + csstype "^3.0.10" + rc-util "^5.35.0" + stylis "^4.0.13" + +"@ant-design/icons-svg@^4.3.0": + version "4.3.1" + resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz#4b2f65a17d4d32b526baa6414aca2117382bf8da" + integrity sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g== + +"@ant-design/icons@^5.2.2": + version "5.2.6" + resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.2.6.tgz#2d4a9a37f531eb2a20cebec01d6fb69cf593900d" + integrity sha512-4wn0WShF43TrggskBJPRqCD0fcHbzTYjnaoskdiJrVHg86yxoZ8ZUqsXvyn4WUqehRiFKnaclOhqk9w4Ui2KVw== + dependencies: + "@ant-design/colors" "^7.0.0" + "@ant-design/icons-svg" "^4.3.0" + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-util "^5.31.1" + +"@ant-design/react-slick@~1.0.0": + version "1.0.2" + resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.0.2.tgz#241bb412aeacf7ff5d50c61fa5db66773fde6b56" + integrity sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ== + dependencies: + "@babel/runtime" "^7.10.4" + classnames "^2.2.5" + json2mq "^0.2.0" + resize-observer-polyfill "^1.5.1" + throttle-debounce "^5.0.0" + +"@auth/core@0.14.0": + version "0.14.0" + resolved "https://registry.npmmirror.com/@auth/core/-/core-0.14.0.tgz#d898cd87b47b4354d42e81e7d74c6274a19ad170" + integrity sha512-kZMwjFWDGxSI/e4+HO6KeTmuMFMWu6qIzgF1k87HbKdxNFis3K1PXz7md3fCB4+5ije93Uld1ZNUdlmB2rAHww== + dependencies: + "@panva/hkdf" "^1.0.4" + cookie "0.5.0" + jose "^4.11.1" + oauth4webapi "^2.0.6" + preact "10.11.3" + preact-render-to-string "5.2.3" + +"@auth/mongodb-adapter@^2.0.0": + version "2.0.0" + resolved "https://registry.npmmirror.com/@auth/mongodb-adapter/-/mongodb-adapter-2.0.0.tgz#b9373ce64ed9364d6e46174a4f77f3b2f64cec51" + integrity sha512-uEcGA2ijIK7lBIINLS337c/RNCQiH/GVm/yKAziGuctjlsLEb6odnF2eq3wm3rO0aNB73vIwem15n8kWhEIw7Q== + dependencies: + "@auth/core" "0.14.0" + +"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5": version "7.22.15" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" +"@ctrl/tinycolor@^3.4.0", "@ctrl/tinycolor@^3.6.0": + version "3.6.1" + resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/unitless@^0.7.5": + version "0.7.5" + resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -145,6 +226,13 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@mongodb-js/saslprep@^1.1.0": + version "1.1.0" + resolved "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz#022fa36620a7287d17acd05c4aae1e5f390d250d" + integrity sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw== + dependencies: + sparse-bitfield "^3.0.3" + "@next/env@13.4.17": version "13.4.17" resolved "https://registry.npmmirror.com/@next/env/-/env-13.4.17.tgz#65d51e87918ec10b8d5ee154c7ddfe94c85da89e" @@ -223,7 +311,7 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@panva/hkdf@^1.0.2": +"@panva/hkdf@^1.0.2", "@panva/hkdf@^1.0.4": version "1.1.1" resolved "https://registry.npmmirror.com/@panva/hkdf/-/hkdf-1.1.1.tgz#ab9cd8755d1976e72fc77a00f7655a64efe6cd5d" integrity sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA== @@ -233,6 +321,73 @@ resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== +"@rc-component/color-picker@~1.4.1": + version "1.4.1" + resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.4.1.tgz#dcab0b660e9c4ed63a7582db68ed4a77c862cb93" + integrity sha512-vh5EWqnsayZa/JwUznqDaPJz39jznx/YDbyBuVJntv735tKXKwEUZZb2jYEldOg+NKWZwtALjGMrNeGBmqFoEw== + dependencies: + "@babel/runtime" "^7.10.1" + "@ctrl/tinycolor" "^3.6.0" + classnames "^2.2.6" + rc-util "^5.30.0" + +"@rc-component/context@^1.4.0": + version "1.4.0" + resolved "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz#dc6fb021d6773546af8f016ae4ce9aea088395e8" + integrity sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w== + dependencies: + "@babel/runtime" "^7.10.1" + rc-util "^5.27.0" + +"@rc-component/mini-decimal@^1.0.1": + version "1.1.0" + resolved "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz#7b7a362b14a0a54cb5bc6fd2b82731f29f11d9b0" + integrity sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ== + dependencies: + "@babel/runtime" "^7.18.0" + +"@rc-component/mutate-observer@^1.1.0": + version "1.1.0" + resolved "https://registry.npmmirror.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz#ee53cc88b78aade3cd0653609215a44779386fd8" + integrity sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.0-9", "@rc-component/portal@^1.0.2", "@rc-component/portal@^1.1.0", "@rc-component/portal@^1.1.1": + version "1.1.2" + resolved "https://registry.npmmirror.com/@rc-component/portal/-/portal-1.1.2.tgz#55db1e51d784e034442e9700536faaa6ab63fc71" + integrity sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rc-component/tour@~1.10.0": + version "1.10.0" + resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.10.0.tgz#b05bc327438f1c583439e2d2dcc10ec0530aea19" + integrity sha512-voV0BKaTJbewB9LLgAHQ7tAGG7rgDkKQkZo82xw2gIk542hY+o7zwoqdN16oHhIKk7eG/xi+mdXrONT62Dt57A== + dependencies: + "@babel/runtime" "^7.18.0" + "@rc-component/portal" "^1.0.0-9" + "@rc-component/trigger" "^1.3.6" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rc-component/trigger@^1.0.4", "@rc-component/trigger@^1.15.6", "@rc-component/trigger@^1.3.6", "@rc-component/trigger@^1.5.0", "@rc-component/trigger@^1.6.2", "@rc-component/trigger@^1.7.0": + version "1.15.6" + resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-1.15.6.tgz#ccb71f16229e832e15b3869817cbe24f5e59b54c" + integrity sha512-Tl19KaGsShf4yzqxumsXVT4c7j0l20Dxe5hgP5S0HmxyhCg3oKen28ntGavRCIPW7cl7wgsGotntqcIokgDHzg== + dependencies: + "@babel/runtime" "^7.18.3" + "@rc-component/portal" "^1.1.0" + classnames "^2.3.2" + rc-align "^4.0.0" + rc-motion "^2.0.0" + rc-resize-observer "^1.3.1" + rc-util "^5.33.0" + "@rushstack/eslint-patch@^1.1.3": version "1.3.3" resolved "https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69" @@ -250,6 +405,11 @@ resolved "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/node@*": + version "20.6.3" + resolved "https://registry.npmmirror.com/@types/node/-/node-20.6.3.tgz#5b763b321cd3b80f6b8dde7a37e1a77ff9358dd9" + integrity sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA== + "@types/node@20.5.0": version "20.5.0" resolved "https://registry.npmmirror.com/@types/node/-/node-20.5.0.tgz#7fc8636d5f1aaa3b21e6245e97d56b7f56702313" @@ -290,6 +450,19 @@ resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== +"@types/webidl-conversions@*": + version "7.0.0" + resolved "https://registry.npmmirror.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7" + integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog== + +"@types/whatwg-url@^8.2.1": + version "8.2.2" + resolved "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" + integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== + dependencies: + "@types/node" "*" + "@types/webidl-conversions" "*" + "@typescript-eslint/parser@^5.4.2 || ^6.0.0": version "6.6.0" resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.6.0.tgz#fe323a7b4eafb6d5ea82b96216561810394a739e" @@ -367,6 +540,60 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +antd@^5.9.2: + version "5.9.2" + resolved "https://registry.npmmirror.com/antd/-/antd-5.9.2.tgz#16dc2120523245a471afd2bc684611ef64b18ac0" + integrity sha512-+ecGt8nDCjvNvKkalJQc4eBGtfdQuZ/WLXrk7X4FbhAhMplctrey4/SOvHeXjEjBnyNC/KSdF4EzKYKq01egbA== + dependencies: + "@ant-design/colors" "^7.0.0" + "@ant-design/cssinjs" "^1.16.0" + "@ant-design/icons" "^5.2.2" + "@ant-design/react-slick" "~1.0.0" + "@babel/runtime" "^7.18.3" + "@ctrl/tinycolor" "^3.6.0" + "@rc-component/color-picker" "~1.4.1" + "@rc-component/mutate-observer" "^1.1.0" + "@rc-component/tour" "~1.10.0" + "@rc-component/trigger" "^1.15.6" + classnames "^2.2.6" + copy-to-clipboard "^3.2.0" + dayjs "^1.11.1" + qrcode.react "^3.1.0" + rc-cascader "~3.16.0" + rc-checkbox "~3.1.0" + rc-collapse "~3.7.1" + rc-dialog "~9.2.0" + rc-drawer "~6.4.1" + rc-dropdown "~4.1.0" + rc-field-form "~1.38.0" + rc-image "~7.2.0" + rc-input "~1.1.1" + rc-input-number "~8.0.4" + rc-mentions "~2.7.0" + rc-menu "~9.12.0" + rc-motion "^2.9.0" + rc-notification "~5.1.1" + rc-pagination "~3.6.1" + rc-picker "~3.14.1" + rc-progress "~3.5.1" + rc-rate "~2.12.0" + rc-resize-observer "^1.3.1" + rc-segmented "~2.2.2" + rc-select "~14.8.1" + rc-slider "~10.2.1" + rc-steps "~6.0.1" + rc-switch "~4.1.0" + rc-table "~7.34.0" + rc-tabs "~12.12.1" + rc-textarea "~1.3.4" + rc-tooltip "~6.0.1" + rc-tree "~5.7.10" + rc-tree-select "~5.12.1" + rc-upload "~4.3.4" + rc-util "^5.37.0" + scroll-into-view-if-needed "^3.0.3" + throttle-debounce "^5.0.0" + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -423,6 +650,11 @@ array-includes@^3.1.6: get-intrinsic "^1.2.1" is-string "^1.0.7" +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -487,6 +719,11 @@ ast-types-flow@^0.0.7: resolved "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +async-validator@^4.1.0: + version "4.2.5" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + asynciterator.prototype@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" @@ -494,6 +731,11 @@ asynciterator.prototype@^1.0.0: dependencies: has-symbols "^1.0.3" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + autoprefixer@^10.4.15: version "10.4.15" resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" @@ -516,6 +758,15 @@ axe-core@^4.6.2: resolved "https://registry.npmmirror.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== +axios@^1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" + integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.1.1: version "3.2.1" resolved "https://registry.npmmirror.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -579,6 +830,11 @@ bson@^4.7.2: dependencies: buffer "^5.6.0" +bson@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/bson/-/bson-6.1.0.tgz#ea7c98b90540e1632173da6b1f70187827e6ae8c" + integrity sha512-yiQ3KxvpVoRpx1oD1uPz4Jit9tAVTJgjdmjDKtUErkOoL9VNoF8Dd58qtAOL5E40exx2jvAT9sqdRSK/r+SHlA== + buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -645,7 +901,7 @@ chownr@^1.1.1: resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -classnames@^2.2.6: +classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2: version "2.3.2" resolved "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -667,21 +923,40 @@ color-name@~1.1.4: resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^4.0.0: version "4.1.1" resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +compute-scroll-into-view@^3.0.2: + version "3.0.3" + resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz#c418900a5c56e2b04b885b54995df164535962b1" + integrity sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -cookie@^0.5.0: +cookie@0.5.0, cookie@^0.5.0: version "0.5.0" resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +copy-to-clipboard@^3.2.0: + version "3.3.3" + resolved "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -696,7 +971,7 @@ cssesc@^3.0.0: resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@^3.0.2: +csstype@^3.0.10, csstype@^3.0.2: version "3.1.2" resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== @@ -706,6 +981,11 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +dayjs@^1.11.1: + version "1.11.10" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + debounce@^1.2.0: version "1.2.1" resolved "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" @@ -750,6 +1030,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + dequal@^2.0.3: version "2.0.3" resolved "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" @@ -791,6 +1076,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-align@^1.7.0: + version "1.12.4" + resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511" + integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw== + easy-bem@^1.1.1: version "1.1.1" resolved "https://registry.npmmirror.com/easy-bem/-/easy-bem-1.1.1.tgz#1bfcc10425498090bcfddc0f9c000aba91399e03" @@ -1219,6 +1509,11 @@ flowbite@^1.6.6, flowbite@^1.8.1: "@popperjs/core" "^2.9.3" mini-svg-data-uri "^1.4.3" +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -1226,6 +1521,15 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fraction.js@^4.2.0: version "4.3.6" resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d" @@ -1435,6 +1739,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +i18next@^23.5.1: + version "23.5.1" + resolved "https://registry.npmmirror.com/i18next/-/i18next-23.5.1.tgz#7f7c35ffaa907618d9489f106d5006b09fbca3d3" + integrity sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg== + dependencies: + "@babel/runtime" "^7.22.5" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -1681,7 +1992,7 @@ jiti@^1.18.2: resolved "https://registry.npmmirror.com/jiti/-/jiti-1.19.3.tgz#ef554f76465b3c2b222dc077834a71f0d4a37569" integrity sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w== -jose@^4.11.4, jose@^4.14.4: +jose@^4.11.1, jose@^4.11.4, jose@^4.14.4: version "4.14.6" resolved "https://registry.npmmirror.com/jose/-/jose-4.14.6.tgz#94dca1d04a0ad8c6bff0998cdb51220d473cc3af" integrity sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ== @@ -1713,6 +2024,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== + dependencies: + string-convert "^0.2.0" + json5@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -1793,6 +2111,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -1806,6 +2129,18 @@ micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -1845,6 +2180,23 @@ mobx@^6.10.0: resolved "https://registry.npmmirror.com/mobx/-/mobx-6.10.2.tgz#96e123deef140750360ca9a5b02a8b91fbffd4d9" integrity sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ== +mongodb-connection-string-url@^2.6.0: + version "2.6.0" + resolved "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" + integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== + dependencies: + "@types/whatwg-url" "^8.2.1" + whatwg-url "^11.0.0" + +mongodb@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/mongodb/-/mongodb-6.1.0.tgz#5144bee74d50746f7b0ed68dbb974f31e1b40900" + integrity sha512-AvzNY0zMkpothZ5mJAaIo2bGDjlJQqqAbn9fvtVgwIIUPEfdrqGxqNjjbuKyrgQxg2EvCmfWdjq+4uj96c0YPw== + dependencies: + "@mongodb-js/saslprep" "^1.1.0" + bson "^6.1.0" + mongodb-connection-string-url "^2.6.0" + ms@2.1.2: version "2.1.2" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1942,6 +2294,11 @@ node-releases@^2.0.13: resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +nodemailer@^6.9.5: + version "6.9.5" + resolved "https://registry.npmmirror.com/nodemailer/-/nodemailer-6.9.5.tgz#eaeae949c62ec84ef1e9128df89fc146a1017aca" + integrity sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -1952,6 +2309,11 @@ normalize-range@^0.1.2: resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +oauth4webapi@^2.0.6: + version "2.3.0" + resolved "https://registry.npmmirror.com/oauth4webapi/-/oauth4webapi-2.3.0.tgz#d01aeb83b60dbe3ff9ef1c6ec4a39e29c7be7ff6" + integrity sha512-JGkb5doGrwzVDuHwgrR4nHJayzN4h59VCed6EW8Tql6iHDfZIabCJvg6wtbn5q6pyB2hZruI3b77Nudvq7NmvA== + oauth@^0.9.15: version "0.9.15" resolved "https://registry.npmmirror.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" @@ -2199,6 +2561,13 @@ postcss@^8.4.23, postcss@^8.4.28: picocolors "^1.0.0" source-map-js "^1.0.2" +preact-render-to-string@5.2.3: + version "5.2.3" + resolved "https://registry.npmmirror.com/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz#23d17376182af720b1060d5a4099843c7fe92fe4" + integrity sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA== + dependencies: + pretty-format "^3.8.0" + preact-render-to-string@^5.1.19: version "5.2.6" resolved "https://registry.npmmirror.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604" @@ -2206,6 +2575,11 @@ preact-render-to-string@^5.1.19: dependencies: pretty-format "^3.8.0" +preact@10.11.3: + version "10.11.3" + resolved "https://registry.npmmirror.com/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19" + integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg== + preact@^10.6.3: version "10.17.1" resolved "https://registry.npmmirror.com/preact/-/preact-10.17.1.tgz#0a1b3c658c019e759326b9648c62912cf5c2dde1" @@ -2248,6 +2622,11 @@ prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pump@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -2256,16 +2635,381 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +qrcode.react@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" + integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +rc-align@^4.0.0: + version "4.0.15" + resolved "https://registry.npmmirror.com/rc-align/-/rc-align-4.0.15.tgz#2bbd665cf85dfd0b0244c5a752b07565e9098577" + integrity sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + dom-align "^1.7.0" + rc-util "^5.26.0" + resize-observer-polyfill "^1.5.1" + +rc-cascader@~3.16.0: + version "3.16.0" + resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.16.0.tgz#baba55510f8411f6dc1bf0432714c9618be77c07" + integrity sha512-c62glOhm66T0/Y8vOfIgZwHHTbqCyC7FvBTcNDuwbXZc8Dfbz6fB1yIuCB55z5rPA7nsUfMyNNuS8shReZWM+A== + dependencies: + "@babel/runtime" "^7.12.5" + array-tree-filter "^2.1.0" + classnames "^2.3.1" + rc-select "~14.8.0" + rc-tree "~5.7.0" + rc-util "^5.35.0" + +rc-checkbox@~3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.1.0.tgz#6be0d9d8de2cc96fb5e37f9036a1c3e360d0a42d" + integrity sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.3.2" + rc-util "^5.25.2" + +rc-collapse@~3.7.1: + version "3.7.1" + resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.7.1.tgz#bda1f7f80adccf3433c1c15d4d9f9ca09910c727" + integrity sha512-N/7ejyiTf3XElNJBBpxqnZBUuMsQWEOPjB2QkfNvZ/Ca54eAvJXuOD1EGbCWCk2m7v/MSxku7mRpdeaLOCd4Gg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.3.4" + rc-util "^5.27.0" + +rc-dialog@~9.2.0: + version "9.2.0" + resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.2.0.tgz#94236a410a3698f2aefcb34e49cec8f7064c7235" + integrity sha512-dL2tklMou/QfK77+0CTH3FTnKCvIiYv9Df7PfFfg8YVXhYAGmuIkV4ooQYHAIR4juL3Ywcm5oQflF2vDDuGlUg== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-8" + classnames "^2.2.6" + rc-motion "^2.3.0" + rc-util "^5.21.0" + +rc-drawer@~6.4.1: + version "6.4.1" + resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-6.4.1.tgz#823b0072c1b50136ea9d35b37dd21cffcbdaf96d" + integrity sha512-QIbNMjiZy322o9uEpJHsSZ5rS/zuxqam3lYVPDzjztoqsoDzTNNxWN77QVpOfQ0UC9/87+qu25zocJ+O9bK2Tg== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.1.1" + classnames "^2.2.6" + rc-motion "^2.6.1" + rc-util "^5.36.0" + +rc-dropdown@~4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.1.0.tgz#418a68939631520de80d0865d02b440eeeb4168e" + integrity sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw== + dependencies: + "@babel/runtime" "^7.18.3" + "@rc-component/trigger" "^1.7.0" + classnames "^2.2.6" + rc-util "^5.17.0" + +rc-field-form@~1.38.0: + version "1.38.1" + resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.38.1.tgz#43e590336e582d186a1de112c70800910c1d0a77" + integrity sha512-94MswI+I1/RtSg1j4z64dWopGYkSWVfRKLMaZtN6UfHcVfNiXqGPIs/cDf7I2fraRdbxLsXQb6caZ2olfqXdGg== + dependencies: + "@babel/runtime" "^7.18.0" + async-validator "^4.1.0" + rc-util "^5.32.2" + +rc-image@~7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/rc-image/-/rc-image-7.2.0.tgz#81feabf9b381b0f10f362f1e35d66f7ddb400ab2" + integrity sha512-5Ug2hCVl6VcT0osR5XaZQ4zclTMEWPnbn3b4/TS/MR1QjRpEACLNFUzBGwr5mbAVhzvLWX5YZf4vO10xUA5IUA== + dependencies: + "@babel/runtime" "^7.11.2" + "@rc-component/portal" "^1.0.2" + classnames "^2.2.6" + rc-dialog "~9.2.0" + rc-motion "^2.6.2" + rc-util "^5.34.1" + +rc-input-number@~8.0.4: + version "8.0.4" + resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-8.0.4.tgz#d33cfe4126e10f4771fe11a40797222c76d6598f" + integrity sha512-TP+G5b7mZtbwXJ/YEZXF/OgbEZ6iqD4+RSuxZJ8VGKGXDcdt0FKIvpFoNQr/knspdFC4OxA0OfsWfFWfN4XSyA== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/mini-decimal" "^1.0.1" + classnames "^2.2.5" + rc-input "~1.1.0" + rc-util "^5.28.0" + +rc-input@~1.1.0, rc-input@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.1.1.tgz#af33b49272220f6d42852d21b22e84c2dc1a87e6" + integrity sha512-NTR1Z4em681L8/ewb2KR80RykSmN8I2mzqzJDCoUmTrV1BB9Hk5d7ha4TnfgdEPPL148N+603sW2LExSXk1IbA== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.18.1" + +rc-mentions@~2.7.0: + version "2.7.0" + resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.7.0.tgz#d9bbed62696cfd0f21b20abc03b4c5cc4c01445b" + integrity sha512-tn0x79cpnVYP+MA+jyBqalmEni9Ct7xHuA9QHIf5vwd25FU+hngGZ8n6Dfua7XCr4LhkZYjfD/rZTGrvY2C1Xg== + dependencies: + "@babel/runtime" "^7.22.5" + "@rc-component/trigger" "^1.5.0" + classnames "^2.2.6" + rc-input "~1.1.0" + rc-menu "~9.12.0" + rc-textarea "~1.3.0" + rc-util "^5.34.1" + +rc-menu@~9.12.0: + version "9.12.0" + resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.12.0.tgz#4d5c9c57a7658d50256a4000c3bc6260021c7541" + integrity sha512-Apr/fRf5EcqWJ4nphHV6dTGZcLPaPzwY44q9hAtLJysY4rkC9Eg+ekj3uFx6opPWVruV2sJNWq/Po+HHtO48CA== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^1.6.2" + classnames "2.x" + rc-motion "^2.4.3" + rc-overflow "^1.3.1" + rc-util "^5.27.0" + +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.0, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0: + version "2.9.0" + resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.0.tgz#9e18a1b8d61e528a97369cf9a7601e9b29205710" + integrity sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.21.0" + +rc-notification@~5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.1.1.tgz#62b38890575a1726ed6c1dd0e10caf4ce45a9e69" + integrity sha512-BPnded/WmWFE57ubqhVCgRSuedfQQNeSOYqdwppyr2B/Wt909gYFKyWAkFJVXuppAjsOGop05a93UaxjmUFdkg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.6.0" + rc-util "^5.20.1" + +rc-overflow@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.2.tgz#72ee49e85a1308d8d4e3bd53285dc1f3e0bcce2c" + integrity sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.37.0" + +rc-pagination@~3.6.1: + version "3.6.1" + resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-3.6.1.tgz#2db6678a57cd2f4f29d6c0416e282543af52d0df" + integrity sha512-R/sUnKKXx1Nm4kZfUKS3YKa7yEPF1ZkVB/AynQaHt+nMER7h9wPTfliDJFdYo+RM/nk2JD4Yc5QpUq8fIQHeug== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-util "^5.32.2" + +rc-picker@~3.14.1: + version "3.14.2" + resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-3.14.2.tgz#47b0279e9f9638676e731e8b4e5c4b58c0c8d6a4" + integrity sha512-+jKWhKydU2z5hgY0yenHQRx2nRLrHiRdPD8f2+Yg5ld6+Ah/mh1tV9ya1OPcEMqbqXCZXnKqqBv4mAEQm1oAyQ== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^1.5.0" + classnames "^2.2.1" + rc-util "^5.30.0" + +rc-progress@~3.5.1: + version "3.5.1" + resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.5.1.tgz#a3cdfd2fe04eb5c3d43fa1c69e7dd70c73b102ae" + integrity sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-util "^5.16.1" + +rc-rate@~2.12.0: + version "2.12.0" + resolved "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.12.0.tgz#0182deffed3b009cdcc61660da8746c39ed91ed5" + integrity sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.0.1" + +rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz#b61b9f27048001243617b81f95e53d7d7d7a6a3d" + integrity sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg== + dependencies: + "@babel/runtime" "^7.20.7" + classnames "^2.2.1" + rc-util "^5.27.0" + resize-observer-polyfill "^1.5.1" + +rc-segmented@~2.2.2: + version "2.2.2" + resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.2.2.tgz#a34f12ce6c0975fc3042ae7656bcd18e1744798e" + integrity sha512-Mq52M96QdHMsNdE/042ibT5vkcGcD5jxKp7HgPC2SRofpia99P5fkfHy1pEaajLMF/kj0+2Lkq1UZRvqzo9mSA== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-motion "^2.4.4" + rc-util "^5.17.0" + +rc-select@~14.8.0, rc-select@~14.8.1: + version "14.8.1" + resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.8.1.tgz#c97f8cade80eff9a4270fad0de6cf96495a5889a" + integrity sha512-+MDaHteiKRL4iID9Osm8zAZTe+g7/t5CjIfJJ4QhPAvwGUaNCa2kvkMqiXfOfGevscVa+agha1Ov938MeAotfQ== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^1.5.0" + classnames "2.x" + rc-motion "^2.0.1" + rc-overflow "^1.3.1" + rc-util "^5.16.1" + rc-virtual-list "^3.5.2" + +rc-slider@~10.2.1: + version "10.2.1" + resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-10.2.1.tgz#9b571d19f740adcacdde271f44901a47717fd8da" + integrity sha512-l355C/65iV4UFp7mXq5xBTNX2/tF2g74VWiTVlTpNp+6vjE/xaHHNiQq5Af+Uu28uUiqCuH/QXs5HfADL9KJ/A== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.27.0" + +rc-steps@~6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz#c2136cd0087733f6d509209a84a5c80dc29a274d" + integrity sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g== + dependencies: + "@babel/runtime" "^7.16.7" + classnames "^2.2.3" + rc-util "^5.16.1" + +rc-switch@~4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/rc-switch/-/rc-switch-4.1.0.tgz#f37d81b4e0c5afd1274fd85367b17306bf25e7d7" + integrity sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg== + dependencies: + "@babel/runtime" "^7.21.0" + classnames "^2.2.1" + rc-util "^5.30.0" + +rc-table@~7.34.0: + version "7.34.2" + resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.34.2.tgz#2037e10733672a84ddc733f45509f98adeafffb0" + integrity sha512-btFZOC0ZdtDXoUuFgQkmID9o8XJvpt1PRUKZZ5Nec0lXp6E5rcUZ/+ZDbnXlq17Fwz+8+3wr2O0aZ7kihJd5Nw== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/context" "^1.4.0" + classnames "^2.2.5" + rc-resize-observer "^1.1.0" + rc-util "^5.36.0" + rc-virtual-list "^3.10.7" + +rc-tabs@~12.12.1: + version "12.12.1" + resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-12.12.1.tgz#8639297bfcbbf77ca05f71d73fc3d31bd05e04d8" + integrity sha512-e10VBjEkECdPl4XZSs9to81SE+mgclBTM7J8/LMsFqmJoi05Tci91bRnmeeDtrcOCx2PuZdJv57XUlC4d8PEIw== + dependencies: + "@babel/runtime" "^7.11.2" + classnames "2.x" + rc-dropdown "~4.1.0" + rc-menu "~9.12.0" + rc-motion "^2.6.2" + rc-resize-observer "^1.0.0" + rc-util "^5.34.1" + +rc-textarea@~1.3.0, rc-textarea@~1.3.4: + version "1.3.4" + resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.3.4.tgz#e77baf2202ac8f7e34a50ec9e15dd1dcb1501455" + integrity sha512-wn0YjTpvcVolcfXa0HtzL+jgV2QcwtfB29RwNAKj8hMgZOju1V24M3TfEDjABeQEAQbUGbjMbISREOX/YSVKhg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-input "~1.1.0" + rc-resize-observer "^1.0.0" + rc-util "^5.27.0" + +rc-tooltip@~6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.0.1.tgz#6a5e33bd6c3f6afe8851ea90e7af43e5c26b3cc6" + integrity sha512-MdvPlsD1fDSxKp9+HjXrc/CxLmA/s11QYIh1R7aExxfodKP7CZA++DG1AjrW80F8IUdHYcR43HAm0Y2BYPelHA== + dependencies: + "@babel/runtime" "^7.11.2" + "@rc-component/trigger" "^1.0.4" + classnames "^2.3.1" + +rc-tree-select@~5.12.1: + version "5.12.1" + resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.12.1.tgz#18529549fed46d863dadd0bb11eb3f98ea5f9425" + integrity sha512-/IC6gRgRoUBCOwZASOiF3onp1484fb+Gke5zuxgsi3ViP+O2UTUByS1jTZzjNooidRgdwiQJksq1zVaVYw2TPg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-select "~14.8.0" + rc-tree "~5.7.0" + rc-util "^5.16.1" + +rc-tree@~5.7.0, rc-tree@~5.7.10: + version "5.7.12" + resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.7.12.tgz#6910e551390963708936c2cbf925f9deff4a6d76" + integrity sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.5.1" + +rc-upload@~4.3.4: + version "4.3.4" + resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.3.4.tgz#83ff7d3867631c37adbfd72ea3d1fd7e97ca84af" + integrity sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ== + dependencies: + "@babel/runtime" "^7.18.3" + classnames "^2.2.5" + rc-util "^5.2.0" + +rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.26.0, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.33.0, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0: + version "5.37.0" + resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.37.0.tgz#6df9a55cb469b41b6995530a45b5f3dd3219a4ea" + integrity sha512-cPMV8DzaHI1KDaS7XPRXAf4J7mtBqjvjikLpQieaeOO7+cEbqY2j7Kso/T0R0OiEZTNcLS/8Zl9YrlXiO9UbjQ== + dependencies: + "@babel/runtime" "^7.18.3" + react-is "^16.12.0" + +rc-virtual-list@^3.10.7, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: + version "3.10.8" + resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.10.8.tgz#53492d90659d900ebb9196cb2903f0c397ed9999" + integrity sha512-QUdQ09KVz60KULJaFF51dDA3hpVAMtN9M+qbTDIARKhBb0TPG8s3ifQUuuhbe4I4lQ3G11wB5qJudN1zi8sgkA== + dependencies: + "@babel/runtime" "^7.20.0" + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.36.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -2298,7 +3042,7 @@ react-indiana-drag-scroll@^2.2.0: debounce "^1.2.0" easy-bem "^1.1.1" -react-is@^16.13.1: +react-is@^16.12.0, react-is@^16.13.1: version "16.13.1" resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -2370,6 +3114,11 @@ regexp.prototype.flags@^1.5.0: define-properties "^1.2.0" functions-have-names "^1.2.3" +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2448,6 +3197,13 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" +scroll-into-view-if-needed@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz#fa9524518c799b45a2ef6bbffb92bcad0296d01f" + integrity sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ== + dependencies: + compute-scroll-into-view "^3.0.2" + semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -2505,11 +3261,23 @@ source-map-js@^1.0.2: resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== + dependencies: + memory-pager "^1.0.2" + streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== + string.prototype.matchall@^4.0.8: version "4.0.9" resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz#148779de0f75d36b13b15885fec5cadde994520d" @@ -2587,6 +3355,11 @@ styled-jsx@5.1.1: dependencies: client-only "0.0.1" +stylis@^4.0.13: + version "4.3.0" + resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" + integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== + sucrase@^3.32.0: version "3.34.0" resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" @@ -2695,6 +3468,11 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +throttle-debounce@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933" + integrity sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2702,6 +3480,18 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -2848,6 +3638,19 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -2933,6 +3736,11 @@ yocto-queue@^0.1.0: resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zod-form-data@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/zod-form-data/-/zod-form-data-2.0.1.tgz#b069b76ad8a47e2ee475f691db87db8afa9dd3f2" + integrity sha512-4jcsj3vFyFGINLLHEmehfOPKdcw+HqV65RwsV2IdyLHp9wpvGJRVXWg1yY8sq0ASEbQfTVBRtI7LcDGv3Qpj8g== + zod@3.21.4: version "3.21.4" resolved "https://registry.npmmirror.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"