diff --git a/.gitignore b/.gitignore
index 45c1abce86..ff34c2007c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
/node_modules
/.pnp
.pnp.js
+.yarn/install-state.gz
# testing
/coverage
@@ -34,3 +35,4 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+node_modules
diff --git a/README.md b/README.md
index a75ac52488..c4033664f8 100644
--- a/README.md
+++ b/README.md
@@ -16,11 +16,7 @@ bun dev
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
-
-[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
-
-The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
diff --git a/app/folder/page.tsx b/app/folder/page.tsx
new file mode 100644
index 0000000000..266c9740e0
--- /dev/null
+++ b/app/folder/page.tsx
@@ -0,0 +1,31 @@
+import { Footer } from "@/src/components/Footer";
+import { Header } from "@/src/components/Header";
+import LinkManager from "@/src/components/LinkManager/LinkManager";
+import { END_POINT } from "@/src/constants";
+import getFormattedLinks from "@/src/utils/getFormattedLinks";
+
+async function getFetchData(url: string) {
+ try {
+ const res = await fetch(url);
+ const result = await res.json();
+ return result;
+ } catch (error) {
+ if (error instanceof Error) {
+ console.error(error.message);
+ }
+ }
+}
+
+export default async function FolderPage() {
+ const linksData = await getFetchData(END_POINT.LINKS);
+ const links = getFormattedLinks(linksData.data);
+ const favorites = await getFetchData(END_POINT.FOLDERS);
+
+ return (
+ <>
+
+
+
+ >
+ );
+}
diff --git a/app/layout.tsx b/app/layout.tsx
new file mode 100644
index 0000000000..574a50d0b0
--- /dev/null
+++ b/app/layout.tsx
@@ -0,0 +1,15 @@
+import "@/src/styles/global.scss";
+import { ReactNode } from "react";
+
+export const metadata = {
+ title: "Linkbrary",
+ description: "bokeeey weeklyMission",
+};
+
+export default function RootLayout({ children }: { children: ReactNode }) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/app/page.module.scss b/app/page.module.scss
new file mode 100644
index 0000000000..93fd4944ec
--- /dev/null
+++ b/app/page.module.scss
@@ -0,0 +1,3 @@
+.input {
+ padding: 200px;
+}
diff --git a/app/page.tsx b/app/page.tsx
new file mode 100644
index 0000000000..952ff39cf4
--- /dev/null
+++ b/app/page.tsx
@@ -0,0 +1,12 @@
+import Auth from "@/src/components/Auth/Auth";
+import styles from "./page.module.scss";
+
+export default function Home() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/app/shared/page.tsx b/app/shared/page.tsx
new file mode 100644
index 0000000000..2bf8826e03
--- /dev/null
+++ b/app/shared/page.tsx
@@ -0,0 +1,31 @@
+import { Footer } from "@/src/components/Footer";
+import { Header } from "@/src/components/Header";
+import LinkManager from "@/src/components/LinkManager/LinkManager";
+import { END_POINT } from "@/src/constants";
+
+async function getFetchData(url: string) {
+ try {
+ const res = await fetch(url);
+ const result = await res.json();
+ return result;
+ } catch (error) {
+ if (error instanceof Error) {
+ console.error(error.message);
+ }
+ }
+}
+
+export default async function sharedPage() {
+ const sharedPageDatas = await getFetchData(END_POINT.SHARED_LINKS);
+
+ return (
+ <>
+
+
+
+ >
+ );
+}
diff --git a/app/signin/page.tsx b/app/signin/page.tsx
new file mode 100644
index 0000000000..b75a0881bc
--- /dev/null
+++ b/app/signin/page.tsx
@@ -0,0 +1,13 @@
+// import Auth from "@/src/components/Auth/Auth";
+// import AuthHookForm from "@/src/components/Auth/AuthHookForm";
+import SignInForm from "@/src/components/Auth/SignInForm/SignInForm";
+
+export default function signinPage() {
+ return (
+ <>
+ {/* */}
+ {/* */}
+
+ >
+ );
+}
diff --git a/next.config.mjs b/next.config.mjs
new file mode 100644
index 0000000000..c75839f89e
--- /dev/null
+++ b/next.config.mjs
@@ -0,0 +1,80 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ images: {
+ // domains는 권장하지 않는 스타일
+ // domains: ["codeit-images.codeit.com"],
+ remotePatterns: [
+ // folder page images
+ {
+ protocol: "https",
+ hostname: "codeit-images.codeit.com",
+ },
+ {
+ protocol: "https",
+ hostname: "yt3.googleusercontent.com",
+ },
+ {
+ protocol: "https",
+ hostname: "assets.vercel.com",
+ },
+ {
+ protocol: "https",
+ hostname: "s.pstatic.net",
+ },
+ {
+ protocol: "https",
+ hostname: "storage.googleapis.com",
+ },
+ {
+ protocol: "https",
+ hostname: "i1.daumcdn.net",
+ },
+ {
+ protocol: "https",
+ hostname: "website-prisma.vercel.app",
+ },
+ {
+ protocol: "https",
+ hostname: "testing-library.com",
+ },
+ {
+ protocol: "https",
+ hostname: "storybook.js.org",
+ },
+ {
+ protocol: "https",
+ hostname: "github.com",
+ },
+ {
+ protocol: "https",
+ hostname: "legacy.reactjs.org",
+ },
+ {
+ protocol: "https",
+ hostname: "codeit.kr",
+ },
+
+ // shared page images
+ {
+ protocol: "https",
+ hostname: "codeit-frontend.codeit.com",
+ },
+ {
+ protocol: "https",
+ hostname: "reactjs.org",
+ },
+ {
+ protocol: "https",
+ hostname: "tanstack.com",
+ },
+ {
+ protocol: "https",
+ hostname: "static.cdninstagram.com",
+ },
+ ],
+ },
+
+ output: "standalone",
+};
+
+export default nextConfig;
diff --git a/package-lock.json b/package-lock.json
index cf7d23a80c..c38ec6c160 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11 +1,11 @@
{
- "name": "fe-weekly-mission",
+ "name": "4-weekly-mission",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "fe-weekly-mission",
+ "name": "4-weekly-mission",
"version": "0.1.0",
"dependencies": {
"@nextui-org/skeleton": "^2.0.27",
@@ -23,7 +23,8 @@
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint": "^8",
- "eslint-config-next": "13.5.6",
+ "eslint-config-next": "14.1.4",
+ "sass": "^1.72.0",
"typescript": "^5"
}
},
@@ -84,9 +85,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -107,22 +108,22 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.54.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
- "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
+ "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,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.13",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
- "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.1",
- "debug": "^4.1.1",
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
"minimatch": "^3.0.5"
},
"engines": {
@@ -143,9 +144,9 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
- "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
"dev": true
},
"node_modules/@isaacs/cliui": {
@@ -251,13 +252,62 @@
"integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==",
"dev": true,
"dependencies": {
- "glob": "7.1.7"
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz",
+ "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ=="
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz",
+ "integrity": "sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "10.3.10"
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz",
- "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz",
+ "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==",
"cpu": [
"arm64"
],
@@ -270,9 +320,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz",
- "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz",
+ "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==",
"cpu": [
"x64"
],
@@ -285,9 +335,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz",
- "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz",
+ "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==",
"cpu": [
"arm64"
],
@@ -300,9 +350,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz",
- "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz",
+ "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==",
"cpu": [
"arm64"
],
@@ -315,9 +365,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz",
- "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz",
+ "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==",
"cpu": [
"x64"
],
@@ -330,9 +380,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz",
- "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz",
+ "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==",
"cpu": [
"x64"
],
@@ -345,9 +395,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz",
- "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz",
+ "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==",
"cpu": [
"arm64"
],
@@ -360,9 +410,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz",
- "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz",
+ "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==",
"cpu": [
"ia32"
],
@@ -375,9 +425,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz",
- "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz",
+ "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==",
"cpu": [
"x64"
],
@@ -529,9 +579,9 @@
}
},
"node_modules/@rushstack/eslint-patch": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz",
- "integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.9.0.tgz",
+ "integrity": "sha512-AAWymnpvHbGty1BmgbdfbqQDboXs6xN6h2yAacO4yKVyyUUBnpYkp+P9jjPrV9zrAGw7JVVriRtGOHPInnfjZQ==",
"dev": true
},
"node_modules/@swc/helpers": {
@@ -598,56 +648,49 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.9.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz",
- "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==",
+ "version": "20.11.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz",
+ "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@types/prop-types": {
- "version": "15.7.11",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
- "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
+ "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
},
"node_modules/@types/react": {
- "version": "18.2.38",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.38.tgz",
- "integrity": "sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==",
+ "version": "18.2.73",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz",
+ "integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
- "@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/react-dom": {
- "version": "18.2.17",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz",
- "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==",
+ "version": "18.2.22",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz",
+ "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==",
"dev": true,
"dependencies": {
"@types/react": "*"
}
},
- "node_modules/@types/scheduler": {
- "version": "0.16.8",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
- "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
- "dev": true
- },
"node_modules/@typescript-eslint/parser": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.12.0.tgz",
- "integrity": "sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "6.12.0",
- "@typescript-eslint/types": "6.12.0",
- "@typescript-eslint/typescript-estree": "6.12.0",
- "@typescript-eslint/visitor-keys": "6.12.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
"debug": "^4.3.4"
},
"engines": {
@@ -667,13 +710,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.12.0.tgz",
- "integrity": "sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+ "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.12.0",
- "@typescript-eslint/visitor-keys": "6.12.0"
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -684,9 +727,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.12.0.tgz",
- "integrity": "sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
+ "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -697,16 +740,17 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.12.0.tgz",
- "integrity": "sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+ "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.12.0",
- "@typescript-eslint/visitor-keys": "6.12.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
"semver": "^7.5.4",
"ts-api-utils": "^1.0.1"
},
@@ -723,13 +767,37 @@
}
}
},
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.12.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.12.0.tgz",
- "integrity": "sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+ "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.12.0",
+ "@typescript-eslint/types": "6.21.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -747,9 +815,9 @@
"dev": true
},
"node_modules/acorn": {
- "version": "8.11.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -845,28 +913,32 @@
}
},
"node_modules/array-buffer-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
- "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/array-includes": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
- "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
"is-string": "^1.0.7"
},
"engines": {
@@ -885,17 +957,38 @@
"node": ">=8"
}
},
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/array.prototype.findlastindex": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz",
- "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.2.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -940,31 +1033,44 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/array.prototype.tosorted": {
+ "node_modules/array.prototype.toreversed": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz",
- "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==",
+ "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz",
+ "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
"es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.2.1"
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz",
+ "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.1.0",
+ "es-shim-unscopables": "^1.0.2"
}
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
"dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
"is-shared-array-buffer": "^1.0.2"
},
"engines": {
@@ -980,20 +1086,14 @@
"integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
"dev": true
},
- "node_modules/asynciterator.prototype": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz",
- "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==",
- "dev": true,
- "dependencies": {
- "has-symbols": "^1.0.3"
- }
- },
"node_modules/available-typed-arrays": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
- "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -1035,6 +1135,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1068,14 +1180,19 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1100,9 +1217,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001564",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz",
- "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==",
+ "version": "1.0.30001600",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
+ "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
"funding": [
{
"type": "opencollective",
@@ -1272,9 +1389,9 @@
}
},
"node_modules/csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"dev": true
},
"node_modules/damerau-levenshtein": {
@@ -1283,6 +1400,57 @@
"integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
"dev": true
},
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -1316,17 +1484,20 @@
}
},
"node_modules/define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-properties": {
@@ -1403,9 +1574,9 @@
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
},
"node_modules/enhanced-resolve": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
- "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
+ "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -1416,50 +1587,57 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
+ "version": "1.23.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz",
+ "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
"is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
+ "is-shared-array-buffer": "^1.0.3",
"is-string": "^1.0.7",
- "is-typed-array": "^1.1.12",
+ "is-typed-array": "^1.1.13",
"is-weakref": "^1.0.2",
"object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
"string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.5",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
+ "which-typed-array": "^1.1.15"
},
"engines": {
"node": ">= 0.4"
@@ -1468,37 +1646,73 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-iterator-helpers": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz",
- "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==",
+ "version": "1.0.18",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz",
+ "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==",
"dev": true,
"dependencies": {
- "asynciterator.prototype": "^1.0.0",
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"define-properties": "^1.2.1",
- "es-abstract": "^1.22.1",
- "es-set-tostringtag": "^2.0.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
+ "internal-slot": "^1.0.7",
"iterator.prototype": "^1.1.2",
- "safe-array-concat": "^1.0.1"
+ "safe-array-concat": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -1543,16 +1757,16 @@
}
},
"node_modules/eslint": {
- "version": "8.54.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
- "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.54.0",
- "@humanwhocodes/config-array": "^0.11.13",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
@@ -1598,12 +1812,12 @@
}
},
"node_modules/eslint-config-next": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz",
- "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.4.tgz",
+ "integrity": "sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==",
"dev": true,
"dependencies": {
- "@next/eslint-plugin-next": "13.5.6",
+ "@next/eslint-plugin-next": "14.1.4",
"@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
"eslint-import-resolver-node": "^0.3.6",
@@ -1669,9 +1883,9 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
- "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
"dev": true,
"dependencies": {
"debug": "^3.2.7"
@@ -1695,9 +1909,9 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
- "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
"dev": true,
"dependencies": {
"array-includes": "^3.1.7",
@@ -1716,7 +1930,7 @@
"object.groupby": "^1.0.1",
"object.values": "^1.1.7",
"semver": "^6.3.1",
- "tsconfig-paths": "^3.14.2"
+ "tsconfig-paths": "^3.15.0"
},
"engines": {
"node": ">=4"
@@ -1786,27 +2000,29 @@
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.33.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
- "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
+ "version": "7.34.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz",
+ "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
+ "array-includes": "^3.1.7",
+ "array.prototype.findlast": "^1.2.4",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.toreversed": "^1.1.2",
+ "array.prototype.tosorted": "^1.1.3",
"doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.12",
+ "es-iterator-helpers": "^1.0.17",
"estraverse": "^5.3.0",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
+ "object.entries": "^1.1.7",
+ "object.fromentries": "^2.0.7",
+ "object.hasown": "^1.1.3",
+ "object.values": "^1.1.7",
"prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
+ "resolve": "^2.0.0-next.5",
"semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
+ "string.prototype.matchall": "^4.0.10"
},
"engines": {
"node": ">=4"
@@ -2067,9 +2283,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/for-each": {
@@ -2152,28 +2368,33 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
"dependencies": {
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
@@ -2183,9 +2404,9 @@
}
},
"node_modules/get-tsconfig": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
- "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
+ "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
"dev": true,
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
@@ -2195,20 +2416,22 @@
}
},
"node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dev": true,
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": "*"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -2225,15 +2448,34 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -2322,21 +2564,21 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -2358,12 +2600,12 @@
}
},
"node_modules/has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"dependencies": {
- "has-symbols": "^1.0.2"
+ "has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
@@ -2384,9 +2626,9 @@
}
},
"node_modules/ignore": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
- "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -2439,12 +2681,12 @@
"dev": true
},
"node_modules/internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
+ "es-errors": "^1.3.0",
"hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
@@ -2453,14 +2695,16 @@
}
},
"node_modules/is-array-buffer": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
- "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2549,6 +2793,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-date-object": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -2620,18 +2879,21 @@
}
},
"node_modules/is-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -2689,21 +2951,27 @@
}
},
"node_modules/is-set": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2740,12 +3008,12 @@
}
},
"node_modules/is-typed-array": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
"dev": true,
"dependencies": {
- "which-typed-array": "^1.1.11"
+ "which-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
@@ -2755,10 +3023,13 @@
}
},
"node_modules/is-weakmap": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
- "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2776,13 +3047,16 @@
}
},
"node_modules/is-weakset": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
- "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3019,15 +3293,12 @@
}
},
"node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
+ "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
"dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
"engines": {
- "node": ">=10"
+ "node": "14 || >=16.14"
}
},
"node_modules/merge2": {
@@ -3121,34 +3392,34 @@
"dev": true
},
"node_modules/next": {
- "version": "13.5.6",
- "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz",
- "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==",
+ "version": "14.1.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz",
+ "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==",
"dependencies": {
- "@next/env": "13.5.6",
+ "@next/env": "14.1.4",
"@swc/helpers": "0.5.2",
"busboy": "1.6.0",
- "caniuse-lite": "^1.0.30001406",
+ "caniuse-lite": "^1.0.30001579",
+ "graceful-fs": "^4.2.11",
"postcss": "8.4.31",
- "styled-jsx": "5.1.1",
- "watchpack": "2.4.0"
+ "styled-jsx": "5.1.1"
},
"bin": {
"next": "dist/bin/next"
},
"engines": {
- "node": ">=16.14.0"
+ "node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "13.5.6",
- "@next/swc-darwin-x64": "13.5.6",
- "@next/swc-linux-arm64-gnu": "13.5.6",
- "@next/swc-linux-arm64-musl": "13.5.6",
- "@next/swc-linux-x64-gnu": "13.5.6",
- "@next/swc-linux-x64-musl": "13.5.6",
- "@next/swc-win32-arm64-msvc": "13.5.6",
- "@next/swc-win32-ia32-msvc": "13.5.6",
- "@next/swc-win32-x64-msvc": "13.5.6"
+ "@next/swc-darwin-arm64": "14.1.4",
+ "@next/swc-darwin-x64": "14.1.4",
+ "@next/swc-linux-arm64-gnu": "14.1.4",
+ "@next/swc-linux-arm64-musl": "14.1.4",
+ "@next/swc-linux-x64-gnu": "14.1.4",
+ "@next/swc-linux-x64-musl": "14.1.4",
+ "@next/swc-win32-arm64-msvc": "14.1.4",
+ "@next/swc-win32-ia32-msvc": "14.1.4",
+ "@next/swc-win32-x64-msvc": "14.1.4"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -3209,13 +3480,13 @@
}
},
"node_modules/object.assign": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
},
@@ -3227,28 +3498,29 @@
}
},
"node_modules/object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.fromentries": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
- "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3258,39 +3530,45 @@
}
},
"node_modules/object.groupby": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz",
- "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/object.hasown": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz",
- "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz",
+ "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==",
"dev": true,
"dependencies": {
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object.values": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
- "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3423,6 +3701,22 @@
"node": "14 || >=16.14"
}
},
+ "node_modules/path-scurry": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
+ "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -3727,15 +4021,16 @@
}
},
"node_modules/reflect.getprototypeof": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz",
- "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
"globalthis": "^1.0.3",
"which-builtin-type": "^1.1.3"
},
@@ -3752,14 +4047,15 @@
"integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
},
"node_modules/regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -3826,6 +4122,26 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -3849,13 +4165,13 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
- "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -3867,15 +4183,18 @@
}
},
"node_modules/safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
"is-regex": "^1.1.4"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -3905,9 +4224,9 @@
}
},
"node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -3919,30 +4238,45 @@
"node": ">=10"
}
},
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/set-function-length": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
- "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.1.1",
- "get-intrinsic": "^1.2.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.0.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -3968,14 +4302,18 @@
}
},
"node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4012,9 +4350,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
@@ -4098,29 +4436,101 @@
"integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
"has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "regexp.prototype.flags": "^1.5.0",
- "set-function-name": "^2.0.0",
- "side-channel": "^1.0.4"
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trim": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
- "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -4130,28 +4540,31 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
- "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
- "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4181,6 +4594,19 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -4429,12 +4855,12 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
- "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
"dev": true,
"engines": {
- "node": ">=16.13.0"
+ "node": ">=16"
},
"peerDependencies": {
"typescript": ">=4.2.0"
@@ -4447,9 +4873,9 @@
"peer": true
},
"node_modules/tsconfig-paths": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
- "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
"dev": true,
"dependencies": {
"@types/json5": "^0.0.29",
@@ -4488,29 +4914,30 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
- "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -4520,16 +4947,17 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -4539,23 +4967,29 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/typescript": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz",
- "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+ "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -4606,11 +5040,13 @@
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
"integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
"dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
+ "lodash.debounce": "^4.0.8"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=16.15.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18"
}
},
"node_modules/which": {
@@ -4670,31 +5106,15 @@
}
},
"node_modules/which-collection": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
- "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
- "dev": true,
- "dependencies": {
- "is-map": "^2.0.1",
- "is-set": "^2.0.1",
- "is-weakmap": "^2.0.1",
- "is-weakset": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
- "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.4",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
},
"engines": {
"node": ">= 0.4"
diff --git a/package.json b/package.json
index 534d8ff276..aa766ce4b8 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "fe-weekly-mission",
+ "name": "4-weekly-mission",
"version": "0.1.0",
"private": true,
"scripts": {
diff --git a/pages/_document.tsx b/pages/_document.tsx
deleted file mode 100644
index 54e8bf3e2a..0000000000
--- a/pages/_document.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Html, Head, Main, NextScript } from 'next/document'
-
-export default function Document() {
- return (
-
-
-
-
-
-
- )
-}
diff --git a/src/asset/index.ts b/src/asset/index.ts
new file mode 100644
index 0000000000..38e229bd90
--- /dev/null
+++ b/src/asset/index.ts
@@ -0,0 +1,10 @@
+export { default as LinkbraryIcon } from "./svg/LinkbraryIcon";
+export { default as WhiteInstagramIcon } from "./svg/WhiteInstagramIcon";
+export { default as WhiteTwitterIcon } from "./svg/WhiteTwitterIcon";
+export { default as WhiteYoutubeIcon } from "./svg/WhiteYoutubeIcon";
+export { default as WhiteFacebookIcon } from "./svg/WhiteFacebookIcon";
+export { default as MagnifierIcon } from "./svg/MagnifierIcon";
+export { default as XIcon } from "./svg/XIcon";
+export { default as ChainIcon } from "./svg/ChainIcon";
+export { default as EyeOffIcon } from "./svg/EyeOffIcon";
+export { default as EyeOnIcon } from "./svg/EyeOnIcon";
diff --git a/src/asset/svg/ChainIcon.tsx b/src/asset/svg/ChainIcon.tsx
new file mode 100644
index 0000000000..2c7b75e6a7
--- /dev/null
+++ b/src/asset/svg/ChainIcon.tsx
@@ -0,0 +1,24 @@
+export default function ChainIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/EyeOffIcon.tsx b/src/asset/svg/EyeOffIcon.tsx
new file mode 100644
index 0000000000..a852520aa7
--- /dev/null
+++ b/src/asset/svg/EyeOffIcon.tsx
@@ -0,0 +1,17 @@
+export default function EyeOffIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/EyeOnIcon.tsx b/src/asset/svg/EyeOnIcon.tsx
new file mode 100644
index 0000000000..c840be9def
--- /dev/null
+++ b/src/asset/svg/EyeOnIcon.tsx
@@ -0,0 +1,17 @@
+export default function EyeOnIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/LinkbraryIcon.tsx b/src/asset/svg/LinkbraryIcon.tsx
new file mode 100644
index 0000000000..a160aec143
--- /dev/null
+++ b/src/asset/svg/LinkbraryIcon.tsx
@@ -0,0 +1,62 @@
+interface LinkbraryIconProps {
+ width: string;
+ height: string;
+ opacity?: string;
+ fill?: string;
+}
+
+export default function LinkbraryIcon({
+ width,
+ height,
+ opacity = "1",
+ fill = "#6D6AFE",
+}: LinkbraryIconProps) {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/MagnifierIcon.tsx b/src/asset/svg/MagnifierIcon.tsx
new file mode 100644
index 0000000000..e5f6482383
--- /dev/null
+++ b/src/asset/svg/MagnifierIcon.tsx
@@ -0,0 +1,26 @@
+export default function MagnifierIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/WhiteFacebookIcon.tsx b/src/asset/svg/WhiteFacebookIcon.tsx
new file mode 100644
index 0000000000..d4b9dc3a33
--- /dev/null
+++ b/src/asset/svg/WhiteFacebookIcon.tsx
@@ -0,0 +1,18 @@
+export default function WhiteFacebookIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/WhiteInstagramIcon.tsx b/src/asset/svg/WhiteInstagramIcon.tsx
new file mode 100644
index 0000000000..65372d4e7d
--- /dev/null
+++ b/src/asset/svg/WhiteInstagramIcon.tsx
@@ -0,0 +1,16 @@
+export default function WhiteInstagramIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/WhiteTwitterIcon.tsx b/src/asset/svg/WhiteTwitterIcon.tsx
new file mode 100644
index 0000000000..0367595b72
--- /dev/null
+++ b/src/asset/svg/WhiteTwitterIcon.tsx
@@ -0,0 +1,16 @@
+export default function WhiteTwitterIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/WhiteYoutubeIcon.tsx b/src/asset/svg/WhiteYoutubeIcon.tsx
new file mode 100644
index 0000000000..33c22092aa
--- /dev/null
+++ b/src/asset/svg/WhiteYoutubeIcon.tsx
@@ -0,0 +1,23 @@
+export default function WhiteYoutubeIcon() {
+ return (
+
+ );
+}
diff --git a/src/asset/svg/XIcon.tsx b/src/asset/svg/XIcon.tsx
new file mode 100644
index 0000000000..6a9f4245dd
--- /dev/null
+++ b/src/asset/svg/XIcon.tsx
@@ -0,0 +1,25 @@
+export default function XIcon() {
+ return (
+
+ );
+}
diff --git a/src/components/Auth/Auth.tsx b/src/components/Auth/Auth.tsx
new file mode 100644
index 0000000000..593c054dfb
--- /dev/null
+++ b/src/components/Auth/Auth.tsx
@@ -0,0 +1,23 @@
+"use client";
+
+import InputField from "./InputField/InputField";
+
+export default function Auth() {
+ const emailDefaultValue = "이메일을 입력해 주세요";
+ const passwordDefaultValue = "비밀번호를 입력해 주세요";
+
+ // isInvalid, focusBorderColor, errorBorderColor
+ return (
+
+ );
+}
diff --git a/src/components/Auth/AuthHookForm.module.scss b/src/components/Auth/AuthHookForm.module.scss
new file mode 100644
index 0000000000..68a88f734b
--- /dev/null
+++ b/src/components/Auth/AuthHookForm.module.scss
@@ -0,0 +1,22 @@
+.authForm {
+ display: flex;
+ flex-direction: column;
+ gap: 32px;
+ justify-content: center;
+ align-items: center;
+ margin: auto;
+ width: 100%;
+
+ .header {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ font-size: 16px;
+ font-weight: 400;
+
+ &__text {
+ display: flex;
+ gap: 8px;
+ }
+ }
+}
diff --git a/src/components/Auth/AuthHookForm.tsx b/src/components/Auth/AuthHookForm.tsx
new file mode 100644
index 0000000000..9035a94707
--- /dev/null
+++ b/src/components/Auth/AuthHookForm.tsx
@@ -0,0 +1,40 @@
+"use client";
+import { LinkbraryIcon } from "@/src/asset";
+import Link from "next/link";
+import { useForm } from "react-hook-form";
+import InputField from "./InputField/InputField";
+import styles from "./AuthHookForm.module.scss";
+
+export default function AuthHookForm() {
+ const { handleSubmit } = useForm();
+ // register : value 관련
+ // watch : input 상태감지
+ // formState : submit error 감지
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/src/components/Auth/InputField/Input/Input.module.scss b/src/components/Auth/InputField/Input/Input.module.scss
new file mode 100644
index 0000000000..bd9d815647
--- /dev/null
+++ b/src/components/Auth/InputField/Input/Input.module.scss
@@ -0,0 +1,25 @@
+.input {
+ display: flex;
+ width: 350px;
+ padding: 18px 16px;
+ align-items: center;
+ border-radius: 8px;
+ background: var(--Linkbrary-white, #fff);
+
+ color: var(--Linkbrary-gray100, #373740);
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 24px; /* 150% */
+}
+
+.default {
+ border: 1px solid var(--Linkbrary-gray20, #ccd5e3);
+}
+
+.focus {
+ border: 1px solid var(--Linkbrary-primary-color, #6d6afe);
+}
+
+.error {
+ border: 1px solid var(--Linkbrary-red, #ff5b56);
+}
diff --git a/src/components/Auth/InputField/Input/Input.tsx b/src/components/Auth/InputField/Input/Input.tsx
new file mode 100644
index 0000000000..469f03e16a
--- /dev/null
+++ b/src/components/Auth/InputField/Input/Input.tsx
@@ -0,0 +1,33 @@
+import { ChangeEvent, FocusEventHandler } from "react";
+import styles from "./Input.module.scss";
+
+interface Input {
+ className: string;
+ type: string;
+ name: string;
+ value: any;
+ onValueChange: (e: ChangeEvent) => void;
+ onInputFocus: FocusEventHandler;
+ onInputBlur: FocusEventHandler;
+ placeholder?: string;
+}
+
+export default function Input({
+ className,
+ onValueChange,
+ placeholder,
+ onInputBlur,
+ onInputFocus,
+ ...rest
+}: Input) {
+ return (
+
+ );
+}
diff --git a/src/components/Auth/InputField/InputField.module.scss b/src/components/Auth/InputField/InputField.module.scss
new file mode 100644
index 0000000000..9b67a6d3f8
--- /dev/null
+++ b/src/components/Auth/InputField/InputField.module.scss
@@ -0,0 +1,23 @@
+.inputField {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ gap: 6px;
+ position: relative;
+ max-width: 350px;
+
+ .errorMessage {
+ color: var(--Linkbrary-red, #ff5b56);
+ font-size: 14px;
+ font-weight: 400;
+ }
+
+ .eyeToggleButton {
+ border: none;
+ background: none;
+ position: absolute;
+ top: 22px;
+ right: 16px;
+ padding: 0;
+ }
+}
diff --git a/src/components/Auth/InputField/InputField.tsx b/src/components/Auth/InputField/InputField.tsx
new file mode 100644
index 0000000000..02b233c67f
--- /dev/null
+++ b/src/components/Auth/InputField/InputField.tsx
@@ -0,0 +1,87 @@
+// "use client";
+import { ChangeEvent, useState } from "react";
+import { EyeOffIcon, EyeOnIcon } from "@/src/asset";
+import Input from "./Input/Input";
+import styles from "./InputField.module.scss";
+
+interface InputField {
+ type: string;
+ name: string;
+ icon?: string;
+ isError?: boolean;
+ placeholder?: string;
+ label?: boolean;
+}
+
+export default function InputField({
+ type,
+ name,
+ icon,
+ placeholder,
+ label,
+ isError = false,
+}: InputField) {
+ const [inputType, setInputType] = useState(type);
+ const [isVisible, setIsVisible] = useState(false);
+ const [inputValue, setInputValue] = useState("");
+ const [borderColor, setBorderColor] = useState("default");
+
+ const handleEyesClick = () => {
+ setIsVisible((prevVisible) => !prevVisible);
+
+ if (!isVisible) {
+ setInputType("text");
+ return;
+ }
+ setInputType(type);
+ };
+
+ const handleValueChange = (e: ChangeEvent) => {
+ setInputValue(e.target.value);
+ };
+
+ const handleInputFocus = () => {
+ if (borderColor === "error") {
+ return;
+ }
+
+ setBorderColor("focus");
+ };
+
+ const handleInputBlur = () => {
+ if (inputValue === "") {
+ setBorderColor("error");
+ return;
+ }
+
+ setBorderColor("default");
+ };
+
+ const eyeToggleIcon = isVisible ? : ;
+
+ return (
+
+
+
+ {/* {isError && {errorMessage}} */}
+ {icon === "eyeToggle" && (
+
+ )}
+
+ );
+}
diff --git a/src/components/Auth/SignInForm/SignInForm.module.scss b/src/components/Auth/SignInForm/SignInForm.module.scss
new file mode 100644
index 0000000000..a803904f7d
--- /dev/null
+++ b/src/components/Auth/SignInForm/SignInForm.module.scss
@@ -0,0 +1,24 @@
+.signForm {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin: 30vh auto;
+ gap: 32px;
+
+ .form {
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+
+ .inputBox {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+
+ .errorMessage {
+ color: var(--Linkbrary-red, #ff5b56);
+ }
+ }
+ }
+}
diff --git a/src/components/Auth/SignInForm/SignInForm.tsx b/src/components/Auth/SignInForm/SignInForm.tsx
new file mode 100644
index 0000000000..a58d5886e2
--- /dev/null
+++ b/src/components/Auth/SignInForm/SignInForm.tsx
@@ -0,0 +1,113 @@
+"use client";
+import { LinkbraryIcon } from "@/src/asset";
+import Link from "next/link";
+import { useForm } from "react-hook-form";
+import styles from "./SignInForm.module.scss";
+import { EMAIL_REGEX } from "@/src/constants/regex";
+
+interface FieldValues {
+ email: string;
+ password: string;
+
+ // error 는 따로 분리해보고 싶었습니다
+ emailError?: string;
+ passwordError?: string;
+}
+
+// Response body
+// {
+// "error": {
+// "name": "AuthApiError",
+// "message": "Invalid login credentials",
+// "status": 400
+// }
+// }
+
+export default function SignInForm() {
+ const {
+ register,
+ handleSubmit,
+ setError,
+ formState: { errors },
+ } = useForm({ mode: "onBlur" });
+
+ // 이부분 잘 모르겠네여 post로 보내는게 맞는지 아니면 그냥 fetch 만 걸어서 보내는게 맞는지 의문입니다.
+ const onSubmit = async (data) => {
+ try {
+ const res = await fetch("https://bootcamp-api.codeit.kr/api/sign-in", {
+ body: JSON.parse(data),
+ });
+ const req = await res.json();
+ console.log(req);
+ } catch (error) {
+ console.log(data, "실패");
+
+ setError("emailError", {
+ message: "이메일을 확인해 주세요.",
+ });
+ setError("passwordError", {
+ message: "비밀번호를 확인해 주세요.",
+ });
+ }
+ };
+
+ return (
+
+ );
+}
diff --git a/src/components/Footer/Footer/Footer.module.scss b/src/components/Footer/Footer/Footer.module.scss
new file mode 100644
index 0000000000..f39a043ffc
--- /dev/null
+++ b/src/components/Footer/Footer/Footer.module.scss
@@ -0,0 +1,22 @@
+.footer {
+ padding: 32px 104px 62px;
+ display: flex;
+ align-items: center;
+ background: #111322;
+ justify-content: space-between;
+ font-family: Arial;
+ font-size: 16px;
+ font-weight: 400;
+ color: #676767;
+ text-decoration: none;
+
+ .linkBox {
+ display: flex;
+ gap: 30px;
+ }
+
+ .snsBox {
+ display: flex;
+ gap: 12px;
+ }
+}
diff --git a/src/components/Footer/Footer/Footer.tsx b/src/components/Footer/Footer/Footer.tsx
new file mode 100644
index 0000000000..06b83fcb0d
--- /dev/null
+++ b/src/components/Footer/Footer/Footer.tsx
@@ -0,0 +1,42 @@
+import {
+ WhiteFacebookIcon,
+ WhiteYoutubeIcon,
+ WhiteTwitterIcon,
+ WhiteInstagramIcon,
+} from "@/src/asset/";
+import styles from "./Footer.module.scss";
+import Link from "next/link";
+
+export default function Footer() {
+ return (
+
+ );
+}
diff --git a/src/components/Footer/index.ts b/src/components/Footer/index.ts
new file mode 100644
index 0000000000..5befcc4bec
--- /dev/null
+++ b/src/components/Footer/index.ts
@@ -0,0 +1 @@
+export { default as Footer } from "./Footer/Footer";
diff --git a/src/components/Header/Header/Header.module.scss b/src/components/Header/Header/Header.module.scss
new file mode 100644
index 0000000000..b9f976a9fe
--- /dev/null
+++ b/src/components/Header/Header/Header.module.scss
@@ -0,0 +1,53 @@
+.header {
+ width: 100%;
+ background: var(--Linkbrary-bg, #f0f6ff);
+ z-index: 2;
+
+ .headerBox {
+ padding: 20px 32px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ max-width: 1124px;
+ margin: 0 auto;
+ }
+
+ .loginBtn {
+ display: flex;
+ width: 128px;
+ padding: 16px 20px;
+ justify-content: center;
+ align-items: center;
+ gap: 10px;
+ border-radius: 8px;
+ background: var(
+ --gra-purpleblue-to-skyblue,
+ linear-gradient(91deg, #6d6afe 0.12%, #6ae3fe 101.84%)
+ );
+ color: var(--Grey-Light, #f5f5f5);
+ font-size: 18px;
+ font-weight: 600;
+ border: none;
+ }
+
+ .profileBox {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ height: 53px;
+
+ .profileBox__img {
+ width: 28px;
+ height: 28px;
+ flex-shrink: 0;
+ fill: var(--Linkbrary-primary-color, #6d6afe);
+ }
+
+ .profileBox__email {
+ color: var(--Linkbrary-gray100, #373740);
+ font-size: 14px;
+ font-weight: 400;
+ }
+ }
+}
diff --git a/src/components/Header/Header/Header.tsx b/src/components/Header/Header/Header.tsx
new file mode 100644
index 0000000000..60f598d762
--- /dev/null
+++ b/src/components/Header/Header/Header.tsx
@@ -0,0 +1,35 @@
+import Link from "next/link";
+import { LinkbraryIcon } from "@/src/asset";
+import styles from "./Header.module.scss";
+import { END_POINT } from "@/src/constants";
+import Image from "next/image";
+import { useFetchData } from "@/src/hooks/useFetchData";
+
+export default async function Header() {
+ const userData = await useFetchData(END_POINT.USER);
+ const { image_source, email } = userData.data[0];
+
+ return (
+
+
+
+ );
+}
diff --git a/src/components/Header/index.ts b/src/components/Header/index.ts
new file mode 100644
index 0000000000..df45cb40a8
--- /dev/null
+++ b/src/components/Header/index.ts
@@ -0,0 +1 @@
+export { default as Header } from "./Header/Header";
diff --git a/src/components/LinkManager/AddLinkBar/AddLinkBar.module.scss b/src/components/LinkManager/AddLinkBar/AddLinkBar.module.scss
new file mode 100644
index 0000000000..dc0a692d31
--- /dev/null
+++ b/src/components/LinkManager/AddLinkBar/AddLinkBar.module.scss
@@ -0,0 +1,48 @@
+.AddLinkBar {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ justify-content: center;
+ position: static;
+
+ .form {
+ display: flex;
+ max-width: 1060px;
+ width: 100%;
+ padding: 16px 20px;
+ align-items: center;
+ gap: 8px;
+ justify-content: space-between;
+ border-radius: 15px;
+ border: 1px solid var(--Linkbrary-primary-color, #6d6afe);
+ background: var(--Linkbrary-white, #fff);
+
+ .inputBox {
+ display: flex;
+ gap: 10px;
+
+ .input {
+ border: none;
+ background-color: transparent;
+
+ &:focus {
+ outline: none;
+ }
+ }
+ }
+
+ .inputBtn {
+ width: 80px;
+ padding: 10px 16px;
+ border-radius: 8px;
+ background: var(
+ --gra-purpleblue-to-skyblue,
+ linear-gradient(91deg, #6d6afe 0.12%, #6ae3fe 101.84%)
+ );
+ color: var(--Grey-Light, #f5f5f5);
+ font-size: 12px;
+ font-weight: 600;
+ border: none;
+ }
+ }
+}
diff --git a/src/components/LinkManager/AddLinkBar/AddLinkBar.tsx b/src/components/LinkManager/AddLinkBar/AddLinkBar.tsx
new file mode 100644
index 0000000000..050a4297fe
--- /dev/null
+++ b/src/components/LinkManager/AddLinkBar/AddLinkBar.tsx
@@ -0,0 +1,27 @@
+import { ChainIcon } from "@/src/asset";
+import styles from "./AddLinkBar.module.scss";
+import { RefObject } from "react";
+
+interface AddLinkBar {
+ addLinkBarRef?: RefObject;
+ className?: string;
+}
+
+export default function AddLinkBar() {
+ return (
+
+
+
+
+
+
+ {/* 모달로 변경 예정 */}
+
+
+
+ );
+}
diff --git a/src/components/LinkManager/FavoriteButtonList/FavoriteButton/FavoriteButton.module.scss b/src/components/LinkManager/FavoriteButtonList/FavoriteButton/FavoriteButton.module.scss
new file mode 100644
index 0000000000..26b84c8c21
--- /dev/null
+++ b/src/components/LinkManager/FavoriteButtonList/FavoriteButton/FavoriteButton.module.scss
@@ -0,0 +1,22 @@
+.FavoriteButton {
+ display: inline-flex;
+ padding: 8px 12px;
+ align-items: center;
+ height: 36px;
+ border-radius: 5px;
+ border: 1px solid var(--Linkbrary-primary-color, #6d6afe);
+ background: #fff;
+ color: #000;
+ font-size: 16px;
+ font-weight: 400;
+ flex-shrink: 0;
+
+ &:hover {
+ background: var(--Linkbrary-gray10, #e7effb);
+ }
+
+ &:focus {
+ color: #fff;
+ background: var(--Linkbrary-primary-color, #6d6afe);
+ }
+}
diff --git a/src/components/LinkManager/FavoriteButtonList/FavoriteButton/FavoriteButton.tsx b/src/components/LinkManager/FavoriteButtonList/FavoriteButton/FavoriteButton.tsx
new file mode 100644
index 0000000000..b01af34c7f
--- /dev/null
+++ b/src/components/LinkManager/FavoriteButtonList/FavoriteButton/FavoriteButton.tsx
@@ -0,0 +1,22 @@
+import { Favorite } from "@/src/constants/types";
+import styles from "./FavoriteButton.module.scss";
+
+interface FavoriteButtonProps {
+ favorite?: Favorite;
+ onFavoriteClick: (favorite?: Favorite | null) => void;
+}
+
+export default function FavoriteButton({
+ favorite,
+ onFavoriteClick,
+}: FavoriteButtonProps) {
+ const { name, id } = favorite || { name: "전체", id: null };
+ return (
+
+ );
+}
diff --git a/src/components/LinkManager/FavoriteButtonList/FavoriteButtonList.module.scss b/src/components/LinkManager/FavoriteButtonList/FavoriteButtonList.module.scss
new file mode 100644
index 0000000000..ef38704115
--- /dev/null
+++ b/src/components/LinkManager/FavoriteButtonList/FavoriteButtonList.module.scss
@@ -0,0 +1,28 @@
+.FavoriteButtonList {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ .totalBtn {
+ display: inline-flex;
+ padding: 8px 12px;
+ align-items: center;
+ height: 36px;
+ border-radius: 5px;
+ border: 1px solid var(--Linkbrary-primary-color, #6d6afe);
+ background: #fff;
+ color: #000;
+ font-size: 16px;
+ font-weight: 400;
+ flex-shrink: 0;
+
+ &:hover {
+ background: var(--Linkbrary-gray10, #e7effb);
+ }
+
+ &:focus {
+ color: #fff;
+ background: var(--Linkbrary-primary-color, #6d6afe);
+ }
+ }
+}
diff --git a/src/components/LinkManager/FavoriteButtonList/FavoriteButtonList.tsx b/src/components/LinkManager/FavoriteButtonList/FavoriteButtonList.tsx
new file mode 100644
index 0000000000..f13969f025
--- /dev/null
+++ b/src/components/LinkManager/FavoriteButtonList/FavoriteButtonList.tsx
@@ -0,0 +1,27 @@
+import { Favorite } from "@/src/constants/types";
+import FavoriteButton from "./FavoriteButton/FavoriteButton";
+import styles from "./FavoriteButtonList.module.scss";
+
+interface FavoriteButtonListProps {
+ favorites?: Favorite[];
+ handlefavoriteClick: (favorite?: Favorite | null) => void;
+}
+
+export default function FavoriteButtonList({
+ favorites,
+ handlefavoriteClick,
+}: FavoriteButtonListProps) {
+ return (
+
+
+ {favorites &&
+ favorites.map((favorite) => (
+
+ ))}
+
+ );
+}
diff --git a/src/components/LinkManager/LinkList/LinkEmptyCase/LinkEmptyCase.module.scss b/src/components/LinkManager/LinkList/LinkEmptyCase/LinkEmptyCase.module.scss
new file mode 100644
index 0000000000..98dec156c5
--- /dev/null
+++ b/src/components/LinkManager/LinkList/LinkEmptyCase/LinkEmptyCase.module.scss
@@ -0,0 +1,16 @@
+.LinksEmptyCase {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-content: center;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ height: 50vh;
+ text-align: center;
+
+ .text {
+ color: #000;
+ font-size: 16px;
+ font-weight: 400;
+ }
+}
diff --git a/src/components/LinkManager/LinkList/LinkEmptyCase/LinkEmptyCase.tsx b/src/components/LinkManager/LinkList/LinkEmptyCase/LinkEmptyCase.tsx
new file mode 100644
index 0000000000..2fca8ddeb8
--- /dev/null
+++ b/src/components/LinkManager/LinkList/LinkEmptyCase/LinkEmptyCase.tsx
@@ -0,0 +1,9 @@
+import styles from "./LinkEmptyCase.module.scss";
+
+export default function LinkEmptyCase() {
+ return (
+
+ );
+}
diff --git a/src/components/LinkManager/LinkList/LinkList.module.scss b/src/components/LinkManager/LinkList/LinkList.module.scss
new file mode 100644
index 0000000000..372b50606e
--- /dev/null
+++ b/src/components/LinkManager/LinkList/LinkList.module.scss
@@ -0,0 +1,7 @@
+.linkList {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ column-gap: 20px;
+ row-gap: 24px;
+}
diff --git a/src/components/LinkManager/LinkList/LinkList.tsx b/src/components/LinkManager/LinkList/LinkList.tsx
new file mode 100644
index 0000000000..5289d437eb
--- /dev/null
+++ b/src/components/LinkManager/LinkList/LinkList.tsx
@@ -0,0 +1,17 @@
+import { Link } from "@/src/constants/types";
+import LinkOverview from "./LinkOverview/LinkOverView";
+import styles from "./LinkList.module.scss";
+
+interface LinkListProps {
+ links: Link[];
+}
+
+export default function LinkList({ links }: LinkListProps) {
+ return (
+
+ {links.map((link) => (
+
+ ))}
+
+ );
+}
diff --git a/src/components/LinkManager/LinkList/LinkOverview/LinkOverView.tsx b/src/components/LinkManager/LinkList/LinkOverview/LinkOverView.tsx
new file mode 100644
index 0000000000..ccd05c17c8
--- /dev/null
+++ b/src/components/LinkManager/LinkList/LinkOverview/LinkOverView.tsx
@@ -0,0 +1,44 @@
+import Link from "next/link";
+import styles from "./LinkOverview.module.scss";
+import { Link as TLink } from "@/src/constants/types";
+import getElapsedTime from "@/src/utils/getElapsedTime";
+import getFormattedDate from "@/src/utils/getFormattedDate";
+import { LinkbraryIcon } from "@/src/asset/";
+import Image from "next/image";
+import getValidUrl from "@/src/utils/getValidUrl";
+
+interface LinkOverview {
+ link: TLink;
+}
+
+export default function LinkOverview({ link }: LinkOverview) {
+ const { imageSource: imageUrl, createdAt, description, title, url } = link;
+ const createDate = getElapsedTime(createdAt);
+ const formatDate = getFormattedDate(createdAt);
+
+ // 서버 Image-url이 문제가 있어서 그냥 null처리 했읍니다
+ const imageSource = getValidUrl(imageUrl);
+
+ return (
+
+ {imageSource ? (
+
+ ) : (
+
+ )}
+
+
+
{description}
+
+
+
+ );
+}
diff --git a/src/components/LinkManager/LinkList/LinkOverview/LinkOverview.module.scss b/src/components/LinkManager/LinkList/LinkOverview/LinkOverview.module.scss
new file mode 100644
index 0000000000..f7020c49b4
--- /dev/null
+++ b/src/components/LinkManager/LinkList/LinkOverview/LinkOverview.module.scss
@@ -0,0 +1,68 @@
+.LinkOverview {
+ max-width: 340px;
+ width: 100%;
+ height: 334px;
+ box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.08);
+ border-radius: 15px;
+ overflow: hidden;
+ text-decoration: none;
+ flex-shrink: 0;
+
+ .imgBox {
+ height: 200px;
+
+ .img {
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ .caption {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ padding: 16px 20px;
+ align-items: flex-start;
+ height: 134px;
+
+ .updatedAt {
+ color: #666;
+ font-size: 13px;
+ font-weight: 400;
+ flex-grow: 1;
+ }
+
+ .description {
+ color: #000;
+ overflow: hidden;
+ white-space: normal;
+ text-overflow: ellipsis;
+ font-size: 16px;
+ line-height: 24px;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ flex-grow: 1;
+ }
+
+ .createAt {
+ color: #333;
+ font-size: 14px;
+ font-weight: 400;
+ flex-grow: 1;
+ }
+ }
+
+ .emptyCaseBox {
+ height: 200px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: #dddfff;
+ }
+
+ &:hover {
+ transform: scale(1.06);
+ transition: transform 0.3s ease;
+ }
+}
diff --git a/src/components/LinkManager/LinkManager.module.scss b/src/components/LinkManager/LinkManager.module.scss
new file mode 100644
index 0000000000..fd07ba2280
--- /dev/null
+++ b/src/components/LinkManager/LinkManager.module.scss
@@ -0,0 +1,22 @@
+.LinkManager {
+ width: 100%;
+
+ .addLinkManager {
+ padding: 60px 32px 90px;
+ background: var(--Linkbrary-bg, #f0f6ff);
+ position: relative;
+ }
+
+ .fixedAddLinkManager {
+ visibility: hidden;
+ }
+
+ .addLinkBarVisible {
+ position: fixed;
+ bottom: 0;
+ visibility: visible;
+ width: 100%;
+ padding: 24px 32px;
+ background: var(--Linkbrary-bg, #f0f6ff);
+ }
+}
diff --git a/src/components/LinkManager/LinkManager.tsx b/src/components/LinkManager/LinkManager.tsx
new file mode 100644
index 0000000000..05037ffb15
--- /dev/null
+++ b/src/components/LinkManager/LinkManager.tsx
@@ -0,0 +1,137 @@
+"use client";
+
+import { ChangeEvent, use, useEffect, useRef, useState } from "react";
+
+import { END_POINT } from "@/src/constants";
+
+import LinkList from "./LinkList/LinkList";
+import FavoriteButtonList from "./FavoriteButtonList/FavoriteButtonList";
+import LinkSearchBar from "./LinkSearchBar/LinkSearchBar";
+import LinkEmptyCase from "./LinkList/LinkEmptyCase/LinkEmptyCase";
+import AddLinkBar from "./AddLinkBar/AddLinkBar";
+import UserProfile from "./UserProfile/UserProfile";
+
+import {
+ Favorite,
+ Link as TLink,
+ UserProfile as TUserProfile,
+} from "@/src/constants/types";
+
+import getFormattedLinks from "@/src/utils/getFormattedLinks";
+import useIntersectionObserver from "@/src/hooks/useIntersectionObserver";
+
+import styles from "./LinkManager.module.scss";
+
+interface LinkManager {
+ links: TLink[];
+ favorites?: Favorite[];
+ userProfile?: TUserProfile;
+}
+
+export default function LinkManager({
+ links,
+ favorites,
+ userProfile,
+}: LinkManager) {
+ // 렌더링되는 Links 배열 상태
+ const [favoriteLinks, setFavoriteLinks] = useState(links);
+ // LinkList title 상태
+ const [favoriteTitle, setFavoriteTitle] = useState("전체");
+ // LinkSearchBar의 입력 value 상태
+ const [searchValue, setSearchValue] = useState("");
+ // targetRef of intersectionObserver
+ const addLinkBarRef = useRef(null);
+ const footerRef = useRef(null);
+ // targetRef로 상태 설정
+ const isAddLinkBarIntersecting = useIntersectionObserver({
+ targetRef: addLinkBarRef,
+ });
+ const isFooterIntersecting = useIntersectionObserver({
+ targetRef: footerRef,
+ });
+
+ // intersectionObserver의 상태로 style 변경
+ const className =
+ isAddLinkBarIntersecting || isFooterIntersecting
+ ? null
+ : styles.addLinkBarVisible;
+
+ // test
+ // const got = use(fetch(`${END_POINT.LINKS}`));
+
+ // favoriteBotton의 onClickEvent
+ const handlefavoriteClick = async (favorite?: Favorite | null) => {
+ // favorite id값으로 다시 fetch
+ if (favorite) {
+ const res = await fetch(`${END_POINT.LINKS}?folderId=${favorite.id}`);
+ const result = await res.json();
+
+ setFavoriteTitle(favorite.name);
+ setFavoriteLinks(getFormattedLinks(result.data));
+ return;
+ }
+ // favorite 값이 없는 button이면 리셋
+ setFavoriteTitle("전체");
+ setFavoriteLinks(links);
+ };
+
+ // LinkSearchBar의 onChangeEvent
+ const handleSearchValue = (e: ChangeEvent) => {
+ setSearchValue(e.target.value);
+ };
+
+ // LinkSearchBar의 onChangeEvent 발생 시 links filtering
+ // 훅이나 함수로 분리 가능할까요? 시도해보았지만 접근이 잘 안됩니다
+ // filteredLinks 함수만 따로 분리하는게 나을까요?
+ useEffect(() => {
+ if (searchValue === "") {
+ setFavoriteLinks(links);
+ return;
+ }
+
+ const filteredLinks = links.filter((link) => {
+ return Object.values(link)
+ .join("")
+ .toLowerCase()
+ .includes(searchValue.toLowerCase());
+ });
+ setFavoriteLinks(filteredLinks);
+ }, [searchValue, links]);
+
+ return (
+
+ {userProfile ? (
+
+ ) : (
+
+ )}
+
+ {favorites && (
+ <>
+
+
+
{favoriteTitle}
+
+ >
+ )}
+ {favoriteLinks && favoriteLinks.length > 0 ? (
+
+ ) : (
+
+ )}
+ {/* footer의 ref를 잡을 수 없어서 임의로 만들었습니다 */}
+
+
+
+ );
+}
diff --git a/src/components/LinkManager/LinkSearchBar/LinkSearchBar.module.scss b/src/components/LinkManager/LinkSearchBar/LinkSearchBar.module.scss
new file mode 100644
index 0000000000..590e98f13d
--- /dev/null
+++ b/src/components/LinkManager/LinkSearchBar/LinkSearchBar.module.scss
@@ -0,0 +1,35 @@
+.LinkSearchBar {
+ display: flex;
+ gap: 10px;
+ justify-content: flex-start;
+ align-items: center;
+ border-radius: 10px;
+ background: #f5f5f5;
+ padding: 16px;
+ width: 100%;
+ position: relative;
+
+ .input {
+ color: var(--Text, #666);
+ font-size: 16px;
+ font-weight: 400;
+ border: none;
+ background-color: transparent;
+ width: 100%;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .input[type="search"]::-webkit-search-cancel-button {
+ opacity: 0;
+ width: 24px;
+ }
+
+ .cancelIcon {
+ position: absolute;
+ right: 20px;
+ pointer-events: none;
+ }
+}
diff --git a/src/components/LinkManager/LinkSearchBar/LinkSearchBar.tsx b/src/components/LinkManager/LinkSearchBar/LinkSearchBar.tsx
new file mode 100644
index 0000000000..9dac74e4ca
--- /dev/null
+++ b/src/components/LinkManager/LinkSearchBar/LinkSearchBar.tsx
@@ -0,0 +1,32 @@
+import { MagnifierIcon, XIcon } from "@/src/asset";
+
+import { ChangeEvent } from "react";
+
+import styles from "./LinkSearchBar.module.scss";
+
+interface LinkSearchBarProps {
+ onSearchValue: (e: ChangeEvent) => void;
+ inputValue: any;
+}
+
+export default function LinkSearchBar({
+ onSearchValue,
+ inputValue,
+}: LinkSearchBarProps) {
+ return (
+
+
+ {/* input component로 바꿔보자 */}
+
+
+
+
+
+ );
+}
diff --git a/src/components/LinkManager/UserProfile/UserProfile.module.scss b/src/components/LinkManager/UserProfile/UserProfile.module.scss
new file mode 100644
index 0000000000..f32a15d640
--- /dev/null
+++ b/src/components/LinkManager/UserProfile/UserProfile.module.scss
@@ -0,0 +1,35 @@
+.UserProfile {
+ padding-top: 113px;
+ padding-left: 32px;
+ padding-right: 32px;
+ padding-bottom: 60px;
+ background: var(--Linkbrary-bg, #f0f6ff);
+
+ .profileInfos {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #000;
+ gap: 12px;
+
+ .profileImg {
+ width: 60px;
+ padding: 4px;
+ border-radius: 47px;
+ background: var(--primary-purple-70, #8f00ff);
+ }
+
+ .profileName {
+ font-size: 16px;
+ font-weight: 400;
+ }
+
+ .folderName {
+ font-feature-settings: "clig" off, "liga" off;
+ font-size: 40px;
+ font-weight: 600;
+ padding-top: 6px;
+ }
+ }
+}
diff --git a/src/components/LinkManager/UserProfile/UserProfile.tsx b/src/components/LinkManager/UserProfile/UserProfile.tsx
new file mode 100644
index 0000000000..8d634e61c2
--- /dev/null
+++ b/src/components/LinkManager/UserProfile/UserProfile.tsx
@@ -0,0 +1,27 @@
+import Image from "next/image";
+import styles from "./UserProfile.module.scss";
+import { UserProfile as TUserProfile } from "@/src/constants/types";
+
+interface UserProfileProps {
+ userProfile: TUserProfile;
+}
+
+export default function UserProfile({ userProfile }: UserProfileProps) {
+ const { name, owner } = userProfile;
+
+ return (
+
+
+
+ {owner.name}
+ {name}
+
+
+ );
+}
diff --git a/src/components/Modal/Modal.module.scss b/src/components/Modal/Modal.module.scss
new file mode 100644
index 0000000000..89e076f11e
--- /dev/null
+++ b/src/components/Modal/Modal.module.scss
@@ -0,0 +1,11 @@
+.button {
+ color: var(--Linkbrary-gray60, #9fa6b2);
+ font-size: 14px;
+ font-weight: 600;
+ border: none;
+ background-color: #ffffff;
+
+ &:hover {
+ opacity: 0.8;
+ }
+}
diff --git a/src/components/Modal/Modal.tsx b/src/components/Modal/Modal.tsx
new file mode 100644
index 0000000000..055f9ef7a6
--- /dev/null
+++ b/src/components/Modal/Modal.tsx
@@ -0,0 +1,42 @@
+import { useRef, useState } from "react";
+import ModalBasic from "./ModalBasic/ModalBasic";
+import styles from "./Modal.module.scss";
+import { useOnClickOutside } from "usehooks-ts";
+
+interface Modal {
+ name: string;
+ subtitle?: string;
+ shareButtons?: boolean;
+}
+
+function Modal({ name, ...rest }: Modal) {
+ // 평상시 modal 노출 false
+ const [isOpen, setIsOpen] = useState(false);
+ const modalRef = useRef(null);
+ // 모달 닫기 false
+ const handleClickOutside = () => {
+ setIsOpen((preIsOpen) => !preIsOpen);
+ };
+ useOnClickOutside(modalRef, handleClickOutside);
+
+ return (
+
+
+ {isOpen && (
+
+ )}
+
+ );
+}
+
+export default Modal;
diff --git a/src/components/Modal/ModalBasic/ModalBasic.module.scss b/src/components/Modal/ModalBasic/ModalBasic.module.scss
new file mode 100644
index 0000000000..10e5dc2394
--- /dev/null
+++ b/src/components/Modal/ModalBasic/ModalBasic.module.scss
@@ -0,0 +1,80 @@
+.modalBackground {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.4);
+ z-index: 99;
+}
+
+.modalBasic {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: 100;
+ width: 360px;
+ height: auto;
+
+ .modalContainer {
+ display: flex;
+ padding: 32px 40px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ gap: 24px;
+ border-radius: 15px;
+ border: 1px solid var(--Stroke-light, #dee2e6);
+ background: var(---Gray-White, #fff);
+ position: relative;
+ margin: 20% auto;
+
+ & .closeBtn {
+ width: 24px;
+ position: absolute;
+ top: 20px;
+ right: 20px;
+ border: none;
+ background: none;
+ padding: 0;
+ }
+ }
+}
+
+//modalHeader
+.modalHeader {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ align-items: center;
+ justify-content: center;
+
+ color: var(--Linkbrary-gray100, #373740);
+ font-size: 20px;
+ font-weight: 700;
+
+ .subtitle {
+ color: var(--Linkbrary-gray60, #9fa6b2);
+ font-size: 14px;
+ font-weight: 400;
+ }
+}
+
+.modalShareBtns {
+ display: flex;
+ gap: 32px;
+
+ .shareBtn {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+
+ .shareBtnName {
+ color: var(--Linkbrary-gray100, #373740);
+ font-family: Inter;
+ font-size: 13px;
+ font-weight: 400;
+ }
+ }
+}
diff --git a/src/components/Modal/ModalBasic/ModalBasic.tsx b/src/components/Modal/ModalBasic/ModalBasic.tsx
new file mode 100644
index 0000000000..2db0de8242
--- /dev/null
+++ b/src/components/Modal/ModalBasic/ModalBasic.tsx
@@ -0,0 +1,40 @@
+import ModalHeader from "./ModalHeader";
+import ModalMain from "./ModalMain";
+import styles from "./ModalBasic.module.scss";
+import CloseIcon from "@/assets/svg/CloseIcon";
+import { RefObject } from "react";
+
+interface ModalBasic {
+ name: string;
+ modalRef: RefObject;
+ handleClickOutside: () => void;
+
+ subtitle?: string;
+ shareButtons?: boolean;
+}
+
+export default function ModalBasic({
+ name,
+ modalRef,
+ handleClickOutside,
+ ...rest
+}: ModalBasic) {
+ const { subtitle, shareButtons } = rest;
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/src/components/Modal/ModalBasic/ModalHeader.tsx b/src/components/Modal/ModalBasic/ModalHeader.tsx
new file mode 100644
index 0000000000..26693bf0e7
--- /dev/null
+++ b/src/components/Modal/ModalBasic/ModalHeader.tsx
@@ -0,0 +1,15 @@
+import styles from "./ModalBasic.module.scss";
+
+interface ModalHeader {
+ name: string;
+ subtitle?: string;
+}
+
+export default function ModalHeader({ name, subtitle }: ModalHeader) {
+ return (
+
+
{name}
+ {subtitle &&
{subtitle}
}
+
+ );
+}
diff --git a/src/components/Modal/ModalBasic/ModalMain.tsx b/src/components/Modal/ModalBasic/ModalMain.tsx
new file mode 100644
index 0000000000..6ea3b36b80
--- /dev/null
+++ b/src/components/Modal/ModalBasic/ModalMain.tsx
@@ -0,0 +1,9 @@
+import ModalShareBtns from "./ModalShareBtns";
+
+interface ModalMain {
+ shareButtons?: boolean;
+}
+
+export default function ModalMain({ shareButtons }: ModalMain) {
+ return <>{shareButtons && }>;
+}
diff --git a/src/components/Modal/ModalBasic/ModalShareBtns.tsx b/src/components/Modal/ModalBasic/ModalShareBtns.tsx
new file mode 100644
index 0000000000..90e2236929
--- /dev/null
+++ b/src/components/Modal/ModalBasic/ModalShareBtns.tsx
@@ -0,0 +1,25 @@
+import FIcon from "@/assets/svg/FIcon";
+import KakaoIcon from "@/assets/svg/KakaoIcon";
+import LinkIcon from "@/assets/svg/LinkIcon";
+import styles from "./ModalBasic.module.scss";
+
+function ModalShareBtns() {
+ return (
+
+ -
+
+
카카오톡
+
+ -
+
+
페이스북
+
+ -
+
+
링크복사
+
+
+ );
+}
+
+export default ModalShareBtns;
diff --git a/src/constants/regex.ts b/src/constants/regex.ts
new file mode 100644
index 0000000000..9baa654f83
--- /dev/null
+++ b/src/constants/regex.ts
@@ -0,0 +1,2 @@
+export const EMAIL_REGEX =
+ /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
diff --git a/src/constants/types.ts b/src/constants/types.ts
new file mode 100644
index 0000000000..7b80f660f5
--- /dev/null
+++ b/src/constants/types.ts
@@ -0,0 +1,38 @@
+export interface Link {
+ id: string;
+ imageSource: string;
+ createdAt: string;
+ description: string;
+ title: string;
+ url: string;
+}
+
+export interface Favorite {
+ id: number;
+ created_at: string;
+ name: string;
+ user_id: number;
+ favorite: boolean;
+ link: {
+ count: number;
+ };
+}
+
+export interface UserProfile {
+ name: string;
+ owner: {
+ profileImageSource: string;
+ name: string;
+ };
+ links: Link[];
+ count: number;
+}
+
+export interface FormatLink {
+ id: string;
+ image_source: string;
+ created_at: string;
+ description: string;
+ title: string;
+ url: string;
+}
diff --git a/src/hooks/useFetchData.ts b/src/hooks/useFetchData.ts
new file mode 100644
index 0000000000..7836ddc30c
--- /dev/null
+++ b/src/hooks/useFetchData.ts
@@ -0,0 +1,12 @@
+export const useFetchData = async (url: string) => {
+ try {
+ const res = await fetch(url);
+ const result = await res.json();
+ return result;
+ } catch (error) {
+ if (error instanceof Error) {
+ // alert(error.message);
+ console.error(error.message);
+ }
+ }
+};
diff --git a/src/hooks/useGetData.ts b/src/hooks/useGetData.ts
new file mode 100644
index 0000000000..e6faee23d4
--- /dev/null
+++ b/src/hooks/useGetData.ts
@@ -0,0 +1,21 @@
+// import { useEffect, useState } from "react";
+
+// export default function useGetData(url: string) {
+// const [data, setData] = useState([]);
+
+// useEffect(() => {
+// const fetchData = async (url: string) => {
+// try {
+// const res = await fetch(url);
+// const result = await res.json();
+// setData(result);
+// } catch (error) {
+// console.error(error);
+// }
+// };
+
+// fetchData(url);
+// }, [url]);
+
+// return { data, fallback: true };
+// }
diff --git a/src/hooks/useIntersectionObserver.ts b/src/hooks/useIntersectionObserver.ts
new file mode 100644
index 0000000000..a62ac63ea3
--- /dev/null
+++ b/src/hooks/useIntersectionObserver.ts
@@ -0,0 +1,37 @@
+import { RefObject, useEffect, useState } from "react";
+
+interface useIntersectionObserver {
+ targetRef: RefObject;
+ threshold?: number;
+}
+
+export default function useIntersectionObserver({
+ targetRef,
+ threshold = 0,
+}: useIntersectionObserver) {
+ // 주시 상태
+ const [isIntersecting, setIsIntersecting] = useState(false);
+
+ useEffect(() => {
+ // observer 생성
+ const observer = new IntersectionObserver(
+ (entries) => {
+ entries.forEach((entry) => {
+ // entry 객체가 threshold 문턱 % 만큼 보이면 isIntersecting true
+ setIsIntersecting(entry.isIntersecting);
+ });
+ },
+ { threshold }
+ );
+
+ if (targetRef.current) {
+ observer.observe(targetRef.current);
+ }
+
+ return () => {
+ observer.disconnect();
+ };
+ }, [targetRef, threshold]);
+
+ return isIntersecting;
+}
diff --git a/src/styles/global.scss b/src/styles/global.scss
new file mode 100644
index 0000000000..a86b73de29
--- /dev/null
+++ b/src/styles/global.scss
@@ -0,0 +1,18 @@
+@import "./reset.scss";
+
+:root {
+ --Linkbrary-primary-color: #6d6afe;
+ --Linkbrary-red: #ff5b56;
+ --The-julge-black: #111322;
+ --Linkbrary-white: #ffffff;
+ --Linkbrary-gray100: #3e3e43;
+ --Linkbrary-gray60: #9fa6b2;
+ --Linkbrary-gray20: #ccd5e3;
+ --Linkbrary-gray10: #e7effb;
+ --Linkbrary-bg: #f0f6ff;
+}
+
+* {
+ box-sizing: border-box;
+ font-family: "Pretendard", "Arial";
+}
diff --git a/src/styles/reset.scss b/src/styles/reset.scss
new file mode 100644
index 0000000000..18f92f122c
--- /dev/null
+++ b/src/styles/reset.scss
@@ -0,0 +1,129 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol,
+ul {
+ list-style: none;
+}
+blockquote,
+q {
+ quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: "";
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/src/utils/getFormattedLinks.ts b/src/utils/getFormattedLinks.ts
new file mode 100644
index 0000000000..e1c55e3f68
--- /dev/null
+++ b/src/utils/getFormattedLinks.ts
@@ -0,0 +1,21 @@
+import { FormatLink } from "../constants/types";
+
+function formatLinkData(link: FormatLink) {
+ return {
+ id: link.id,
+ imageSource: link.image_source,
+ createdAt: link.created_at,
+ description: link.description,
+ title: link.title,
+ url: link.url,
+ };
+}
+
+export default function getFormattedLinks(links: FormatLink[]) {
+ return (
+ links &&
+ links.map((link) => {
+ return formatLinkData(link);
+ })
+ );
+}
diff --git a/tsconfig.json b/tsconfig.json
index 670224f3e9..d56de96252 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,5 @@
{
"compilerOptions": {
- "target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
@@ -13,10 +12,21 @@
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
"paths": {
"@/*": ["./*"]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ".next/types/app/page.tsx"
+ ],
"exclude": ["node_modules"]
}