├── .gitignore
├── README.md
├── app
├── admin
│ ├── authors
│ │ ├── components
│ │ │ └── AuthorsListView.jsx
│ │ ├── form
│ │ │ ├── contexts
│ │ │ │ └── AuthorFormContext.jsx
│ │ │ ├── layout.jsx
│ │ │ └── page.jsx
│ │ └── page.jsx
│ ├── categories
│ │ ├── components
│ │ │ └── CategoriesListView.jsx
│ │ ├── form
│ │ │ ├── contexts
│ │ │ │ └── CategoryFormContext.jsx
│ │ │ ├── layout.jsx
│ │ │ └── page.jsx
│ │ └── page.jsx
│ ├── components
│ │ ├── CountCard.jsx
│ │ └── Sidebar.jsx
│ ├── layout.jsx
│ ├── page.jsx
│ └── posts
│ │ ├── components
│ │ └── PostListView.jsx
│ │ ├── form
│ │ ├── components
│ │ │ └── RTEField.jsx
│ │ ├── contexts
│ │ │ └── PostFormContext.jsx
│ │ ├── layout.jsx
│ │ └── page.jsx
│ │ └── page.jsx
├── categories
│ ├── [categoryId]
│ │ └── page.jsx
│ └── page.jsx
├── components
│ ├── Header
│ │ ├── Header.jsx
│ │ └── LoginButton.jsx
│ └── PostListView.jsx
├── favicon.ico
├── globals.css
├── layout.js
├── page.js
└── posts
│ └── [postId]
│ └── page.jsx
├── jsconfig.json
├── lib
├── contexts
│ └── AuthContext.jsx
├── firebase.jsx
└── firebase
│ ├── admin
│ └── read.jsx
│ ├── author
│ ├── read.jsx
│ ├── read_server.jsx
│ └── write.jsx
│ ├── category
│ ├── read.jsx
│ ├── read_server.jsx
│ └── write.jsx
│ ├── count.jsx
│ └── post
│ ├── read.jsx
│ ├── read_server.jsx
│ └── write.jsx
├── next.config.mjs
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── google.png
├── logo.png
├── next.svg
└── vercel.svg
└── tailwind.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | # or
14 | bun dev
15 | ```
16 |
17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18 |
19 | You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.
20 |
21 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
22 |
23 | ## Learn More
24 |
25 | To learn more about Next.js, take a look at the following resources:
26 |
27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29 |
30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
31 |
32 | ## Deploy on Vercel
33 |
34 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35 |
36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
37 |
--------------------------------------------------------------------------------
/app/admin/authors/components/AuthorsListView.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useAuthors } from "@/lib/firebase/author/read";
4 | import Link from "next/link"
5 |
6 | export default function AuthorsListView() {
7 | const { data, error, isLoading } = useAuthors();
8 | if (isLoading) {
9 | return
Loading...
10 | }
11 | if (error) {
12 | return {error}
13 | }
14 | if (!data) {
15 | return Data not found!
16 | }
17 | return
18 |
19 |
20 |
21 | Sr. |
22 | Photo |
23 | Name |
24 | Email |
25 | Action |
26 |
27 |
28 |
29 | {data?.map((item, key) => {
30 | return
31 | {key + 1} |
32 | |
33 | {item?.name} |
34 | {item?.email} |
35 |
36 |
37 |
38 |
39 | |
40 |
41 | })}
42 |
43 |
44 |
45 | }
--------------------------------------------------------------------------------
/app/admin/authors/form/contexts/AuthorFormContext.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { getAuthor } from "@/lib/firebase/author/read";
4 | import { createNewAuthor, deleteAuthor, updateAuthor } from "@/lib/firebase/author/write";
5 | import { useRouter, useSearchParams } from "next/navigation";
6 | import { createContext, useContext, useState } from "react";
7 |
8 | const AuthorFormContext = createContext();
9 |
10 | export default function AuthorFormContextProvider({ children }) {
11 | const router = useRouter();
12 |
13 | const [data, setData] = useState({});
14 | const [isLoading, setIsLoading] = useState(false);
15 | const [error, setError] = useState(null);
16 | const [isDone, setIsDone] = useState(false);
17 | const [image, setImage] = useState(null);
18 |
19 | const handleData = (key, value) => {
20 | setIsDone(false)
21 | setData({
22 | ...data,
23 | [key]: value,
24 | })
25 | }
26 |
27 | const handleCreate = async () => {
28 | setError(null)
29 | setIsLoading(true)
30 | setIsDone(false)
31 | try {
32 | await createNewAuthor({ data: data, image: image });
33 | setIsDone(true)
34 | } catch (error) {
35 | setError(error?.message)
36 | }
37 | setIsLoading(false)
38 | }
39 |
40 | const handleUpdate = async () => {
41 | setError(null)
42 | setIsLoading(true)
43 | setIsDone(false)
44 | try {
45 | await updateAuthor({ data: data, image: image });
46 | setIsDone(true)
47 | } catch (error) {
48 | setError(error?.message)
49 | }
50 | setIsLoading(false)
51 | }
52 |
53 | const handleDelete = async (id) => {
54 | setError(null)
55 | setIsLoading(true)
56 | setIsDone(false)
57 | try {
58 | await deleteAuthor(id);
59 | setIsDone(true);
60 | router.push('/admin/authors');
61 | } catch (error) {
62 | setError(error?.message)
63 | }
64 | setIsLoading(false)
65 | }
66 |
67 | const fetchData = async (id) => {
68 | setError(null)
69 | setIsLoading(true)
70 | setIsDone(false)
71 | try {
72 | const res = await getAuthor(id);
73 | if (res.exists()) {
74 | setData(res.data());
75 | } else {
76 | throw new Error(`No Category found from id ${id}`)
77 | }
78 |
79 | } catch (error) {
80 | setError(error?.message)
81 | }
82 | setIsLoading(false)
83 | }
84 |
85 |
86 | return {children}
101 | }
102 |
103 | export const useAuthorForm = () => useContext(AuthorFormContext);
--------------------------------------------------------------------------------
/app/admin/authors/form/layout.jsx:
--------------------------------------------------------------------------------
1 | import AuthorFormContextProvider from "./contexts/AuthorFormContext";
2 |
3 | export default function Layout({ children }) {
4 | return {children}
5 | }
--------------------------------------------------------------------------------
/app/admin/authors/form/page.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useSearchParams } from "next/navigation";
4 | import { useEffect } from "react";
5 | import { useAuthorForm } from "./contexts/AuthorFormContext";
6 |
7 | export default function Page() {
8 | const searchParams = useSearchParams();
9 | const updateAuthorId = searchParams.get('id')
10 |
11 | const {
12 | data,
13 | isLoading,
14 | error,
15 | isDone,
16 | handleData,
17 | handleCreate,
18 | handleUpdate,
19 | handleDelete,
20 | image,
21 | setImage,
22 | fetchData,
23 | } = useAuthorForm();
24 |
25 | useEffect(() => {
26 | if (updateAuthorId) {
27 | fetchData(updateAuthorId);
28 | }
29 | }, [updateAuthorId])
30 |
31 |
32 | return
33 |
34 | {updateAuthorId &&
35 |
Update
36 | }
37 | {!updateAuthorId &&
38 |
Create
39 | }
40 |
Author | Form
41 |
42 |
124 |
125 | }
--------------------------------------------------------------------------------
/app/admin/authors/page.jsx:
--------------------------------------------------------------------------------
1 | import { CirclePlus } from 'lucide-react';
2 | import Link from 'next/link'
3 | import AuthorsListView from './components/AuthorsListView';
4 |
5 | export default function Page() {
6 | return
7 |
8 |
Authors
9 |
10 |
14 |
15 |
16 |
17 |
18 | }
--------------------------------------------------------------------------------
/app/admin/categories/components/CategoriesListView.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useCategories } from "@/lib/firebase/category/read"
4 | import Link from "next/link"
5 |
6 | export default function CategoriesListView() {
7 | const { data, error, isLoading } = useCategories();
8 | if (isLoading) {
9 | return Loading...
10 | }
11 | if (error) {
12 | return {error}
13 | }
14 | if (!data) {
15 | return Data not found!
16 | }
17 | return
18 |
19 |
20 |
21 | Sr. |
22 | Icon |
23 | Name |
24 | Slug |
25 | Action |
26 |
27 |
28 |
29 | {data?.map((item, key) => {
30 | return
31 | {key + 1} |
32 | |
33 | {item?.name} |
34 | {item?.slug} |
35 |
36 |
37 |
38 |
39 | |
40 |
41 | })}
42 |
43 |
44 |
45 | }
--------------------------------------------------------------------------------
/app/admin/categories/form/contexts/CategoryFormContext.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { getCategory } from "@/lib/firebase/category/read";
4 | import { createNewCategory, deleteCategory, updateCategory } from "@/lib/firebase/category/write";
5 | import { useRouter, useSearchParams } from "next/navigation";
6 | import { createContext, useContext, useState } from "react";
7 |
8 | const CategoryFormContext = createContext();
9 |
10 | export default function CategoryFormContextProvider({ children }) {
11 | const router = useRouter();
12 |
13 | const [data, setData] = useState({});
14 | const [isLoading, setIsLoading] = useState(false);
15 | const [error, setError] = useState(null);
16 | const [isDone, setIsDone] = useState(false);
17 | const [image, setImage] = useState(null);
18 |
19 | const handleData = (key, value) => {
20 | setIsDone(false)
21 | setData({
22 | ...data,
23 | [key]: value,
24 | })
25 | }
26 |
27 | const handleCreate = async () => {
28 | setError(null)
29 | setIsLoading(true)
30 | setIsDone(false)
31 | try {
32 | await createNewCategory({ data: data, image: image });
33 | setIsDone(true)
34 | } catch (error) {
35 | setError(error?.message)
36 | }
37 | setIsLoading(false)
38 | }
39 |
40 | const handleUpdate = async () => {
41 | setError(null)
42 | setIsLoading(true)
43 | setIsDone(false)
44 | try {
45 | await updateCategory({ data: data, image: image });
46 | setIsDone(true)
47 | } catch (error) {
48 | setError(error?.message)
49 | }
50 | setIsLoading(false)
51 | }
52 |
53 | const handleDelete = async (id) => {
54 | setError(null)
55 | setIsLoading(true)
56 | setIsDone(false)
57 | try {
58 | await deleteCategory(id);
59 | setIsDone(true);
60 | router.push('/admin/categories');
61 | } catch (error) {
62 | setError(error?.message)
63 | }
64 | setIsLoading(false)
65 | }
66 |
67 | const fetchData = async (id) => {
68 | setError(null)
69 | setIsLoading(true)
70 | setIsDone(false)
71 | try {
72 | const res = await getCategory(id);
73 | if (res.exists()) {
74 | setData(res.data());
75 | } else {
76 | throw new Error(`No Category found from id ${id}`)
77 | }
78 |
79 | } catch (error) {
80 | setError(error?.message)
81 | }
82 | setIsLoading(false)
83 | }
84 |
85 |
86 | return {children}
101 | }
102 |
103 | export const useCategoryForm = () => useContext(CategoryFormContext);
--------------------------------------------------------------------------------
/app/admin/categories/form/layout.jsx:
--------------------------------------------------------------------------------
1 | import CategoryFormContextProvider from "./contexts/CategoryFormContext";
2 |
3 | export default function Layout({ children }) {
4 | return {children}
5 | }
--------------------------------------------------------------------------------
/app/admin/categories/form/page.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useSearchParams } from "next/navigation";
4 | import { useCategoryForm } from "./contexts/CategoryFormContext";
5 | import { useEffect } from "react";
6 |
7 | export default function Page() {
8 | const searchParams = useSearchParams();
9 | const updateCategoryId = searchParams.get('id')
10 |
11 | const {
12 | data,
13 | isLoading,
14 | error,
15 | isDone,
16 | handleData,
17 | handleCreate,
18 | handleUpdate,
19 | handleDelete,
20 | image,
21 | setImage,
22 | fetchData,
23 | } = useCategoryForm();
24 |
25 | useEffect(() => {
26 | if (updateCategoryId) {
27 | fetchData(updateCategoryId);
28 | }
29 | }, [updateCategoryId])
30 |
31 |
32 | return
33 |
34 | {updateCategoryId &&
35 |
Update
36 | }
37 | {!updateCategoryId &&
38 |
Create
39 | }
40 |
Category | Form
41 |
42 |
124 |
125 | }
--------------------------------------------------------------------------------
/app/admin/categories/page.jsx:
--------------------------------------------------------------------------------
1 | import { CirclePlus } from 'lucide-react';
2 | import Link from 'next/link'
3 | import CategoriesListView from './components/CategoriesListView';
4 |
5 | export default function Page() {
6 | return
7 |
8 |
Categories
9 |
10 |
14 |
15 |
16 |
17 |
18 | }
--------------------------------------------------------------------------------
/app/admin/components/CountCard.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import useCollectionCount from "@/lib/firebase/count"
4 |
5 | export default function CountCard({ path, name, icon }) {
6 | const { data, isLoading, error } = useCollectionCount({ path: path })
7 | if (isLoading) {
8 | return Loading ...
9 | }
10 | if (error) {
11 | return {error}
12 | }
13 | return
14 | {icon}
15 |
16 |
{name}
17 | {data}
18 |
19 |
20 | }
--------------------------------------------------------------------------------
/app/admin/components/Sidebar.jsx:
--------------------------------------------------------------------------------
1 | import { Gauge, LayoutList, Layers2, User } from 'lucide-react';
2 | import Link from 'next/link'
3 |
4 | export default function Sidebar() {
5 | const link = [
6 | {
7 | name: 'Dashboard',
8 | link: '/admin',
9 | icon: ,
10 | },
11 | {
12 | name: 'Posts',
13 | link: '/admin/posts',
14 | icon: ,
15 | },
16 | {
17 | name: 'Categories',
18 | link: '/admin/categories',
19 | icon: ,
20 | },
21 | {
22 | name: 'Authors',
23 | link: '/admin/authors',
24 | icon: ,
25 | },
26 | ]
27 | return
28 |
29 | {link.map((item) => {
30 | return
31 | -
32 | {item.icon}
33 | {item.name}
34 |
35 |
36 | })}
37 |
38 |
39 | }
--------------------------------------------------------------------------------
/app/admin/layout.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import AuthContextProvider, { useAuth } from "@/lib/contexts/AuthContext";
4 | import Sidebar from "./components/Sidebar";
5 | import { useAdmin } from "@/lib/firebase/admin/read";
6 |
7 | export default function Layout({ children }) {
8 | return
9 | {children}
10 |
11 | }
12 |
13 | function InnerLayout({ children }) {
14 | const { user, isLoading: authIsLoading } = useAuth();
15 | const { data, error, isLoading } = useAdmin({ uid: user?.uid })
16 | if (authIsLoading || isLoading) {
17 | return Loading ...
18 | }
19 | if (error) {
20 | return {error}
21 | }
22 | if (!data) {
23 | return
24 |
You are not admin
25 |
26 | }
27 | return <>
28 |
29 |
30 | {children}
31 |
32 | >
33 | }
--------------------------------------------------------------------------------
/app/admin/page.jsx:
--------------------------------------------------------------------------------
1 | import CountCard from "./components/CountCard";
2 | import { StickyNote, UserRound, List } from 'lucide-react'
3 |
4 | export default function Page() {
5 | return
6 |
7 | } />
8 | } />
9 | } />
10 |
11 |
12 | }
--------------------------------------------------------------------------------
/app/admin/posts/components/PostListView.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { usePosts } from "@/lib/firebase/post/read";
4 | import Link from "next/link"
5 |
6 | export default function PostListView() {
7 | const { data, error, isLoading } = usePosts();
8 | if (isLoading) {
9 | return Loading...
10 | }
11 | if (error) {
12 | return {error}
13 | }
14 | if (!data) {
15 | return Data not found!
16 | }
17 | return
18 |
19 |
20 |
21 | Sr. |
22 | Image |
23 | Title |
24 | Slug |
25 | Action |
26 |
27 |
28 |
29 | {data?.map((item, key) => {
30 | return
31 | {key + 1} |
32 | |
33 | {item?.title} |
34 | {item?.slug} |
35 |
36 |
37 |
38 |
39 | |
40 |
41 | })}
42 |
43 |
44 |
45 | }
--------------------------------------------------------------------------------
/app/admin/posts/form/components/RTEField.jsx:
--------------------------------------------------------------------------------
1 |
2 | import { useState } from 'react';
3 | import dynamic from 'next/dynamic';
4 | import 'react-quill/dist/quill.snow.css';
5 | import { usePostForm } from '../contexts/PostFormContext';
6 |
7 | const ReactQuill = dynamic(() => import('react-quill'), { ssr: false });
8 |
9 | const modules = {
10 | toolbar: {
11 | container: [
12 | [{ header: [1, 2, false] }],
13 | ['bold', 'italic', 'underline', 'strike', 'blockquote'],
14 | [{ size: ['extra-small', 'small', 'medium', 'large'] }],
15 | [{ list: 'ordered' }, { list: 'bullet' }],
16 | ['link', 'image', 'video'],
17 | [{ color: [] }, { background: [] }],
18 | ['clean'],
19 | ],
20 | },
21 | };
22 |
23 | export function RTEField() {
24 | const { data, handleData } = usePostForm();
25 |
26 | const handleChange = (value) => {
27 | handleData('content', value);
28 | };
29 |
30 | return (
31 |
32 |
38 |
39 | );
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/app/admin/posts/form/contexts/PostFormContext.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { getPost } from "@/lib/firebase/post/read";
4 | import { createNewPost, deletePost, updatePost } from "@/lib/firebase/post/write";
5 | import { useRouter } from "next/navigation";
6 | import { createContext, useContext, useState } from "react";
7 |
8 | const PostFormContext = createContext();
9 |
10 | export default function PostFormContextProvider({ children }) {
11 | const router = useRouter();
12 |
13 | const [data, setData] = useState({});
14 | const [isLoading, setIsLoading] = useState(false);
15 | const [error, setError] = useState(null);
16 | const [isDone, setIsDone] = useState(false);
17 | const [image, setImage] = useState(null);
18 |
19 | const handleData = (key, value) => {
20 | setIsDone(false)
21 | setData({
22 | ...data,
23 | [key]: value,
24 | })
25 | }
26 |
27 | const handleCreate = async () => {
28 | setError(null)
29 | setIsLoading(true)
30 | setIsDone(false)
31 | try {
32 | await createNewPost({ data: data, image: image });
33 | setIsDone(true)
34 | } catch (error) {
35 | setError(error?.message)
36 | }
37 | setIsLoading(false)
38 | }
39 |
40 | const handleUpdate = async () => {
41 | setError(null)
42 | setIsLoading(true)
43 | setIsDone(false)
44 | try {
45 | await updatePost({ data: data, image: image });
46 | setIsDone(true)
47 | } catch (error) {
48 | setError(error?.message)
49 | }
50 | setIsLoading(false)
51 | }
52 |
53 | const handleDelete = async (id) => {
54 | setError(null)
55 | setIsLoading(true)
56 | setIsDone(false)
57 | try {
58 | await deletePost(id);
59 | setIsDone(true);
60 | router.push('/admin/posts');
61 | } catch (error) {
62 | setError(error?.message)
63 | }
64 | setIsLoading(false)
65 | }
66 |
67 | const fetchData = async (id) => {
68 | setError(null)
69 | setIsLoading(true)
70 | setIsDone(false)
71 | try {
72 | const res = await getPost(id);
73 | if (res.exists()) {
74 | setData(res.data());
75 | } else {
76 | throw new Error(`No Post found from id ${id}`)
77 | }
78 |
79 | } catch (error) {
80 | setError(error?.message)
81 | }
82 | setIsLoading(false)
83 | }
84 |
85 |
86 | return {children}
101 | }
102 |
103 | export const usePostForm = () => useContext(PostFormContext);
--------------------------------------------------------------------------------
/app/admin/posts/form/layout.jsx:
--------------------------------------------------------------------------------
1 | import PostFormContextProvider from "./contexts/PostFormContext";
2 |
3 | export default function Layout({ children }) {
4 | return {children}
5 | }
--------------------------------------------------------------------------------
/app/admin/posts/form/page.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useSearchParams } from "next/navigation";
4 | import { useEffect, useRef, useState } from "react";
5 | import { usePostForm } from "./contexts/PostFormContext";
6 | import { useCategories } from "@/lib/firebase/category/read";
7 | import { useAuthors } from "@/lib/firebase/author/read";
8 | import { RTEField } from "./components/RTEField";
9 |
10 | export default function Page() {
11 | const searchParams = useSearchParams();
12 | const updatePostId = searchParams.get('id')
13 |
14 | const {
15 | data,
16 | isLoading,
17 | error,
18 | isDone,
19 | handleData,
20 | handleCreate,
21 | handleUpdate,
22 | handleDelete,
23 | image,
24 | setImage,
25 | fetchData,
26 | } = usePostForm();
27 |
28 | useEffect(() => {
29 | if (updatePostId) {
30 | fetchData(updatePostId);
31 | }
32 | }, [updatePostId])
33 |
34 |
35 | return
36 |
37 | {updatePostId &&
38 |
Update
39 | }
40 | {!updatePostId &&
41 |
Create
42 | }
43 |
Posts | Form
44 |
45 |
135 |
136 | }
137 |
138 | function SelectCategoryField() {
139 | const {
140 | data,
141 | handleData,
142 | } = usePostForm();
143 | const { data: categories } = useCategories();
144 | return
145 |
146 |
160 |
161 | }
162 |
163 |
164 | function SelectAuthorField() {
165 | const {
166 | data,
167 | handleData,
168 | } = usePostForm();
169 | const { data: authors } = useAuthors();
170 | return
171 |
172 |
186 |
187 | }
188 |
--------------------------------------------------------------------------------
/app/admin/posts/page.jsx:
--------------------------------------------------------------------------------
1 | import { CirclePlus } from 'lucide-react';
2 | import Link from 'next/link'
3 | import PostListView from './components/PostListView';
4 |
5 | export default function Page() {
6 | return
7 |
8 |
Posts
9 |
10 |
14 |
15 |
16 |
17 |
18 | }
--------------------------------------------------------------------------------
/app/categories/[categoryId]/page.jsx:
--------------------------------------------------------------------------------
1 | import { PostCard } from "@/app/components/PostListView";
2 | import { getCategory } from "@/lib/firebase/category/read_server";
3 | import { getAllPostsWithCategory } from "@/lib/firebase/post/read_server";
4 |
5 | export default async function Page({ params }) {
6 | const { categoryId: categoryIdEncoded } = params;
7 | const categoryId = decodeURI(categoryIdEncoded);
8 | const posts = await getAllPostsWithCategory(categoryId)
9 | return
10 |
11 |
Categories /
12 |
13 |
14 |
15 | {posts?.map((post, key) => {
16 | return
17 | })}
18 |
19 |
20 | }
21 |
22 | async function CategoryCard({ categoryId }) {
23 | const category = await getCategory(categoryId);
24 | return
25 |

26 |
{category?.name}
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/app/categories/page.jsx:
--------------------------------------------------------------------------------
1 | import { getAllCategories } from "@/lib/firebase/category/read_server"
2 | import Link from 'next/link'
3 |
4 | export const dynamic = 'force-dynamic'
5 |
6 | export default async function Page() {
7 | const categories = await getAllCategories();
8 |
9 | return
10 |
11 | {categories?.map((category, key) => {
12 | return
13 | })}
14 |
15 |
16 | }
17 |
18 | function CategoryCard({ category }) {
19 | return
20 |
21 |

22 |
{category?.name}
23 |
24 |
25 | }
--------------------------------------------------------------------------------
/app/components/Header/Header.jsx:
--------------------------------------------------------------------------------
1 | import { Home, List, MessageCircle } from 'lucide-react'
2 | import LoginButton from './LoginButton'
3 | import AuthContextProvider from '@/lib/contexts/AuthContext'
4 | import Link from 'next/link';
5 |
6 | export default function Header() {
7 | return
35 | }
--------------------------------------------------------------------------------
/app/components/Header/LoginButton.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { useAuth } from "@/lib/contexts/AuthContext"
4 | import Link from 'next/link'
5 |
6 | export default function LoginButton() {
7 |
8 | const {
9 | user,
10 | isLoading,
11 | error,
12 | handleSignInWithGoogle,
13 | handleLogout,
14 | } = useAuth();
15 |
16 | if (isLoading) {
17 | return Loading...
18 | }
19 |
20 | if (user) {
21 | return
22 |
30 |
31 |
32 |

33 |
34 |
{user?.displayName}
35 | {user?.email}
36 |
37 |
38 |
39 |
40 | }
41 |
42 | return
43 |
51 |
52 | }
--------------------------------------------------------------------------------
/app/components/PostListView.jsx:
--------------------------------------------------------------------------------
1 | import { getAuthor } from "@/lib/firebase/author/read_server";
2 | import { getCategory } from "@/lib/firebase/category/read_server";
3 | import { getAllPosts } from "@/lib/firebase/post/read_server"
4 | import Link from 'next/link'
5 |
6 | export const dynamic = 'force-dynamic'
7 |
8 | export default async function PostListView() {
9 | const posts = await getAllPosts();
10 | if (!posts) {
11 | return
12 |
Posts Not Available!
13 |
14 | }
15 | return
16 |
17 | {posts?.map((post, key) => {
18 | return
19 | })}
20 |
21 |
22 | }
23 |
24 | export function PostCard({ post }) {
25 | return
26 |
27 |
28 |
29 |
30 |
31 |

32 |
33 |
{post?.title}
34 |
35 |
36 |
{post?.timestamp?.toDate()?.toLocaleDateString()}
37 |
38 |
39 |
40 | }
41 |
42 | async function AuthorCard({ authorId }) {
43 | const author = await getAuthor(authorId);
44 | return
45 |

46 |
{author?.name}
47 |
48 | }
49 |
50 | async function CategoryCard({ categoryId }) {
51 | const category = await getCategory(categoryId);
52 | return
53 |

54 |
{category?.name}
55 |
56 | }
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RajendraAVerma/blog-website-nextjs/b1bd1a4a3b271e5aba7bd165f8d21dc97393f746/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/app/layout.js:
--------------------------------------------------------------------------------
1 | import { Inter } from "next/font/google";
2 | import "./globals.css";
3 | import Header from "./components/Header/Header";
4 |
5 | const inter = Inter({ subsets: ["latin"] });
6 |
7 | export const metadata = {
8 | title: "Lyeana Blog Webiste",
9 | description: "Generated by create next app",
10 | };
11 |
12 | export default function RootLayout({ children }) {
13 | return (
14 |
15 |
16 |
17 | {children}
18 |
19 |
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/app/page.js:
--------------------------------------------------------------------------------
1 | import PostListView from "./components/PostListView";
2 |
3 | export const dynamic = 'force-dynamic'
4 |
5 | export default function Home() {
6 | return (
7 |
8 |
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/app/posts/[postId]/page.jsx:
--------------------------------------------------------------------------------
1 | import { getAuthor } from "@/lib/firebase/author/read_server";
2 | import { getCategory } from "@/lib/firebase/category/read_server";
3 | import { getPost } from "@/lib/firebase/post/read_server";
4 |
5 | export async function generateMetadata({ params }) {
6 | const { postId } = params;
7 | const post = await getPost(postId)
8 |
9 | return {
10 | title: post?.title,
11 | openGraph: {
12 | images: [post?.imageURL],
13 | },
14 | }
15 | }
16 |
17 | export default async function Page({ params }) {
18 | const { postId } = params;
19 | const post = await getPost(postId)
20 | return
21 |
22 |
23 | {post?.title}
24 |
25 |
26 |
27 |
{post?.timestamp?.toDate()?.toLocaleDateString()}
28 |
29 |
30 |
31 |
32 | }
33 |
34 | async function AuthorCard({ authorId }) {
35 | const author = await getAuthor(authorId);
36 | return
37 |

38 |
{author?.name}
39 |
40 | }
41 |
42 | async function CategoryCard({ categoryId }) {
43 | const category = await getCategory(categoryId);
44 | return
45 |
46 |

47 |
{category?.name}
48 |
49 |
50 | }
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "paths": {
4 | "@/*": ["./*"]
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/lib/contexts/AuthContext.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { GoogleAuthProvider, onAuthStateChanged, signInWithPopup, signOut } from "firebase/auth";
4 | import { createContext, useContext, useEffect, useState } from "react";
5 | import { auth } from "../firebase";
6 |
7 | const AuthContext = createContext();
8 |
9 | export default function AuthContextProvider({ children }) {
10 | const [user, setUser] = useState(null);
11 | const [isLoading, setIsLoading] = useState(false);
12 | const [error, setError] = useState(null);
13 |
14 | useEffect(() => {
15 | setIsLoading(true)
16 | const unsub = onAuthStateChanged(auth, (user) => {
17 | if (user) {
18 | setUser(user);
19 | } else {
20 | setUser(null);
21 | }
22 | setIsLoading(false)
23 | });
24 | return () => unsub();
25 | }, [])
26 |
27 | const handleSignInWithGoogle = async () => {
28 | setIsLoading(true)
29 | try {
30 | await signInWithPopup(auth, new GoogleAuthProvider());
31 | } catch (error) {
32 | setError(error?.message)
33 | }
34 | setIsLoading(false)
35 | }
36 |
37 | const handleLogout = async () => {
38 | setIsLoading(true)
39 | try {
40 | await signOut(auth);
41 | } catch (error) {
42 | setError(error?.message)
43 | }
44 | setIsLoading(false)
45 | }
46 |
47 | return
56 | {children}
57 |
58 | }
59 |
60 | export const useAuth = () => useContext(AuthContext);
--------------------------------------------------------------------------------
/lib/firebase.jsx:
--------------------------------------------------------------------------------
1 | import { initializeApp } from "firebase/app";
2 | import { getFirestore } from 'firebase/firestore'
3 | import { getAuth } from 'firebase/auth'
4 | import { getStorage } from 'firebase/storage'
5 |
6 | const firebaseConfig = {
7 | apiKey: process.env.NEXT_PUBLIC_API_KEY,
8 | authDomain: process.env.NEXT_PUBLIC_AUTH_DOMAIN,
9 | projectId: process.env.NEXT_PUBLIC_PROJECT_ID,
10 | storageBucket: process.env.NEXT_PUBLIC_STORAGE_BUCKET,
11 | messagingSenderId: process.env.NEXT_PUBLIC_MESSANGING_ID,
12 | appId: process.env.NEXT_PUBLIC_APP_ID,
13 | };
14 |
15 | const app = initializeApp(firebaseConfig);
16 |
17 | export const db = getFirestore();
18 | export const auth = getAuth();
19 | export const storage = getStorage();
--------------------------------------------------------------------------------
/lib/firebase/admin/read.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { db } from '@/lib/firebase'
4 | import { collection, doc, getDoc, onSnapshot } from 'firebase/firestore'
5 | import useSWRSubscription from 'swr/subscription'
6 |
7 | export function useAdmin({ uid }) {
8 | const { data, error } = useSWRSubscription([`admins/${uid}`], ([path], { next }) => {
9 | const ref = doc(db, path);
10 |
11 | const unsub = onSnapshot(ref, (snaps) => {
12 | next(null, snaps.exists() ? snaps.data() : null)
13 | }, (error) => {
14 | next(error?.message)
15 | })
16 | return () => unsub();
17 | })
18 | return {
19 | data,
20 | error,
21 | isLoading: data === undefined ? true : false,
22 | }
23 | }
--------------------------------------------------------------------------------
/lib/firebase/author/read.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { db } from '@/lib/firebase'
4 | import { collection, doc, getDoc, onSnapshot } from 'firebase/firestore'
5 | import useSWRSubscription from 'swr/subscription'
6 |
7 | export function useAuthors() {
8 | const { data, error } = useSWRSubscription(['authors'], ([path], { next }) => {
9 | const ref = collection(db, path);
10 |
11 | const unsub = onSnapshot(ref, (snaps) => {
12 | next(null, snaps.docs.map((v) => v.data()))
13 | }, (error) => {
14 | next(error?.message)
15 | })
16 | return () => unsub();
17 | })
18 | return {
19 | data,
20 | error,
21 | isLoading: data === undefined ? true : false,
22 | }
23 | }
24 |
25 | export const getAuthor = async (id)=>{
26 | return await getDoc(doc(db, `authors/${id}`));
27 | }
--------------------------------------------------------------------------------
/lib/firebase/author/read_server.jsx:
--------------------------------------------------------------------------------
1 | import { db } from "@/lib/firebase";
2 | import { doc, getDoc } from "firebase/firestore";
3 |
4 | export const getAuthor = async (id) => {
5 | return await getDoc(doc(db, `authors/${id}`)).then((snap) => snap.data());
6 | }
--------------------------------------------------------------------------------
/lib/firebase/author/write.jsx:
--------------------------------------------------------------------------------
1 | import { db, storage } from "@/lib/firebase";
2 | import { Timestamp, collection, deleteDoc, doc, setDoc, updateDoc } from "firebase/firestore";
3 | import { getDownloadURL, ref, uploadBytes } from "firebase/storage";
4 |
5 | export const createNewAuthor = async ({ data, image }) => {
6 | if (!data?.name) {
7 | throw new Error("Name is undefined");
8 | }
9 | if (!image) {
10 | throw new Error("Image is not selected");
11 | }
12 | const id = doc(collection(db, 'ids')).id;
13 |
14 | const imageRef = ref(storage, `authors/${id}.png`);
15 | await uploadBytes(imageRef, image);
16 | const imageURL = await getDownloadURL(imageRef);
17 |
18 | const firestoreRef = doc(db, `authors/${id}`)
19 | await setDoc(firestoreRef, {
20 | ...data,
21 | id: id,
22 | photoURL: imageURL,
23 | timestamp: Timestamp.now(),
24 | });
25 | }
26 |
27 | export const updateAuthor = async ({ data, image }) => {
28 | if (!data?.name) {
29 | throw new Error("Name is undefined");
30 | }
31 | var imageURL = data?.photoURL;
32 |
33 | if (image) {
34 | const imageRef = ref(storage, `authors/${data?.id}.png`);
35 | await uploadBytes(imageRef, image);
36 | imageURL = await getDownloadURL(imageRef);
37 | }
38 |
39 | const firestoreRef = doc(db, `authors/${data?.id}`);
40 |
41 | await updateDoc(firestoreRef, {
42 | ...data,
43 | photoURL: imageURL,
44 | timestamp: Timestamp.now(),
45 | });
46 | }
47 |
48 | export const deleteAuthor = async (id) => {
49 | if (!id) {
50 | throw new Error("Id is required");
51 | }
52 | await deleteDoc(doc(db, `authors/${id}`));
53 | }
--------------------------------------------------------------------------------
/lib/firebase/category/read.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { db } from '@/lib/firebase'
4 | import { collection, doc, getDoc, onSnapshot } from 'firebase/firestore'
5 | import useSWRSubscription from 'swr/subscription'
6 |
7 | export function useCategories() {
8 | const { data, error } = useSWRSubscription(['categories'], ([path], { next }) => {
9 | const ref = collection(db, path);
10 |
11 | const unsub = onSnapshot(ref, (snaps) => {
12 | next(null, snaps.docs.map((v) => v.data()))
13 | }, (error) => {
14 | next(error?.message)
15 | })
16 | return () => unsub();
17 | })
18 | return {
19 | data,
20 | error,
21 | isLoading: data === undefined ? true : false,
22 | }
23 | }
24 |
25 | export const getCategory = async (id)=>{
26 | return await getDoc(doc(db, `categories/${id}`));
27 | }
--------------------------------------------------------------------------------
/lib/firebase/category/read_server.jsx:
--------------------------------------------------------------------------------
1 | import { db } from "@/lib/firebase";
2 | import { collection, doc, getDoc, getDocs } from "firebase/firestore";
3 |
4 | export const getCategory = async (id) => {
5 | return await getDoc(doc(db, `categories/${id}`)).then((snap) => snap.data());
6 | }
7 |
8 | export const getAllCategories = async () => {
9 | return await getDocs(collection(db, 'categories')).then((snaps) => snaps.docs.map((d) => d.data()));
10 | }
--------------------------------------------------------------------------------
/lib/firebase/category/write.jsx:
--------------------------------------------------------------------------------
1 | import { db, storage } from "@/lib/firebase";
2 | import { Timestamp, deleteDoc, doc, setDoc, updateDoc } from "firebase/firestore";
3 | import { getDownloadURL, ref, uploadBytes } from "firebase/storage";
4 |
5 | export const createNewCategory = async ({ data, image }) => {
6 | if (!data?.name) {
7 | throw new Error("Name is undefined");
8 | }
9 | if (!data?.slug) {
10 | throw new Error("Slug is undefined");
11 | }
12 | if (!image) {
13 | throw new Error("Image is not selected");
14 | }
15 | const imageRef = ref(storage, `categories/${data?.slug}.png`);
16 | await uploadBytes(imageRef, image);
17 | const imageURL = await getDownloadURL(imageRef);
18 |
19 | const firestoreRef = doc(db, `categories/${data?.slug}`)
20 | await setDoc(firestoreRef, {
21 | ...data,
22 | id: data?.slug,
23 | iconURL: imageURL,
24 | timestamp: Timestamp.now(),
25 | });
26 | }
27 |
28 | export const updateCategory = async ({ data, image }) => {
29 | if (!data?.name) {
30 | throw new Error("Name is undefined");
31 | }
32 | if (!data?.slug) {
33 | throw new Error("Slug is undefined");
34 | }
35 | var imageURL = data?.iconURL;
36 |
37 | if (image) {
38 | const imageRef = ref(storage, `categories/${data?.slug}.png`);
39 | await uploadBytes(imageRef, image);
40 | imageURL = await getDownloadURL(imageRef);
41 | }
42 |
43 | const firestoreRef = doc(db, `categories/${data?.id}`);
44 |
45 | await updateDoc(firestoreRef, {
46 | ...data,
47 | iconURL: imageURL,
48 | timestamp: Timestamp.now(),
49 | });
50 | }
51 |
52 | export const deleteCategory = async (id) => {
53 | if (!id) {
54 | throw new Error("Id is required");
55 | }
56 | await deleteDoc(doc(db, `categories/${id}`));
57 | }
--------------------------------------------------------------------------------
/lib/firebase/count.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { collection, getCountFromServer } from 'firebase/firestore'
4 | import useSWR from 'swr'
5 | import { db } from '../firebase'
6 |
7 | const fetcher = path => getCountFromServer(collection(db, path)).then((value) => value.data().count)
8 |
9 | export default function useCollectionCount({ path }) {
10 | const { data, error, isLoading } = useSWR(path, fetcher);
11 | return {
12 | data,
13 | error,
14 | isLoading
15 | }
16 | }
--------------------------------------------------------------------------------
/lib/firebase/post/read.jsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { db } from '@/lib/firebase'
4 | import { collection, doc, getDoc, getDocs, onSnapshot } from 'firebase/firestore'
5 | import useSWRSubscription from 'swr/subscription'
6 |
7 | export function usePosts() {
8 | const { data, error } = useSWRSubscription(['posts'], ([path], { next }) => {
9 | const ref = collection(db, path);
10 |
11 | const unsub = onSnapshot(ref, (snaps) => {
12 | next(null, snaps.docs.map((v) => v.data()))
13 | }, (error) => {
14 | next(error?.message)
15 | })
16 | return () => unsub();
17 | })
18 | return {
19 | data,
20 | error,
21 | isLoading: data === undefined ? true : false,
22 | }
23 | }
24 |
25 | export const getPost = async (id) => {
26 | return await getDoc(doc(db, `posts/${id}`));
27 | }
28 |
--------------------------------------------------------------------------------
/lib/firebase/post/read_server.jsx:
--------------------------------------------------------------------------------
1 | import { db } from "@/lib/firebase"
2 | import { collection, doc, getDoc, getDocs, query, where } from "firebase/firestore"
3 |
4 | export const getAllPosts = async () => {
5 | return await getDocs(collection(db, 'posts')).then((snaps) => snaps.docs.map((d) => d.data()))
6 | }
7 |
8 | export const getAllPostsWithCategory = async (categoryId) => {
9 | const q = query(collection(db, 'posts'), where('categoryId', '==', categoryId))
10 | return await getDocs(q).then((snaps) => snaps.docs.map((d) => d.data()))
11 | }
12 |
13 |
14 | export const getPost = async (id) => {
15 | return await getDoc(doc(db, `posts/${id}`)).then((snap) => snap.data());
16 | }
17 |
--------------------------------------------------------------------------------
/lib/firebase/post/write.jsx:
--------------------------------------------------------------------------------
1 | import { db, storage } from "@/lib/firebase";
2 | import { Timestamp, deleteDoc, doc, setDoc, updateDoc } from "firebase/firestore";
3 | import { getDownloadURL, ref, uploadBytes } from "firebase/storage";
4 |
5 | export const createNewPost = async ({ data, image }) => {
6 | if (!data?.title) {
7 | throw new Error("Name is undefined");
8 | }
9 | if (!data?.slug) {
10 | throw new Error("Slug is undefined");
11 | }
12 | if (!image) {
13 | throw new Error("Image is not selected");
14 | }
15 | const imageRef = ref(storage, `posts/${data?.slug}.png`);
16 | await uploadBytes(imageRef, image);
17 | const imageURL = await getDownloadURL(imageRef);
18 |
19 | const firestoreRef = doc(db, `posts/${data?.slug}`)
20 | await setDoc(firestoreRef, {
21 | ...data,
22 | id: data?.slug,
23 | imageURL: imageURL,
24 | timestamp: Timestamp.now(),
25 | });
26 | }
27 |
28 | export const updatePost = async ({ data, image }) => {
29 | if (!data?.title) {
30 | throw new Error("Name is undefined");
31 | }
32 | if (!data?.slug) {
33 | throw new Error("Slug is undefined");
34 | }
35 | var imageURL = data?.imageURL;
36 |
37 | if (image) {
38 | const imageRef = ref(storage, `posts/${data?.slug}.png`);
39 | await uploadBytes(imageRef, image);
40 | imageURL = await getDownloadURL(imageRef);
41 | }
42 |
43 | const firestoreRef = doc(db, `posts/${data?.id}`);
44 |
45 | await updateDoc(firestoreRef, {
46 | ...data,
47 | imageURL: imageURL,
48 | timestamp: Timestamp.now(),
49 | });
50 | }
51 |
52 | export const deletePost = async (id) => {
53 | if (!id) {
54 | throw new Error("Id is required");
55 | }
56 | await deleteDoc(doc(db, `posts/${id}`));
57 | }
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {};
3 |
4 | export default nextConfig;
5 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lyeana_blog",
3 | "version": "0.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "lyeana_blog",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "draft-convert": "^2.1.13",
12 | "draft-js": "^0.11.7",
13 | "firebase": "^10.10.0",
14 | "lucide-react": "^0.365.0",
15 | "next": "14.1.4",
16 | "react": "^18",
17 | "react-dom": "^18",
18 | "react-draft-wysiwyg": "^1.15.0",
19 | "react-quill": "^2.0.0",
20 | "swr": "^2.2.5"
21 | },
22 | "devDependencies": {
23 | "autoprefixer": "^10.0.1",
24 | "postcss": "^8",
25 | "tailwindcss": "^3.3.0"
26 | }
27 | },
28 | "node_modules/@alloc/quick-lru": {
29 | "version": "5.2.0",
30 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
31 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
32 | "dev": true,
33 | "engines": {
34 | "node": ">=10"
35 | },
36 | "funding": {
37 | "url": "https://github.com/sponsors/sindresorhus"
38 | }
39 | },
40 | "node_modules/@babel/runtime": {
41 | "version": "7.24.4",
42 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz",
43 | "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
44 | "dependencies": {
45 | "regenerator-runtime": "^0.14.0"
46 | },
47 | "engines": {
48 | "node": ">=6.9.0"
49 | }
50 | },
51 | "node_modules/@fastify/busboy": {
52 | "version": "2.1.1",
53 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
54 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
55 | "engines": {
56 | "node": ">=14"
57 | }
58 | },
59 | "node_modules/@firebase/analytics": {
60 | "version": "0.10.2",
61 | "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.2.tgz",
62 | "integrity": "sha512-6Gv/Fndih+dOEEfsBJEeKlwxw9EvCO9D/y+yJMasblvCmj78wUVtn+T96zguSrbhfZ2yBhLS1vukYiPg6hI49w==",
63 | "dependencies": {
64 | "@firebase/component": "0.6.6",
65 | "@firebase/installations": "0.6.6",
66 | "@firebase/logger": "0.4.1",
67 | "@firebase/util": "1.9.5",
68 | "tslib": "^2.1.0"
69 | },
70 | "peerDependencies": {
71 | "@firebase/app": "0.x"
72 | }
73 | },
74 | "node_modules/@firebase/analytics-compat": {
75 | "version": "0.2.8",
76 | "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.8.tgz",
77 | "integrity": "sha512-scvzDPIsP9HcLWM77YQD7F3yLQksGvPUzyfqUrPo9XxIx26txJvGMJAS8O8BHa6jIvsjUenaTZ5oXEtKqNZQ9Q==",
78 | "dependencies": {
79 | "@firebase/analytics": "0.10.2",
80 | "@firebase/analytics-types": "0.8.1",
81 | "@firebase/component": "0.6.6",
82 | "@firebase/util": "1.9.5",
83 | "tslib": "^2.1.0"
84 | },
85 | "peerDependencies": {
86 | "@firebase/app-compat": "0.x"
87 | }
88 | },
89 | "node_modules/@firebase/analytics-types": {
90 | "version": "0.8.1",
91 | "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.1.tgz",
92 | "integrity": "sha512-niv/67/EOkTlGUxyiOYfIkysSMGYxkIUHJzT9pNkeIGt6zOz759oCUXOAwwjJzckh11dMBFjIYBmtWrdSgbmJw=="
93 | },
94 | "node_modules/@firebase/app": {
95 | "version": "0.10.0",
96 | "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.10.0.tgz",
97 | "integrity": "sha512-bemcsqQD4teEnCM/+FiK8LFjlfoIFewMY3LOIgxa59ISlkk4zlw4ezz1iLY45yQ6ip6WDwky7cx9UruFBAn6iw==",
98 | "dependencies": {
99 | "@firebase/component": "0.6.6",
100 | "@firebase/logger": "0.4.1",
101 | "@firebase/util": "1.9.5",
102 | "idb": "7.1.1",
103 | "tslib": "^2.1.0"
104 | }
105 | },
106 | "node_modules/@firebase/app-check": {
107 | "version": "0.8.3",
108 | "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.3.tgz",
109 | "integrity": "sha512-nvlsj5oZBtYDjFTygQJ6xpyiYj8Jao2bFFyNJkUUPdg/QB8uhqDeG74P+gUH6iY9qzd1g5ZokmmGsoIhv9tdSQ==",
110 | "dependencies": {
111 | "@firebase/component": "0.6.6",
112 | "@firebase/logger": "0.4.1",
113 | "@firebase/util": "1.9.5",
114 | "tslib": "^2.1.0"
115 | },
116 | "peerDependencies": {
117 | "@firebase/app": "0.x"
118 | }
119 | },
120 | "node_modules/@firebase/app-check-compat": {
121 | "version": "0.3.10",
122 | "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.10.tgz",
123 | "integrity": "sha512-v+jiLG3rQ1fhpIuNIm3WqrL4dkPUIkgOWoic7QABVsZKSAv2YhOFvAenp7IhSP/pz/aiPniJ8G7el/MWieECTg==",
124 | "dependencies": {
125 | "@firebase/app-check": "0.8.3",
126 | "@firebase/app-check-types": "0.5.1",
127 | "@firebase/component": "0.6.6",
128 | "@firebase/logger": "0.4.1",
129 | "@firebase/util": "1.9.5",
130 | "tslib": "^2.1.0"
131 | },
132 | "peerDependencies": {
133 | "@firebase/app-compat": "0.x"
134 | }
135 | },
136 | "node_modules/@firebase/app-check-interop-types": {
137 | "version": "0.3.1",
138 | "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.1.tgz",
139 | "integrity": "sha512-NILZbe6RH3X1pZmJnfOfY2gLIrlKmrkUMMrrK6VSXHcSE0eQv28xFEcw16D198i9JYZpy5Kwq394My62qCMaIw=="
140 | },
141 | "node_modules/@firebase/app-check-types": {
142 | "version": "0.5.1",
143 | "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.1.tgz",
144 | "integrity": "sha512-NqeIcuGzZjl+khpXV0qsyOoaTqLeiG/K0kIDrebol+gb7xpmfOvXXqPEls+1WFBgHcPGdu+XRLhBA7xLzrVdpA=="
145 | },
146 | "node_modules/@firebase/app-compat": {
147 | "version": "0.2.30",
148 | "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.30.tgz",
149 | "integrity": "sha512-S3FI3yx36xq5NYWXv/rqZiEnkQ89QwfGdl26iWZ9skuOGM96DYQUxs/zs7NkfAQcfpXC8f5DuUrE0Rz/0XdTEg==",
150 | "dependencies": {
151 | "@firebase/app": "0.10.0",
152 | "@firebase/component": "0.6.6",
153 | "@firebase/logger": "0.4.1",
154 | "@firebase/util": "1.9.5",
155 | "tslib": "^2.1.0"
156 | }
157 | },
158 | "node_modules/@firebase/app-types": {
159 | "version": "0.9.1",
160 | "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.1.tgz",
161 | "integrity": "sha512-nFGqTYsnDFn1oXf1tCwPAc+hQPxyvBT/QB7qDjwK+IDYThOn63nGhzdUTXxVD9Ca8gUY/e5PQMngeo0ZW/E3uQ=="
162 | },
163 | "node_modules/@firebase/auth": {
164 | "version": "1.7.0",
165 | "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.0.tgz",
166 | "integrity": "sha512-xvyCR3Ivan74AwT/rQOqrYkyu4Ccz6GOFaohi1Pw3gLOpG2WIdC/phc4zdQkLJjmbGFcYNisHyqII2P/H9ZJow==",
167 | "dependencies": {
168 | "@firebase/component": "0.6.6",
169 | "@firebase/logger": "0.4.1",
170 | "@firebase/util": "1.9.5",
171 | "tslib": "^2.1.0",
172 | "undici": "5.28.3"
173 | },
174 | "peerDependencies": {
175 | "@firebase/app": "0.x",
176 | "@react-native-async-storage/async-storage": "^1.18.1"
177 | },
178 | "peerDependenciesMeta": {
179 | "@react-native-async-storage/async-storage": {
180 | "optional": true
181 | }
182 | }
183 | },
184 | "node_modules/@firebase/auth-compat": {
185 | "version": "0.5.5",
186 | "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.5.tgz",
187 | "integrity": "sha512-iAq/wCCEX4TPhZeCOmLxscHh6oZtvJ4g/FcRLynFntW3WOtrWF9/91jq+FsDSSJo9Av8MpnayCbbx+jpGSv4DQ==",
188 | "dependencies": {
189 | "@firebase/auth": "1.7.0",
190 | "@firebase/auth-types": "0.12.1",
191 | "@firebase/component": "0.6.6",
192 | "@firebase/util": "1.9.5",
193 | "tslib": "^2.1.0",
194 | "undici": "5.28.3"
195 | },
196 | "peerDependencies": {
197 | "@firebase/app-compat": "0.x"
198 | }
199 | },
200 | "node_modules/@firebase/auth-interop-types": {
201 | "version": "0.2.2",
202 | "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.2.tgz",
203 | "integrity": "sha512-k3NA28Jfoo0+o391bFjoV9X5QLnUL1WbLhZZRbTQhZdmdGYJfX8ixtNNlHsYQ94bwG0QRbsmvkzDnzuhHrV11w=="
204 | },
205 | "node_modules/@firebase/auth-types": {
206 | "version": "0.12.1",
207 | "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.1.tgz",
208 | "integrity": "sha512-B3dhiWRWf/njWosx4zdhSEoD4WHJmr4zbnBw6t20mRG/IZ4u0rWUBlMP1vFjhMstKIow1XmoGhTwD65X5ZXLjw==",
209 | "peerDependencies": {
210 | "@firebase/app-types": "0.x",
211 | "@firebase/util": "1.x"
212 | }
213 | },
214 | "node_modules/@firebase/component": {
215 | "version": "0.6.6",
216 | "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.6.tgz",
217 | "integrity": "sha512-pp7sWqHmAAlA3os6ERgoM3k5Cxff510M9RLXZ9Mc8KFKMBc2ct3RkZTWUF7ixJNvMiK/iNgRLPDrLR2gtRJ9iQ==",
218 | "dependencies": {
219 | "@firebase/util": "1.9.5",
220 | "tslib": "^2.1.0"
221 | }
222 | },
223 | "node_modules/@firebase/database": {
224 | "version": "1.0.4",
225 | "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.4.tgz",
226 | "integrity": "sha512-k84cXh+dtpzvY6yOhfyr1B+I1vjvSMtmlqotE0lTNVylc8m5nmOohjzpTLEQDrBWvwACX/VP5fEyajAdmnOKqA==",
227 | "dependencies": {
228 | "@firebase/app-check-interop-types": "0.3.1",
229 | "@firebase/auth-interop-types": "0.2.2",
230 | "@firebase/component": "0.6.6",
231 | "@firebase/logger": "0.4.1",
232 | "@firebase/util": "1.9.5",
233 | "faye-websocket": "0.11.4",
234 | "tslib": "^2.1.0"
235 | }
236 | },
237 | "node_modules/@firebase/database-compat": {
238 | "version": "1.0.4",
239 | "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.4.tgz",
240 | "integrity": "sha512-GEEDAvsSMAkqy0BIFSVtFzoOIIcKHFfDM4aXHtWL/JCaNn4OOjH7td73jDfN3ALvpIN4hQki0FcxQ89XjqaTjQ==",
241 | "dependencies": {
242 | "@firebase/component": "0.6.6",
243 | "@firebase/database": "1.0.4",
244 | "@firebase/database-types": "1.0.2",
245 | "@firebase/logger": "0.4.1",
246 | "@firebase/util": "1.9.5",
247 | "tslib": "^2.1.0"
248 | }
249 | },
250 | "node_modules/@firebase/database-types": {
251 | "version": "1.0.2",
252 | "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.2.tgz",
253 | "integrity": "sha512-JRigr5JNLEHqOkI99tAGHDZF47469/cJz1tRAgGs8Feh+3ZmQy/vVChSqwMp2DuVUGp9PlmGsNSlpINJ/hDuIA==",
254 | "dependencies": {
255 | "@firebase/app-types": "0.9.1",
256 | "@firebase/util": "1.9.5"
257 | }
258 | },
259 | "node_modules/@firebase/firestore": {
260 | "version": "4.5.1",
261 | "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.5.1.tgz",
262 | "integrity": "sha512-VQsMKJGuqlx8I+n+NhNrdFRBJU/B1O8mpGIAYABBmVxPyJax/ynuBMJkREmqzRWpbBj5IAtHe+vm4EvJlb6RLg==",
263 | "dependencies": {
264 | "@firebase/component": "0.6.6",
265 | "@firebase/logger": "0.4.1",
266 | "@firebase/util": "1.9.5",
267 | "@firebase/webchannel-wrapper": "0.10.6",
268 | "@grpc/grpc-js": "~1.9.0",
269 | "@grpc/proto-loader": "^0.7.8",
270 | "tslib": "^2.1.0",
271 | "undici": "5.28.3"
272 | },
273 | "engines": {
274 | "node": ">=10.10.0"
275 | },
276 | "peerDependencies": {
277 | "@firebase/app": "0.x"
278 | }
279 | },
280 | "node_modules/@firebase/firestore-compat": {
281 | "version": "0.3.28",
282 | "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.28.tgz",
283 | "integrity": "sha512-qaE9QYrWV0K+nh/HWf2EL/V2fPsuTZJ8K4S4e+xUOIxVulmXXwlKg4vgJgRF6r5AlABcSphKNbz/77fChgNwiQ==",
284 | "dependencies": {
285 | "@firebase/component": "0.6.6",
286 | "@firebase/firestore": "4.5.1",
287 | "@firebase/firestore-types": "3.0.1",
288 | "@firebase/util": "1.9.5",
289 | "tslib": "^2.1.0"
290 | },
291 | "peerDependencies": {
292 | "@firebase/app-compat": "0.x"
293 | }
294 | },
295 | "node_modules/@firebase/firestore-types": {
296 | "version": "3.0.1",
297 | "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.1.tgz",
298 | "integrity": "sha512-mVhPcHr5FICjF67m6JHgj+XRvAz/gZ62xifeGfcm00RFl6tNKfCzCfKeyB2BDIEc9dUnEstkmIXlmLIelOWoaA==",
299 | "peerDependencies": {
300 | "@firebase/app-types": "0.x",
301 | "@firebase/util": "1.x"
302 | }
303 | },
304 | "node_modules/@firebase/functions": {
305 | "version": "0.11.3",
306 | "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.3.tgz",
307 | "integrity": "sha512-fpjc3VwxsgFBcR0wmof6kIng7NNvhjqetwWUTMs/ZeOI0QiZoUvSDaudFZvPfvXujSK/sr3tk9G1YzjbwCQkgQ==",
308 | "dependencies": {
309 | "@firebase/app-check-interop-types": "0.3.1",
310 | "@firebase/auth-interop-types": "0.2.2",
311 | "@firebase/component": "0.6.6",
312 | "@firebase/messaging-interop-types": "0.2.1",
313 | "@firebase/util": "1.9.5",
314 | "tslib": "^2.1.0",
315 | "undici": "5.28.3"
316 | },
317 | "peerDependencies": {
318 | "@firebase/app": "0.x"
319 | }
320 | },
321 | "node_modules/@firebase/functions-compat": {
322 | "version": "0.3.9",
323 | "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.9.tgz",
324 | "integrity": "sha512-yVcNBUljBFD6VPeTJcnWBEFZlVICKWuJzJmPuvgKEH++8z/CdgUKw0YslceaPQIWnstdviZDEF1cjJnR/bLvzQ==",
325 | "dependencies": {
326 | "@firebase/component": "0.6.6",
327 | "@firebase/functions": "0.11.3",
328 | "@firebase/functions-types": "0.6.1",
329 | "@firebase/util": "1.9.5",
330 | "tslib": "^2.1.0"
331 | },
332 | "peerDependencies": {
333 | "@firebase/app-compat": "0.x"
334 | }
335 | },
336 | "node_modules/@firebase/functions-types": {
337 | "version": "0.6.1",
338 | "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.1.tgz",
339 | "integrity": "sha512-DirqgTXSBzyKsQwcKnx/YdGMaRdJhywnThrINP+Iog8QfQnrL7aprTXHDFHlpZEMwykS54YRk53xzz7j396QXQ=="
340 | },
341 | "node_modules/@firebase/installations": {
342 | "version": "0.6.6",
343 | "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.6.tgz",
344 | "integrity": "sha512-dNGRGoHmstgEJqh9Kzk22fR2ZrVBH1JWliaL6binQ6pIzlWscreHNczzJDgOKoVT0PjWTrAmh/azztiX/e2uTw==",
345 | "dependencies": {
346 | "@firebase/component": "0.6.6",
347 | "@firebase/util": "1.9.5",
348 | "idb": "7.1.1",
349 | "tslib": "^2.1.0"
350 | },
351 | "peerDependencies": {
352 | "@firebase/app": "0.x"
353 | }
354 | },
355 | "node_modules/@firebase/installations-compat": {
356 | "version": "0.2.6",
357 | "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.6.tgz",
358 | "integrity": "sha512-uxBAt2WsuEMT5dalA/1O+Uyi9DS25zKHgIPdrQ7KO1ZUdBURiGScIyjdhIM/7NMSvHGYugK4PUVdK9NFIffeiw==",
359 | "dependencies": {
360 | "@firebase/component": "0.6.6",
361 | "@firebase/installations": "0.6.6",
362 | "@firebase/installations-types": "0.5.1",
363 | "@firebase/util": "1.9.5",
364 | "tslib": "^2.1.0"
365 | },
366 | "peerDependencies": {
367 | "@firebase/app-compat": "0.x"
368 | }
369 | },
370 | "node_modules/@firebase/installations-types": {
371 | "version": "0.5.1",
372 | "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.1.tgz",
373 | "integrity": "sha512-OyREnRTfe2wIWTrzCz65ajyo4lFm6VgbeVqMMP+3GJLfCtNvY9VXkmqs3WFEsyYezzdcRqOt39FynZoLlkO+cQ==",
374 | "peerDependencies": {
375 | "@firebase/app-types": "0.x"
376 | }
377 | },
378 | "node_modules/@firebase/logger": {
379 | "version": "0.4.1",
380 | "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.1.tgz",
381 | "integrity": "sha512-tTIixB5UJbG9ZHSGZSZdX7THr3KWOLrejZ9B7jYsm6fpwgRNngKznQKA2wgYVyvBc1ta7dGFh9NtJ8n7qfiYIw==",
382 | "dependencies": {
383 | "tslib": "^2.1.0"
384 | }
385 | },
386 | "node_modules/@firebase/messaging": {
387 | "version": "0.12.7",
388 | "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.7.tgz",
389 | "integrity": "sha512-FNZiGMZWjU2D13U/XpoGDSfqCx2kqJ171P3VjquBJfd8SkYNyJMkKM82QvTjQaDd4nuWzgvTDR81DGJFUO6AOg==",
390 | "dependencies": {
391 | "@firebase/component": "0.6.6",
392 | "@firebase/installations": "0.6.6",
393 | "@firebase/messaging-interop-types": "0.2.1",
394 | "@firebase/util": "1.9.5",
395 | "idb": "7.1.1",
396 | "tslib": "^2.1.0"
397 | },
398 | "peerDependencies": {
399 | "@firebase/app": "0.x"
400 | }
401 | },
402 | "node_modules/@firebase/messaging-compat": {
403 | "version": "0.2.7",
404 | "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.7.tgz",
405 | "integrity": "sha512-29eeNzkjJPNc1RAVmxocaA8PzkbtuNvabX8jKw3N8VdAmyugx7+dYB+jCnereiWqIwivIZ2xSbCUQ24vC7+HaQ==",
406 | "dependencies": {
407 | "@firebase/component": "0.6.6",
408 | "@firebase/messaging": "0.12.7",
409 | "@firebase/util": "1.9.5",
410 | "tslib": "^2.1.0"
411 | },
412 | "peerDependencies": {
413 | "@firebase/app-compat": "0.x"
414 | }
415 | },
416 | "node_modules/@firebase/messaging-interop-types": {
417 | "version": "0.2.1",
418 | "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.1.tgz",
419 | "integrity": "sha512-jfGJ7Jc32BDHXvXHyXi34mVLzZY8X0t929DTMwz7Tj2Hc40Zuzx8VRCIPLRrRUyvBrJCd5EpIcQgCygXhtaN1A=="
420 | },
421 | "node_modules/@firebase/performance": {
422 | "version": "0.6.6",
423 | "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.6.tgz",
424 | "integrity": "sha512-UOUHhvj2GJcjyJewdX1ShnON0/eqTswHvYzzQPC4nrIuMFvHwMGk8NpCaqh7JZmpaxh9AMr6kM+M/p37DrKWXA==",
425 | "dependencies": {
426 | "@firebase/component": "0.6.6",
427 | "@firebase/installations": "0.6.6",
428 | "@firebase/logger": "0.4.1",
429 | "@firebase/util": "1.9.5",
430 | "tslib": "^2.1.0"
431 | },
432 | "peerDependencies": {
433 | "@firebase/app": "0.x"
434 | }
435 | },
436 | "node_modules/@firebase/performance-compat": {
437 | "version": "0.2.6",
438 | "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.6.tgz",
439 | "integrity": "sha512-JSGdNNHBAMRTocGpN+m+7tk+9rulBcwuG+Ejw/ooDj45FGcON1Eymxh/qbe5M6Dlj5P1ClbkHLj4yf7MiCHOag==",
440 | "dependencies": {
441 | "@firebase/component": "0.6.6",
442 | "@firebase/logger": "0.4.1",
443 | "@firebase/performance": "0.6.6",
444 | "@firebase/performance-types": "0.2.1",
445 | "@firebase/util": "1.9.5",
446 | "tslib": "^2.1.0"
447 | },
448 | "peerDependencies": {
449 | "@firebase/app-compat": "0.x"
450 | }
451 | },
452 | "node_modules/@firebase/performance-types": {
453 | "version": "0.2.1",
454 | "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.1.tgz",
455 | "integrity": "sha512-kQ8pEr4d6ArhPoYrngcFlEJMNWMdEZTpvMAttWH0C2vegBgj47cm6xXFy9+0j27OBhOIiPn48Z+2WE2XNu33CQ=="
456 | },
457 | "node_modules/@firebase/remote-config": {
458 | "version": "0.4.6",
459 | "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.6.tgz",
460 | "integrity": "sha512-qtanFS+AX5k/7e/+Azf27Hq4reX28QsUvRcYWyS5cOaRMS9jtll4MK4winWmzX8MdJY637nFzIx43PlMKVnaKw==",
461 | "dependencies": {
462 | "@firebase/component": "0.6.6",
463 | "@firebase/installations": "0.6.6",
464 | "@firebase/logger": "0.4.1",
465 | "@firebase/util": "1.9.5",
466 | "tslib": "^2.1.0"
467 | },
468 | "peerDependencies": {
469 | "@firebase/app": "0.x"
470 | }
471 | },
472 | "node_modules/@firebase/remote-config-compat": {
473 | "version": "0.2.6",
474 | "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.6.tgz",
475 | "integrity": "sha512-cFdpmN/rzDhm4pbk0WpOzK9JQ9I1ZhXzhtYbKRBwUag3pG1odEfIORygMDCGQniPpcae/QGXho4srJHfoijKuw==",
476 | "dependencies": {
477 | "@firebase/component": "0.6.6",
478 | "@firebase/logger": "0.4.1",
479 | "@firebase/remote-config": "0.4.6",
480 | "@firebase/remote-config-types": "0.3.1",
481 | "@firebase/util": "1.9.5",
482 | "tslib": "^2.1.0"
483 | },
484 | "peerDependencies": {
485 | "@firebase/app-compat": "0.x"
486 | }
487 | },
488 | "node_modules/@firebase/remote-config-types": {
489 | "version": "0.3.1",
490 | "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.1.tgz",
491 | "integrity": "sha512-PgmfUugcJAinPLsJlYcBbNZe7KE2omdQw1WCT/z46nKkNVGkuHdVFSq54s3wiFa9BoHmLZ01u4hGXIhm6MdLOw=="
492 | },
493 | "node_modules/@firebase/storage": {
494 | "version": "0.12.3",
495 | "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.3.tgz",
496 | "integrity": "sha512-JP/rN8fb4CgCo7k/I8OLVgRx5cgExsWOIUQ2O2VQwR6YKItuL375c9v7PDaOfEcFZea/fXtfJJ3Z2NaI9445CQ==",
497 | "dependencies": {
498 | "@firebase/component": "0.6.6",
499 | "@firebase/util": "1.9.5",
500 | "tslib": "^2.1.0",
501 | "undici": "5.28.3"
502 | },
503 | "peerDependencies": {
504 | "@firebase/app": "0.x"
505 | }
506 | },
507 | "node_modules/@firebase/storage-compat": {
508 | "version": "0.3.6",
509 | "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.6.tgz",
510 | "integrity": "sha512-AKv0vwktqdW4SDDDcHSN2ahi1Hpjs8rTM6sE7+yrWpm8cRght/PkqylsFnIe+a/toCNd8WeWaXq/oaXHPvRw1w==",
511 | "dependencies": {
512 | "@firebase/component": "0.6.6",
513 | "@firebase/storage": "0.12.3",
514 | "@firebase/storage-types": "0.8.1",
515 | "@firebase/util": "1.9.5",
516 | "tslib": "^2.1.0"
517 | },
518 | "peerDependencies": {
519 | "@firebase/app-compat": "0.x"
520 | }
521 | },
522 | "node_modules/@firebase/storage-types": {
523 | "version": "0.8.1",
524 | "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.1.tgz",
525 | "integrity": "sha512-yj0vypPT9UbbfYYwzpXPYchnjWqCADcTbGNawAIebww8rnQYPGbESYTKQdFRPXiLspYPB7xCHTXThmMJuvDcsQ==",
526 | "peerDependencies": {
527 | "@firebase/app-types": "0.x",
528 | "@firebase/util": "1.x"
529 | }
530 | },
531 | "node_modules/@firebase/util": {
532 | "version": "1.9.5",
533 | "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.5.tgz",
534 | "integrity": "sha512-PP4pAFISDxsf70l3pEy34Mf3GkkUcVQ3MdKp6aSVb7tcpfUQxnsdV7twDd8EkfB6zZylH6wpUAoangQDmCUMqw==",
535 | "dependencies": {
536 | "tslib": "^2.1.0"
537 | }
538 | },
539 | "node_modules/@firebase/webchannel-wrapper": {
540 | "version": "0.10.6",
541 | "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.6.tgz",
542 | "integrity": "sha512-EnfRJvrnzkHwN3BPMCayCFT5lCqInzg3RdlRsDjDvB1EJli6Usj26T6lJ67BU2UcYXBS5xcp1Wj4+zRzj2NaZg=="
543 | },
544 | "node_modules/@grpc/grpc-js": {
545 | "version": "1.9.14",
546 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.14.tgz",
547 | "integrity": "sha512-nOpuzZ2G3IuMFN+UPPpKrC6NsLmWsTqSsm66IRfnBt1D4pwTqE27lmbpcPM+l2Ua4gE7PfjRHI6uedAy7hoXUw==",
548 | "dependencies": {
549 | "@grpc/proto-loader": "^0.7.8",
550 | "@types/node": ">=12.12.47"
551 | },
552 | "engines": {
553 | "node": "^8.13.0 || >=10.10.0"
554 | }
555 | },
556 | "node_modules/@grpc/proto-loader": {
557 | "version": "0.7.12",
558 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.12.tgz",
559 | "integrity": "sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==",
560 | "dependencies": {
561 | "lodash.camelcase": "^4.3.0",
562 | "long": "^5.0.0",
563 | "protobufjs": "^7.2.4",
564 | "yargs": "^17.7.2"
565 | },
566 | "bin": {
567 | "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
568 | },
569 | "engines": {
570 | "node": ">=6"
571 | }
572 | },
573 | "node_modules/@isaacs/cliui": {
574 | "version": "8.0.2",
575 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
576 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
577 | "dev": true,
578 | "dependencies": {
579 | "string-width": "^5.1.2",
580 | "string-width-cjs": "npm:string-width@^4.2.0",
581 | "strip-ansi": "^7.0.1",
582 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
583 | "wrap-ansi": "^8.1.0",
584 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
585 | },
586 | "engines": {
587 | "node": ">=12"
588 | }
589 | },
590 | "node_modules/@jridgewell/gen-mapping": {
591 | "version": "0.3.5",
592 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
593 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
594 | "dev": true,
595 | "dependencies": {
596 | "@jridgewell/set-array": "^1.2.1",
597 | "@jridgewell/sourcemap-codec": "^1.4.10",
598 | "@jridgewell/trace-mapping": "^0.3.24"
599 | },
600 | "engines": {
601 | "node": ">=6.0.0"
602 | }
603 | },
604 | "node_modules/@jridgewell/resolve-uri": {
605 | "version": "3.1.2",
606 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
607 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
608 | "dev": true,
609 | "engines": {
610 | "node": ">=6.0.0"
611 | }
612 | },
613 | "node_modules/@jridgewell/set-array": {
614 | "version": "1.2.1",
615 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
616 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
617 | "dev": true,
618 | "engines": {
619 | "node": ">=6.0.0"
620 | }
621 | },
622 | "node_modules/@jridgewell/sourcemap-codec": {
623 | "version": "1.4.15",
624 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
625 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
626 | "dev": true
627 | },
628 | "node_modules/@jridgewell/trace-mapping": {
629 | "version": "0.3.25",
630 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
631 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
632 | "dev": true,
633 | "dependencies": {
634 | "@jridgewell/resolve-uri": "^3.1.0",
635 | "@jridgewell/sourcemap-codec": "^1.4.14"
636 | }
637 | },
638 | "node_modules/@next/env": {
639 | "version": "14.1.4",
640 | "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz",
641 | "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ=="
642 | },
643 | "node_modules/@next/swc-darwin-arm64": {
644 | "version": "14.1.4",
645 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz",
646 | "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==",
647 | "cpu": [
648 | "arm64"
649 | ],
650 | "optional": true,
651 | "os": [
652 | "darwin"
653 | ],
654 | "engines": {
655 | "node": ">= 10"
656 | }
657 | },
658 | "node_modules/@next/swc-darwin-x64": {
659 | "version": "14.1.4",
660 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz",
661 | "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==",
662 | "cpu": [
663 | "x64"
664 | ],
665 | "optional": true,
666 | "os": [
667 | "darwin"
668 | ],
669 | "engines": {
670 | "node": ">= 10"
671 | }
672 | },
673 | "node_modules/@next/swc-linux-arm64-gnu": {
674 | "version": "14.1.4",
675 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz",
676 | "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==",
677 | "cpu": [
678 | "arm64"
679 | ],
680 | "optional": true,
681 | "os": [
682 | "linux"
683 | ],
684 | "engines": {
685 | "node": ">= 10"
686 | }
687 | },
688 | "node_modules/@next/swc-linux-arm64-musl": {
689 | "version": "14.1.4",
690 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz",
691 | "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==",
692 | "cpu": [
693 | "arm64"
694 | ],
695 | "optional": true,
696 | "os": [
697 | "linux"
698 | ],
699 | "engines": {
700 | "node": ">= 10"
701 | }
702 | },
703 | "node_modules/@next/swc-linux-x64-gnu": {
704 | "version": "14.1.4",
705 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz",
706 | "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==",
707 | "cpu": [
708 | "x64"
709 | ],
710 | "optional": true,
711 | "os": [
712 | "linux"
713 | ],
714 | "engines": {
715 | "node": ">= 10"
716 | }
717 | },
718 | "node_modules/@next/swc-linux-x64-musl": {
719 | "version": "14.1.4",
720 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz",
721 | "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==",
722 | "cpu": [
723 | "x64"
724 | ],
725 | "optional": true,
726 | "os": [
727 | "linux"
728 | ],
729 | "engines": {
730 | "node": ">= 10"
731 | }
732 | },
733 | "node_modules/@next/swc-win32-arm64-msvc": {
734 | "version": "14.1.4",
735 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz",
736 | "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==",
737 | "cpu": [
738 | "arm64"
739 | ],
740 | "optional": true,
741 | "os": [
742 | "win32"
743 | ],
744 | "engines": {
745 | "node": ">= 10"
746 | }
747 | },
748 | "node_modules/@next/swc-win32-ia32-msvc": {
749 | "version": "14.1.4",
750 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz",
751 | "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==",
752 | "cpu": [
753 | "ia32"
754 | ],
755 | "optional": true,
756 | "os": [
757 | "win32"
758 | ],
759 | "engines": {
760 | "node": ">= 10"
761 | }
762 | },
763 | "node_modules/@next/swc-win32-x64-msvc": {
764 | "version": "14.1.4",
765 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz",
766 | "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==",
767 | "cpu": [
768 | "x64"
769 | ],
770 | "optional": true,
771 | "os": [
772 | "win32"
773 | ],
774 | "engines": {
775 | "node": ">= 10"
776 | }
777 | },
778 | "node_modules/@nodelib/fs.scandir": {
779 | "version": "2.1.5",
780 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
781 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
782 | "dev": true,
783 | "dependencies": {
784 | "@nodelib/fs.stat": "2.0.5",
785 | "run-parallel": "^1.1.9"
786 | },
787 | "engines": {
788 | "node": ">= 8"
789 | }
790 | },
791 | "node_modules/@nodelib/fs.stat": {
792 | "version": "2.0.5",
793 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
794 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
795 | "dev": true,
796 | "engines": {
797 | "node": ">= 8"
798 | }
799 | },
800 | "node_modules/@nodelib/fs.walk": {
801 | "version": "1.2.8",
802 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
803 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
804 | "dev": true,
805 | "dependencies": {
806 | "@nodelib/fs.scandir": "2.1.5",
807 | "fastq": "^1.6.0"
808 | },
809 | "engines": {
810 | "node": ">= 8"
811 | }
812 | },
813 | "node_modules/@pkgjs/parseargs": {
814 | "version": "0.11.0",
815 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
816 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
817 | "dev": true,
818 | "optional": true,
819 | "engines": {
820 | "node": ">=14"
821 | }
822 | },
823 | "node_modules/@protobufjs/aspromise": {
824 | "version": "1.1.2",
825 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
826 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
827 | },
828 | "node_modules/@protobufjs/base64": {
829 | "version": "1.1.2",
830 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
831 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
832 | },
833 | "node_modules/@protobufjs/codegen": {
834 | "version": "2.0.4",
835 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
836 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
837 | },
838 | "node_modules/@protobufjs/eventemitter": {
839 | "version": "1.1.0",
840 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
841 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
842 | },
843 | "node_modules/@protobufjs/fetch": {
844 | "version": "1.1.0",
845 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
846 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
847 | "dependencies": {
848 | "@protobufjs/aspromise": "^1.1.1",
849 | "@protobufjs/inquire": "^1.1.0"
850 | }
851 | },
852 | "node_modules/@protobufjs/float": {
853 | "version": "1.0.2",
854 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
855 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
856 | },
857 | "node_modules/@protobufjs/inquire": {
858 | "version": "1.1.0",
859 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
860 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
861 | },
862 | "node_modules/@protobufjs/path": {
863 | "version": "1.1.2",
864 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
865 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
866 | },
867 | "node_modules/@protobufjs/pool": {
868 | "version": "1.1.0",
869 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
870 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
871 | },
872 | "node_modules/@protobufjs/utf8": {
873 | "version": "1.1.0",
874 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
875 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
876 | },
877 | "node_modules/@swc/helpers": {
878 | "version": "0.5.2",
879 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz",
880 | "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==",
881 | "dependencies": {
882 | "tslib": "^2.4.0"
883 | }
884 | },
885 | "node_modules/@types/node": {
886 | "version": "20.12.4",
887 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.4.tgz",
888 | "integrity": "sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==",
889 | "dependencies": {
890 | "undici-types": "~5.26.4"
891 | }
892 | },
893 | "node_modules/@types/quill": {
894 | "version": "1.3.10",
895 | "resolved": "https://registry.npmjs.org/@types/quill/-/quill-1.3.10.tgz",
896 | "integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==",
897 | "dependencies": {
898 | "parchment": "^1.1.2"
899 | }
900 | },
901 | "node_modules/ansi-regex": {
902 | "version": "6.0.1",
903 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
904 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
905 | "dev": true,
906 | "engines": {
907 | "node": ">=12"
908 | },
909 | "funding": {
910 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
911 | }
912 | },
913 | "node_modules/ansi-styles": {
914 | "version": "6.2.1",
915 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
916 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
917 | "dev": true,
918 | "engines": {
919 | "node": ">=12"
920 | },
921 | "funding": {
922 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
923 | }
924 | },
925 | "node_modules/any-promise": {
926 | "version": "1.3.0",
927 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
928 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
929 | "dev": true
930 | },
931 | "node_modules/anymatch": {
932 | "version": "3.1.3",
933 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
934 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
935 | "dev": true,
936 | "dependencies": {
937 | "normalize-path": "^3.0.0",
938 | "picomatch": "^2.0.4"
939 | },
940 | "engines": {
941 | "node": ">= 8"
942 | }
943 | },
944 | "node_modules/arg": {
945 | "version": "5.0.2",
946 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
947 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
948 | "dev": true
949 | },
950 | "node_modules/asap": {
951 | "version": "2.0.6",
952 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
953 | "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
954 | },
955 | "node_modules/autoprefixer": {
956 | "version": "10.4.19",
957 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
958 | "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
959 | "dev": true,
960 | "funding": [
961 | {
962 | "type": "opencollective",
963 | "url": "https://opencollective.com/postcss/"
964 | },
965 | {
966 | "type": "tidelift",
967 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
968 | },
969 | {
970 | "type": "github",
971 | "url": "https://github.com/sponsors/ai"
972 | }
973 | ],
974 | "dependencies": {
975 | "browserslist": "^4.23.0",
976 | "caniuse-lite": "^1.0.30001599",
977 | "fraction.js": "^4.3.7",
978 | "normalize-range": "^0.1.2",
979 | "picocolors": "^1.0.0",
980 | "postcss-value-parser": "^4.2.0"
981 | },
982 | "bin": {
983 | "autoprefixer": "bin/autoprefixer"
984 | },
985 | "engines": {
986 | "node": "^10 || ^12 || >=14"
987 | },
988 | "peerDependencies": {
989 | "postcss": "^8.1.0"
990 | }
991 | },
992 | "node_modules/balanced-match": {
993 | "version": "1.0.2",
994 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
995 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
996 | "dev": true
997 | },
998 | "node_modules/binary-extensions": {
999 | "version": "2.3.0",
1000 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1001 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1002 | "dev": true,
1003 | "engines": {
1004 | "node": ">=8"
1005 | },
1006 | "funding": {
1007 | "url": "https://github.com/sponsors/sindresorhus"
1008 | }
1009 | },
1010 | "node_modules/brace-expansion": {
1011 | "version": "2.0.1",
1012 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1013 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1014 | "dev": true,
1015 | "dependencies": {
1016 | "balanced-match": "^1.0.0"
1017 | }
1018 | },
1019 | "node_modules/braces": {
1020 | "version": "3.0.2",
1021 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1022 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1023 | "dev": true,
1024 | "dependencies": {
1025 | "fill-range": "^7.0.1"
1026 | },
1027 | "engines": {
1028 | "node": ">=8"
1029 | }
1030 | },
1031 | "node_modules/browserslist": {
1032 | "version": "4.23.0",
1033 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
1034 | "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
1035 | "dev": true,
1036 | "funding": [
1037 | {
1038 | "type": "opencollective",
1039 | "url": "https://opencollective.com/browserslist"
1040 | },
1041 | {
1042 | "type": "tidelift",
1043 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1044 | },
1045 | {
1046 | "type": "github",
1047 | "url": "https://github.com/sponsors/ai"
1048 | }
1049 | ],
1050 | "dependencies": {
1051 | "caniuse-lite": "^1.0.30001587",
1052 | "electron-to-chromium": "^1.4.668",
1053 | "node-releases": "^2.0.14",
1054 | "update-browserslist-db": "^1.0.13"
1055 | },
1056 | "bin": {
1057 | "browserslist": "cli.js"
1058 | },
1059 | "engines": {
1060 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1061 | }
1062 | },
1063 | "node_modules/busboy": {
1064 | "version": "1.6.0",
1065 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
1066 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
1067 | "dependencies": {
1068 | "streamsearch": "^1.1.0"
1069 | },
1070 | "engines": {
1071 | "node": ">=10.16.0"
1072 | }
1073 | },
1074 | "node_modules/call-bind": {
1075 | "version": "1.0.7",
1076 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
1077 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
1078 | "dependencies": {
1079 | "es-define-property": "^1.0.0",
1080 | "es-errors": "^1.3.0",
1081 | "function-bind": "^1.1.2",
1082 | "get-intrinsic": "^1.2.4",
1083 | "set-function-length": "^1.2.1"
1084 | },
1085 | "engines": {
1086 | "node": ">= 0.4"
1087 | },
1088 | "funding": {
1089 | "url": "https://github.com/sponsors/ljharb"
1090 | }
1091 | },
1092 | "node_modules/camelcase-css": {
1093 | "version": "2.0.1",
1094 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1095 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1096 | "dev": true,
1097 | "engines": {
1098 | "node": ">= 6"
1099 | }
1100 | },
1101 | "node_modules/caniuse-lite": {
1102 | "version": "1.0.30001606",
1103 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz",
1104 | "integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==",
1105 | "funding": [
1106 | {
1107 | "type": "opencollective",
1108 | "url": "https://opencollective.com/browserslist"
1109 | },
1110 | {
1111 | "type": "tidelift",
1112 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1113 | },
1114 | {
1115 | "type": "github",
1116 | "url": "https://github.com/sponsors/ai"
1117 | }
1118 | ]
1119 | },
1120 | "node_modules/chokidar": {
1121 | "version": "3.6.0",
1122 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
1123 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
1124 | "dev": true,
1125 | "dependencies": {
1126 | "anymatch": "~3.1.2",
1127 | "braces": "~3.0.2",
1128 | "glob-parent": "~5.1.2",
1129 | "is-binary-path": "~2.1.0",
1130 | "is-glob": "~4.0.1",
1131 | "normalize-path": "~3.0.0",
1132 | "readdirp": "~3.6.0"
1133 | },
1134 | "engines": {
1135 | "node": ">= 8.10.0"
1136 | },
1137 | "funding": {
1138 | "url": "https://paulmillr.com/funding/"
1139 | },
1140 | "optionalDependencies": {
1141 | "fsevents": "~2.3.2"
1142 | }
1143 | },
1144 | "node_modules/chokidar/node_modules/glob-parent": {
1145 | "version": "5.1.2",
1146 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1147 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1148 | "dev": true,
1149 | "dependencies": {
1150 | "is-glob": "^4.0.1"
1151 | },
1152 | "engines": {
1153 | "node": ">= 6"
1154 | }
1155 | },
1156 | "node_modules/classnames": {
1157 | "version": "2.5.1",
1158 | "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
1159 | "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
1160 | },
1161 | "node_modules/client-only": {
1162 | "version": "0.0.1",
1163 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1164 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1165 | },
1166 | "node_modules/cliui": {
1167 | "version": "8.0.1",
1168 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
1169 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
1170 | "dependencies": {
1171 | "string-width": "^4.2.0",
1172 | "strip-ansi": "^6.0.1",
1173 | "wrap-ansi": "^7.0.0"
1174 | },
1175 | "engines": {
1176 | "node": ">=12"
1177 | }
1178 | },
1179 | "node_modules/cliui/node_modules/ansi-regex": {
1180 | "version": "5.0.1",
1181 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1182 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1183 | "engines": {
1184 | "node": ">=8"
1185 | }
1186 | },
1187 | "node_modules/cliui/node_modules/ansi-styles": {
1188 | "version": "4.3.0",
1189 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1190 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1191 | "dependencies": {
1192 | "color-convert": "^2.0.1"
1193 | },
1194 | "engines": {
1195 | "node": ">=8"
1196 | },
1197 | "funding": {
1198 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1199 | }
1200 | },
1201 | "node_modules/cliui/node_modules/emoji-regex": {
1202 | "version": "8.0.0",
1203 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1204 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
1205 | },
1206 | "node_modules/cliui/node_modules/string-width": {
1207 | "version": "4.2.3",
1208 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1209 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1210 | "dependencies": {
1211 | "emoji-regex": "^8.0.0",
1212 | "is-fullwidth-code-point": "^3.0.0",
1213 | "strip-ansi": "^6.0.1"
1214 | },
1215 | "engines": {
1216 | "node": ">=8"
1217 | }
1218 | },
1219 | "node_modules/cliui/node_modules/strip-ansi": {
1220 | "version": "6.0.1",
1221 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1222 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1223 | "dependencies": {
1224 | "ansi-regex": "^5.0.1"
1225 | },
1226 | "engines": {
1227 | "node": ">=8"
1228 | }
1229 | },
1230 | "node_modules/cliui/node_modules/wrap-ansi": {
1231 | "version": "7.0.0",
1232 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1233 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1234 | "dependencies": {
1235 | "ansi-styles": "^4.0.0",
1236 | "string-width": "^4.1.0",
1237 | "strip-ansi": "^6.0.0"
1238 | },
1239 | "engines": {
1240 | "node": ">=10"
1241 | },
1242 | "funding": {
1243 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1244 | }
1245 | },
1246 | "node_modules/clone": {
1247 | "version": "2.1.2",
1248 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
1249 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
1250 | "engines": {
1251 | "node": ">=0.8"
1252 | }
1253 | },
1254 | "node_modules/color-convert": {
1255 | "version": "2.0.1",
1256 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1257 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1258 | "dependencies": {
1259 | "color-name": "~1.1.4"
1260 | },
1261 | "engines": {
1262 | "node": ">=7.0.0"
1263 | }
1264 | },
1265 | "node_modules/color-name": {
1266 | "version": "1.1.4",
1267 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1268 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1269 | },
1270 | "node_modules/commander": {
1271 | "version": "4.1.1",
1272 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1273 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1274 | "dev": true,
1275 | "engines": {
1276 | "node": ">= 6"
1277 | }
1278 | },
1279 | "node_modules/core-js": {
1280 | "version": "3.36.1",
1281 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz",
1282 | "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==",
1283 | "hasInstallScript": true,
1284 | "funding": {
1285 | "type": "opencollective",
1286 | "url": "https://opencollective.com/core-js"
1287 | }
1288 | },
1289 | "node_modules/cross-fetch": {
1290 | "version": "3.1.8",
1291 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
1292 | "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
1293 | "dependencies": {
1294 | "node-fetch": "^2.6.12"
1295 | }
1296 | },
1297 | "node_modules/cross-spawn": {
1298 | "version": "7.0.3",
1299 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1300 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1301 | "dev": true,
1302 | "dependencies": {
1303 | "path-key": "^3.1.0",
1304 | "shebang-command": "^2.0.0",
1305 | "which": "^2.0.1"
1306 | },
1307 | "engines": {
1308 | "node": ">= 8"
1309 | }
1310 | },
1311 | "node_modules/cssesc": {
1312 | "version": "3.0.0",
1313 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1314 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1315 | "dev": true,
1316 | "bin": {
1317 | "cssesc": "bin/cssesc"
1318 | },
1319 | "engines": {
1320 | "node": ">=4"
1321 | }
1322 | },
1323 | "node_modules/deep-equal": {
1324 | "version": "1.1.2",
1325 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
1326 | "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
1327 | "dependencies": {
1328 | "is-arguments": "^1.1.1",
1329 | "is-date-object": "^1.0.5",
1330 | "is-regex": "^1.1.4",
1331 | "object-is": "^1.1.5",
1332 | "object-keys": "^1.1.1",
1333 | "regexp.prototype.flags": "^1.5.1"
1334 | },
1335 | "engines": {
1336 | "node": ">= 0.4"
1337 | },
1338 | "funding": {
1339 | "url": "https://github.com/sponsors/ljharb"
1340 | }
1341 | },
1342 | "node_modules/define-data-property": {
1343 | "version": "1.1.4",
1344 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
1345 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
1346 | "dependencies": {
1347 | "es-define-property": "^1.0.0",
1348 | "es-errors": "^1.3.0",
1349 | "gopd": "^1.0.1"
1350 | },
1351 | "engines": {
1352 | "node": ">= 0.4"
1353 | },
1354 | "funding": {
1355 | "url": "https://github.com/sponsors/ljharb"
1356 | }
1357 | },
1358 | "node_modules/define-properties": {
1359 | "version": "1.2.1",
1360 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
1361 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
1362 | "dependencies": {
1363 | "define-data-property": "^1.0.1",
1364 | "has-property-descriptors": "^1.0.0",
1365 | "object-keys": "^1.1.1"
1366 | },
1367 | "engines": {
1368 | "node": ">= 0.4"
1369 | },
1370 | "funding": {
1371 | "url": "https://github.com/sponsors/ljharb"
1372 | }
1373 | },
1374 | "node_modules/didyoumean": {
1375 | "version": "1.2.2",
1376 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1377 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1378 | "dev": true
1379 | },
1380 | "node_modules/dlv": {
1381 | "version": "1.1.3",
1382 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1383 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1384 | "dev": true
1385 | },
1386 | "node_modules/draft-convert": {
1387 | "version": "2.1.13",
1388 | "resolved": "https://registry.npmjs.org/draft-convert/-/draft-convert-2.1.13.tgz",
1389 | "integrity": "sha512-/h/n4JCfyO8aWby7wKBkccHdsuVbbDyHWXi/B3Zf2pN++lN1lDOIVt5ulXCcbH2Y5YJEFzMJw/YGfN+R0axxxg==",
1390 | "dependencies": {
1391 | "@babel/runtime": "^7.5.5",
1392 | "immutable": "~3.7.4",
1393 | "invariant": "^2.2.1"
1394 | },
1395 | "peerDependencies": {
1396 | "draft-js": ">=0.7.0",
1397 | "react": "^15.0.2 || ^16.0.0-rc || ^16.0.0 || ^17.0.0 || ^18.0.0",
1398 | "react-dom": "^15.0.2 || ^16.0.0-rc || ^16.0.0 || ^17.0.0 || ^18.0.0"
1399 | }
1400 | },
1401 | "node_modules/draft-js": {
1402 | "version": "0.11.7",
1403 | "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.7.tgz",
1404 | "integrity": "sha512-ne7yFfN4sEL82QPQEn80xnADR8/Q6ALVworbC5UOSzOvjffmYfFsr3xSZtxbIirti14R7Y33EZC5rivpLgIbsg==",
1405 | "dependencies": {
1406 | "fbjs": "^2.0.0",
1407 | "immutable": "~3.7.4",
1408 | "object-assign": "^4.1.1"
1409 | },
1410 | "peerDependencies": {
1411 | "react": ">=0.14.0",
1412 | "react-dom": ">=0.14.0"
1413 | }
1414 | },
1415 | "node_modules/draftjs-utils": {
1416 | "version": "0.10.2",
1417 | "resolved": "https://registry.npmjs.org/draftjs-utils/-/draftjs-utils-0.10.2.tgz",
1418 | "integrity": "sha512-EstHqr3R3JVcilJrBaO/A+01GvwwKmC7e4TCjC7S94ZeMh4IVmf60OuQXtHHpwItK8C2JCi3iljgN5KHkJboUg==",
1419 | "peerDependencies": {
1420 | "draft-js": "^0.11.x",
1421 | "immutable": "3.x.x || 4.x.x"
1422 | }
1423 | },
1424 | "node_modules/eastasianwidth": {
1425 | "version": "0.2.0",
1426 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1427 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
1428 | "dev": true
1429 | },
1430 | "node_modules/electron-to-chromium": {
1431 | "version": "1.4.728",
1432 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.728.tgz",
1433 | "integrity": "sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw==",
1434 | "dev": true
1435 | },
1436 | "node_modules/emoji-regex": {
1437 | "version": "9.2.2",
1438 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1439 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1440 | "dev": true
1441 | },
1442 | "node_modules/es-define-property": {
1443 | "version": "1.0.0",
1444 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
1445 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
1446 | "dependencies": {
1447 | "get-intrinsic": "^1.2.4"
1448 | },
1449 | "engines": {
1450 | "node": ">= 0.4"
1451 | }
1452 | },
1453 | "node_modules/es-errors": {
1454 | "version": "1.3.0",
1455 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1456 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1457 | "engines": {
1458 | "node": ">= 0.4"
1459 | }
1460 | },
1461 | "node_modules/escalade": {
1462 | "version": "3.1.2",
1463 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
1464 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
1465 | "engines": {
1466 | "node": ">=6"
1467 | }
1468 | },
1469 | "node_modules/eventemitter3": {
1470 | "version": "2.0.3",
1471 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
1472 | "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg=="
1473 | },
1474 | "node_modules/extend": {
1475 | "version": "3.0.2",
1476 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1477 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1478 | },
1479 | "node_modules/fast-diff": {
1480 | "version": "1.1.2",
1481 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
1482 | "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
1483 | },
1484 | "node_modules/fast-glob": {
1485 | "version": "3.3.2",
1486 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
1487 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
1488 | "dev": true,
1489 | "dependencies": {
1490 | "@nodelib/fs.stat": "^2.0.2",
1491 | "@nodelib/fs.walk": "^1.2.3",
1492 | "glob-parent": "^5.1.2",
1493 | "merge2": "^1.3.0",
1494 | "micromatch": "^4.0.4"
1495 | },
1496 | "engines": {
1497 | "node": ">=8.6.0"
1498 | }
1499 | },
1500 | "node_modules/fast-glob/node_modules/glob-parent": {
1501 | "version": "5.1.2",
1502 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1503 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1504 | "dev": true,
1505 | "dependencies": {
1506 | "is-glob": "^4.0.1"
1507 | },
1508 | "engines": {
1509 | "node": ">= 6"
1510 | }
1511 | },
1512 | "node_modules/fastq": {
1513 | "version": "1.17.1",
1514 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
1515 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
1516 | "dev": true,
1517 | "dependencies": {
1518 | "reusify": "^1.0.4"
1519 | }
1520 | },
1521 | "node_modules/faye-websocket": {
1522 | "version": "0.11.4",
1523 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
1524 | "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
1525 | "dependencies": {
1526 | "websocket-driver": ">=0.5.1"
1527 | },
1528 | "engines": {
1529 | "node": ">=0.8.0"
1530 | }
1531 | },
1532 | "node_modules/fbjs": {
1533 | "version": "2.0.0",
1534 | "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-2.0.0.tgz",
1535 | "integrity": "sha512-8XA8ny9ifxrAWlyhAbexXcs3rRMtxWcs3M0lctLfB49jRDHiaxj+Mo0XxbwE7nKZYzgCFoq64FS+WFd4IycPPQ==",
1536 | "dependencies": {
1537 | "core-js": "^3.6.4",
1538 | "cross-fetch": "^3.0.4",
1539 | "fbjs-css-vars": "^1.0.0",
1540 | "loose-envify": "^1.0.0",
1541 | "object-assign": "^4.1.0",
1542 | "promise": "^7.1.1",
1543 | "setimmediate": "^1.0.5",
1544 | "ua-parser-js": "^0.7.18"
1545 | }
1546 | },
1547 | "node_modules/fbjs-css-vars": {
1548 | "version": "1.0.2",
1549 | "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
1550 | "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
1551 | },
1552 | "node_modules/fill-range": {
1553 | "version": "7.0.1",
1554 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1555 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1556 | "dev": true,
1557 | "dependencies": {
1558 | "to-regex-range": "^5.0.1"
1559 | },
1560 | "engines": {
1561 | "node": ">=8"
1562 | }
1563 | },
1564 | "node_modules/firebase": {
1565 | "version": "10.10.0",
1566 | "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.10.0.tgz",
1567 | "integrity": "sha512-iJxnCKsBTYa4BSv8cscNbwciX42BvwoePTHg7iwWevb+GyVcZFmKi9eSkg/L7Jpu9mvAFv1jdDGbIaG3xRrE+w==",
1568 | "dependencies": {
1569 | "@firebase/analytics": "0.10.2",
1570 | "@firebase/analytics-compat": "0.2.8",
1571 | "@firebase/app": "0.10.0",
1572 | "@firebase/app-check": "0.8.3",
1573 | "@firebase/app-check-compat": "0.3.10",
1574 | "@firebase/app-compat": "0.2.30",
1575 | "@firebase/app-types": "0.9.1",
1576 | "@firebase/auth": "1.7.0",
1577 | "@firebase/auth-compat": "0.5.5",
1578 | "@firebase/database": "1.0.4",
1579 | "@firebase/database-compat": "1.0.4",
1580 | "@firebase/firestore": "4.5.1",
1581 | "@firebase/firestore-compat": "0.3.28",
1582 | "@firebase/functions": "0.11.3",
1583 | "@firebase/functions-compat": "0.3.9",
1584 | "@firebase/installations": "0.6.6",
1585 | "@firebase/installations-compat": "0.2.6",
1586 | "@firebase/messaging": "0.12.7",
1587 | "@firebase/messaging-compat": "0.2.7",
1588 | "@firebase/performance": "0.6.6",
1589 | "@firebase/performance-compat": "0.2.6",
1590 | "@firebase/remote-config": "0.4.6",
1591 | "@firebase/remote-config-compat": "0.2.6",
1592 | "@firebase/storage": "0.12.3",
1593 | "@firebase/storage-compat": "0.3.6",
1594 | "@firebase/util": "1.9.5"
1595 | }
1596 | },
1597 | "node_modules/foreground-child": {
1598 | "version": "3.1.1",
1599 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
1600 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
1601 | "dev": true,
1602 | "dependencies": {
1603 | "cross-spawn": "^7.0.0",
1604 | "signal-exit": "^4.0.1"
1605 | },
1606 | "engines": {
1607 | "node": ">=14"
1608 | },
1609 | "funding": {
1610 | "url": "https://github.com/sponsors/isaacs"
1611 | }
1612 | },
1613 | "node_modules/fraction.js": {
1614 | "version": "4.3.7",
1615 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
1616 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
1617 | "dev": true,
1618 | "engines": {
1619 | "node": "*"
1620 | },
1621 | "funding": {
1622 | "type": "patreon",
1623 | "url": "https://github.com/sponsors/rawify"
1624 | }
1625 | },
1626 | "node_modules/fsevents": {
1627 | "version": "2.3.3",
1628 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1629 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1630 | "dev": true,
1631 | "hasInstallScript": true,
1632 | "optional": true,
1633 | "os": [
1634 | "darwin"
1635 | ],
1636 | "engines": {
1637 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1638 | }
1639 | },
1640 | "node_modules/function-bind": {
1641 | "version": "1.1.2",
1642 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1643 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1644 | "funding": {
1645 | "url": "https://github.com/sponsors/ljharb"
1646 | }
1647 | },
1648 | "node_modules/functions-have-names": {
1649 | "version": "1.2.3",
1650 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
1651 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
1652 | "funding": {
1653 | "url": "https://github.com/sponsors/ljharb"
1654 | }
1655 | },
1656 | "node_modules/get-caller-file": {
1657 | "version": "2.0.5",
1658 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1659 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1660 | "engines": {
1661 | "node": "6.* || 8.* || >= 10.*"
1662 | }
1663 | },
1664 | "node_modules/get-intrinsic": {
1665 | "version": "1.2.4",
1666 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
1667 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
1668 | "dependencies": {
1669 | "es-errors": "^1.3.0",
1670 | "function-bind": "^1.1.2",
1671 | "has-proto": "^1.0.1",
1672 | "has-symbols": "^1.0.3",
1673 | "hasown": "^2.0.0"
1674 | },
1675 | "engines": {
1676 | "node": ">= 0.4"
1677 | },
1678 | "funding": {
1679 | "url": "https://github.com/sponsors/ljharb"
1680 | }
1681 | },
1682 | "node_modules/glob": {
1683 | "version": "10.3.12",
1684 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
1685 | "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
1686 | "dev": true,
1687 | "dependencies": {
1688 | "foreground-child": "^3.1.0",
1689 | "jackspeak": "^2.3.6",
1690 | "minimatch": "^9.0.1",
1691 | "minipass": "^7.0.4",
1692 | "path-scurry": "^1.10.2"
1693 | },
1694 | "bin": {
1695 | "glob": "dist/esm/bin.mjs"
1696 | },
1697 | "engines": {
1698 | "node": ">=16 || 14 >=14.17"
1699 | },
1700 | "funding": {
1701 | "url": "https://github.com/sponsors/isaacs"
1702 | }
1703 | },
1704 | "node_modules/glob-parent": {
1705 | "version": "6.0.2",
1706 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1707 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1708 | "dev": true,
1709 | "dependencies": {
1710 | "is-glob": "^4.0.3"
1711 | },
1712 | "engines": {
1713 | "node": ">=10.13.0"
1714 | }
1715 | },
1716 | "node_modules/gopd": {
1717 | "version": "1.0.1",
1718 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1719 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1720 | "dependencies": {
1721 | "get-intrinsic": "^1.1.3"
1722 | },
1723 | "funding": {
1724 | "url": "https://github.com/sponsors/ljharb"
1725 | }
1726 | },
1727 | "node_modules/graceful-fs": {
1728 | "version": "4.2.11",
1729 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1730 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
1731 | },
1732 | "node_modules/has-property-descriptors": {
1733 | "version": "1.0.2",
1734 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1735 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1736 | "dependencies": {
1737 | "es-define-property": "^1.0.0"
1738 | },
1739 | "funding": {
1740 | "url": "https://github.com/sponsors/ljharb"
1741 | }
1742 | },
1743 | "node_modules/has-proto": {
1744 | "version": "1.0.3",
1745 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
1746 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
1747 | "engines": {
1748 | "node": ">= 0.4"
1749 | },
1750 | "funding": {
1751 | "url": "https://github.com/sponsors/ljharb"
1752 | }
1753 | },
1754 | "node_modules/has-symbols": {
1755 | "version": "1.0.3",
1756 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1757 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
1758 | "engines": {
1759 | "node": ">= 0.4"
1760 | },
1761 | "funding": {
1762 | "url": "https://github.com/sponsors/ljharb"
1763 | }
1764 | },
1765 | "node_modules/has-tostringtag": {
1766 | "version": "1.0.2",
1767 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
1768 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
1769 | "dependencies": {
1770 | "has-symbols": "^1.0.3"
1771 | },
1772 | "engines": {
1773 | "node": ">= 0.4"
1774 | },
1775 | "funding": {
1776 | "url": "https://github.com/sponsors/ljharb"
1777 | }
1778 | },
1779 | "node_modules/hasown": {
1780 | "version": "2.0.2",
1781 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1782 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1783 | "dependencies": {
1784 | "function-bind": "^1.1.2"
1785 | },
1786 | "engines": {
1787 | "node": ">= 0.4"
1788 | }
1789 | },
1790 | "node_modules/html-to-draftjs": {
1791 | "version": "1.5.0",
1792 | "resolved": "https://registry.npmjs.org/html-to-draftjs/-/html-to-draftjs-1.5.0.tgz",
1793 | "integrity": "sha512-kggLXBNciKDwKf+KYsuE+V5gw4dZ7nHyGMX9m0wy7urzWjKGWyNFetmArRLvRV0VrxKN70WylFsJvMTJx02OBQ==",
1794 | "peerDependencies": {
1795 | "draft-js": "^0.10.x || ^0.11.x",
1796 | "immutable": "3.x.x || 4.x.x"
1797 | }
1798 | },
1799 | "node_modules/http-parser-js": {
1800 | "version": "0.5.8",
1801 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
1802 | "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q=="
1803 | },
1804 | "node_modules/idb": {
1805 | "version": "7.1.1",
1806 | "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz",
1807 | "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ=="
1808 | },
1809 | "node_modules/immutable": {
1810 | "version": "3.7.6",
1811 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz",
1812 | "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==",
1813 | "engines": {
1814 | "node": ">=0.8.0"
1815 | }
1816 | },
1817 | "node_modules/invariant": {
1818 | "version": "2.2.4",
1819 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
1820 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
1821 | "dependencies": {
1822 | "loose-envify": "^1.0.0"
1823 | }
1824 | },
1825 | "node_modules/is-arguments": {
1826 | "version": "1.1.1",
1827 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
1828 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
1829 | "dependencies": {
1830 | "call-bind": "^1.0.2",
1831 | "has-tostringtag": "^1.0.0"
1832 | },
1833 | "engines": {
1834 | "node": ">= 0.4"
1835 | },
1836 | "funding": {
1837 | "url": "https://github.com/sponsors/ljharb"
1838 | }
1839 | },
1840 | "node_modules/is-binary-path": {
1841 | "version": "2.1.0",
1842 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1843 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1844 | "dev": true,
1845 | "dependencies": {
1846 | "binary-extensions": "^2.0.0"
1847 | },
1848 | "engines": {
1849 | "node": ">=8"
1850 | }
1851 | },
1852 | "node_modules/is-core-module": {
1853 | "version": "2.13.1",
1854 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
1855 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
1856 | "dev": true,
1857 | "dependencies": {
1858 | "hasown": "^2.0.0"
1859 | },
1860 | "funding": {
1861 | "url": "https://github.com/sponsors/ljharb"
1862 | }
1863 | },
1864 | "node_modules/is-date-object": {
1865 | "version": "1.0.5",
1866 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
1867 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
1868 | "dependencies": {
1869 | "has-tostringtag": "^1.0.0"
1870 | },
1871 | "engines": {
1872 | "node": ">= 0.4"
1873 | },
1874 | "funding": {
1875 | "url": "https://github.com/sponsors/ljharb"
1876 | }
1877 | },
1878 | "node_modules/is-extglob": {
1879 | "version": "2.1.1",
1880 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1881 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1882 | "dev": true,
1883 | "engines": {
1884 | "node": ">=0.10.0"
1885 | }
1886 | },
1887 | "node_modules/is-fullwidth-code-point": {
1888 | "version": "3.0.0",
1889 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1890 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1891 | "engines": {
1892 | "node": ">=8"
1893 | }
1894 | },
1895 | "node_modules/is-glob": {
1896 | "version": "4.0.3",
1897 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1898 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1899 | "dev": true,
1900 | "dependencies": {
1901 | "is-extglob": "^2.1.1"
1902 | },
1903 | "engines": {
1904 | "node": ">=0.10.0"
1905 | }
1906 | },
1907 | "node_modules/is-number": {
1908 | "version": "7.0.0",
1909 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1910 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1911 | "dev": true,
1912 | "engines": {
1913 | "node": ">=0.12.0"
1914 | }
1915 | },
1916 | "node_modules/is-regex": {
1917 | "version": "1.1.4",
1918 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
1919 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
1920 | "dependencies": {
1921 | "call-bind": "^1.0.2",
1922 | "has-tostringtag": "^1.0.0"
1923 | },
1924 | "engines": {
1925 | "node": ">= 0.4"
1926 | },
1927 | "funding": {
1928 | "url": "https://github.com/sponsors/ljharb"
1929 | }
1930 | },
1931 | "node_modules/isexe": {
1932 | "version": "2.0.0",
1933 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1934 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1935 | "dev": true
1936 | },
1937 | "node_modules/jackspeak": {
1938 | "version": "2.3.6",
1939 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
1940 | "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
1941 | "dev": true,
1942 | "dependencies": {
1943 | "@isaacs/cliui": "^8.0.2"
1944 | },
1945 | "engines": {
1946 | "node": ">=14"
1947 | },
1948 | "funding": {
1949 | "url": "https://github.com/sponsors/isaacs"
1950 | },
1951 | "optionalDependencies": {
1952 | "@pkgjs/parseargs": "^0.11.0"
1953 | }
1954 | },
1955 | "node_modules/jiti": {
1956 | "version": "1.21.0",
1957 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
1958 | "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
1959 | "dev": true,
1960 | "bin": {
1961 | "jiti": "bin/jiti.js"
1962 | }
1963 | },
1964 | "node_modules/js-tokens": {
1965 | "version": "4.0.0",
1966 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1967 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1968 | },
1969 | "node_modules/lilconfig": {
1970 | "version": "2.1.0",
1971 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
1972 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
1973 | "dev": true,
1974 | "engines": {
1975 | "node": ">=10"
1976 | }
1977 | },
1978 | "node_modules/lines-and-columns": {
1979 | "version": "1.2.4",
1980 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1981 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
1982 | "dev": true
1983 | },
1984 | "node_modules/linkify-it": {
1985 | "version": "2.2.0",
1986 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
1987 | "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
1988 | "dependencies": {
1989 | "uc.micro": "^1.0.1"
1990 | }
1991 | },
1992 | "node_modules/lodash": {
1993 | "version": "4.17.21",
1994 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1995 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1996 | },
1997 | "node_modules/lodash.camelcase": {
1998 | "version": "4.3.0",
1999 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
2000 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
2001 | },
2002 | "node_modules/long": {
2003 | "version": "5.2.3",
2004 | "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
2005 | "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
2006 | },
2007 | "node_modules/loose-envify": {
2008 | "version": "1.4.0",
2009 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
2010 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
2011 | "dependencies": {
2012 | "js-tokens": "^3.0.0 || ^4.0.0"
2013 | },
2014 | "bin": {
2015 | "loose-envify": "cli.js"
2016 | }
2017 | },
2018 | "node_modules/lru-cache": {
2019 | "version": "10.2.0",
2020 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
2021 | "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
2022 | "dev": true,
2023 | "engines": {
2024 | "node": "14 || >=16.14"
2025 | }
2026 | },
2027 | "node_modules/lucide-react": {
2028 | "version": "0.365.0",
2029 | "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.365.0.tgz",
2030 | "integrity": "sha512-sJYpPyyzGHI4B3pys+XSFnE4qtSWc68rFnDLxbNNKjkLST5XSx9DNn5+1Z3eFgFiw39PphNRiVBSVb+AL3oKwA==",
2031 | "peerDependencies": {
2032 | "react": "^16.5.1 || ^17.0.0 || ^18.0.0"
2033 | }
2034 | },
2035 | "node_modules/merge2": {
2036 | "version": "1.4.1",
2037 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2038 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2039 | "dev": true,
2040 | "engines": {
2041 | "node": ">= 8"
2042 | }
2043 | },
2044 | "node_modules/micromatch": {
2045 | "version": "4.0.5",
2046 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
2047 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
2048 | "dev": true,
2049 | "dependencies": {
2050 | "braces": "^3.0.2",
2051 | "picomatch": "^2.3.1"
2052 | },
2053 | "engines": {
2054 | "node": ">=8.6"
2055 | }
2056 | },
2057 | "node_modules/minimatch": {
2058 | "version": "9.0.4",
2059 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
2060 | "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
2061 | "dev": true,
2062 | "dependencies": {
2063 | "brace-expansion": "^2.0.1"
2064 | },
2065 | "engines": {
2066 | "node": ">=16 || 14 >=14.17"
2067 | },
2068 | "funding": {
2069 | "url": "https://github.com/sponsors/isaacs"
2070 | }
2071 | },
2072 | "node_modules/minipass": {
2073 | "version": "7.0.4",
2074 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
2075 | "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
2076 | "dev": true,
2077 | "engines": {
2078 | "node": ">=16 || 14 >=14.17"
2079 | }
2080 | },
2081 | "node_modules/mz": {
2082 | "version": "2.7.0",
2083 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
2084 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
2085 | "dev": true,
2086 | "dependencies": {
2087 | "any-promise": "^1.0.0",
2088 | "object-assign": "^4.0.1",
2089 | "thenify-all": "^1.0.0"
2090 | }
2091 | },
2092 | "node_modules/nanoid": {
2093 | "version": "3.3.7",
2094 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
2095 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
2096 | "funding": [
2097 | {
2098 | "type": "github",
2099 | "url": "https://github.com/sponsors/ai"
2100 | }
2101 | ],
2102 | "bin": {
2103 | "nanoid": "bin/nanoid.cjs"
2104 | },
2105 | "engines": {
2106 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2107 | }
2108 | },
2109 | "node_modules/next": {
2110 | "version": "14.1.4",
2111 | "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz",
2112 | "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==",
2113 | "dependencies": {
2114 | "@next/env": "14.1.4",
2115 | "@swc/helpers": "0.5.2",
2116 | "busboy": "1.6.0",
2117 | "caniuse-lite": "^1.0.30001579",
2118 | "graceful-fs": "^4.2.11",
2119 | "postcss": "8.4.31",
2120 | "styled-jsx": "5.1.1"
2121 | },
2122 | "bin": {
2123 | "next": "dist/bin/next"
2124 | },
2125 | "engines": {
2126 | "node": ">=18.17.0"
2127 | },
2128 | "optionalDependencies": {
2129 | "@next/swc-darwin-arm64": "14.1.4",
2130 | "@next/swc-darwin-x64": "14.1.4",
2131 | "@next/swc-linux-arm64-gnu": "14.1.4",
2132 | "@next/swc-linux-arm64-musl": "14.1.4",
2133 | "@next/swc-linux-x64-gnu": "14.1.4",
2134 | "@next/swc-linux-x64-musl": "14.1.4",
2135 | "@next/swc-win32-arm64-msvc": "14.1.4",
2136 | "@next/swc-win32-ia32-msvc": "14.1.4",
2137 | "@next/swc-win32-x64-msvc": "14.1.4"
2138 | },
2139 | "peerDependencies": {
2140 | "@opentelemetry/api": "^1.1.0",
2141 | "react": "^18.2.0",
2142 | "react-dom": "^18.2.0",
2143 | "sass": "^1.3.0"
2144 | },
2145 | "peerDependenciesMeta": {
2146 | "@opentelemetry/api": {
2147 | "optional": true
2148 | },
2149 | "sass": {
2150 | "optional": true
2151 | }
2152 | }
2153 | },
2154 | "node_modules/next/node_modules/postcss": {
2155 | "version": "8.4.31",
2156 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
2157 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
2158 | "funding": [
2159 | {
2160 | "type": "opencollective",
2161 | "url": "https://opencollective.com/postcss/"
2162 | },
2163 | {
2164 | "type": "tidelift",
2165 | "url": "https://tidelift.com/funding/github/npm/postcss"
2166 | },
2167 | {
2168 | "type": "github",
2169 | "url": "https://github.com/sponsors/ai"
2170 | }
2171 | ],
2172 | "dependencies": {
2173 | "nanoid": "^3.3.6",
2174 | "picocolors": "^1.0.0",
2175 | "source-map-js": "^1.0.2"
2176 | },
2177 | "engines": {
2178 | "node": "^10 || ^12 || >=14"
2179 | }
2180 | },
2181 | "node_modules/node-fetch": {
2182 | "version": "2.7.0",
2183 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
2184 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
2185 | "dependencies": {
2186 | "whatwg-url": "^5.0.0"
2187 | },
2188 | "engines": {
2189 | "node": "4.x || >=6.0.0"
2190 | },
2191 | "peerDependencies": {
2192 | "encoding": "^0.1.0"
2193 | },
2194 | "peerDependenciesMeta": {
2195 | "encoding": {
2196 | "optional": true
2197 | }
2198 | }
2199 | },
2200 | "node_modules/node-releases": {
2201 | "version": "2.0.14",
2202 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
2203 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
2204 | "dev": true
2205 | },
2206 | "node_modules/normalize-path": {
2207 | "version": "3.0.0",
2208 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2209 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2210 | "dev": true,
2211 | "engines": {
2212 | "node": ">=0.10.0"
2213 | }
2214 | },
2215 | "node_modules/normalize-range": {
2216 | "version": "0.1.2",
2217 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
2218 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
2219 | "dev": true,
2220 | "engines": {
2221 | "node": ">=0.10.0"
2222 | }
2223 | },
2224 | "node_modules/object-assign": {
2225 | "version": "4.1.1",
2226 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2227 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
2228 | "engines": {
2229 | "node": ">=0.10.0"
2230 | }
2231 | },
2232 | "node_modules/object-hash": {
2233 | "version": "3.0.0",
2234 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
2235 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
2236 | "dev": true,
2237 | "engines": {
2238 | "node": ">= 6"
2239 | }
2240 | },
2241 | "node_modules/object-is": {
2242 | "version": "1.1.6",
2243 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
2244 | "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
2245 | "dependencies": {
2246 | "call-bind": "^1.0.7",
2247 | "define-properties": "^1.2.1"
2248 | },
2249 | "engines": {
2250 | "node": ">= 0.4"
2251 | },
2252 | "funding": {
2253 | "url": "https://github.com/sponsors/ljharb"
2254 | }
2255 | },
2256 | "node_modules/object-keys": {
2257 | "version": "1.1.1",
2258 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2259 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
2260 | "engines": {
2261 | "node": ">= 0.4"
2262 | }
2263 | },
2264 | "node_modules/parchment": {
2265 | "version": "1.1.4",
2266 | "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
2267 | "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
2268 | },
2269 | "node_modules/path-key": {
2270 | "version": "3.1.1",
2271 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2272 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2273 | "dev": true,
2274 | "engines": {
2275 | "node": ">=8"
2276 | }
2277 | },
2278 | "node_modules/path-parse": {
2279 | "version": "1.0.7",
2280 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2281 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2282 | "dev": true
2283 | },
2284 | "node_modules/path-scurry": {
2285 | "version": "1.10.2",
2286 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
2287 | "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
2288 | "dev": true,
2289 | "dependencies": {
2290 | "lru-cache": "^10.2.0",
2291 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
2292 | },
2293 | "engines": {
2294 | "node": ">=16 || 14 >=14.17"
2295 | },
2296 | "funding": {
2297 | "url": "https://github.com/sponsors/isaacs"
2298 | }
2299 | },
2300 | "node_modules/picocolors": {
2301 | "version": "1.0.0",
2302 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2303 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
2304 | },
2305 | "node_modules/picomatch": {
2306 | "version": "2.3.1",
2307 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2308 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
2309 | "dev": true,
2310 | "engines": {
2311 | "node": ">=8.6"
2312 | },
2313 | "funding": {
2314 | "url": "https://github.com/sponsors/jonschlinkert"
2315 | }
2316 | },
2317 | "node_modules/pify": {
2318 | "version": "2.3.0",
2319 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2320 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
2321 | "dev": true,
2322 | "engines": {
2323 | "node": ">=0.10.0"
2324 | }
2325 | },
2326 | "node_modules/pirates": {
2327 | "version": "4.0.6",
2328 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
2329 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
2330 | "dev": true,
2331 | "engines": {
2332 | "node": ">= 6"
2333 | }
2334 | },
2335 | "node_modules/postcss": {
2336 | "version": "8.4.38",
2337 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
2338 | "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
2339 | "dev": true,
2340 | "funding": [
2341 | {
2342 | "type": "opencollective",
2343 | "url": "https://opencollective.com/postcss/"
2344 | },
2345 | {
2346 | "type": "tidelift",
2347 | "url": "https://tidelift.com/funding/github/npm/postcss"
2348 | },
2349 | {
2350 | "type": "github",
2351 | "url": "https://github.com/sponsors/ai"
2352 | }
2353 | ],
2354 | "dependencies": {
2355 | "nanoid": "^3.3.7",
2356 | "picocolors": "^1.0.0",
2357 | "source-map-js": "^1.2.0"
2358 | },
2359 | "engines": {
2360 | "node": "^10 || ^12 || >=14"
2361 | }
2362 | },
2363 | "node_modules/postcss-import": {
2364 | "version": "15.1.0",
2365 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
2366 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
2367 | "dev": true,
2368 | "dependencies": {
2369 | "postcss-value-parser": "^4.0.0",
2370 | "read-cache": "^1.0.0",
2371 | "resolve": "^1.1.7"
2372 | },
2373 | "engines": {
2374 | "node": ">=14.0.0"
2375 | },
2376 | "peerDependencies": {
2377 | "postcss": "^8.0.0"
2378 | }
2379 | },
2380 | "node_modules/postcss-js": {
2381 | "version": "4.0.1",
2382 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
2383 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
2384 | "dev": true,
2385 | "dependencies": {
2386 | "camelcase-css": "^2.0.1"
2387 | },
2388 | "engines": {
2389 | "node": "^12 || ^14 || >= 16"
2390 | },
2391 | "funding": {
2392 | "type": "opencollective",
2393 | "url": "https://opencollective.com/postcss/"
2394 | },
2395 | "peerDependencies": {
2396 | "postcss": "^8.4.21"
2397 | }
2398 | },
2399 | "node_modules/postcss-load-config": {
2400 | "version": "4.0.2",
2401 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
2402 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
2403 | "dev": true,
2404 | "funding": [
2405 | {
2406 | "type": "opencollective",
2407 | "url": "https://opencollective.com/postcss/"
2408 | },
2409 | {
2410 | "type": "github",
2411 | "url": "https://github.com/sponsors/ai"
2412 | }
2413 | ],
2414 | "dependencies": {
2415 | "lilconfig": "^3.0.0",
2416 | "yaml": "^2.3.4"
2417 | },
2418 | "engines": {
2419 | "node": ">= 14"
2420 | },
2421 | "peerDependencies": {
2422 | "postcss": ">=8.0.9",
2423 | "ts-node": ">=9.0.0"
2424 | },
2425 | "peerDependenciesMeta": {
2426 | "postcss": {
2427 | "optional": true
2428 | },
2429 | "ts-node": {
2430 | "optional": true
2431 | }
2432 | }
2433 | },
2434 | "node_modules/postcss-load-config/node_modules/lilconfig": {
2435 | "version": "3.1.1",
2436 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
2437 | "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
2438 | "dev": true,
2439 | "engines": {
2440 | "node": ">=14"
2441 | },
2442 | "funding": {
2443 | "url": "https://github.com/sponsors/antonk52"
2444 | }
2445 | },
2446 | "node_modules/postcss-nested": {
2447 | "version": "6.0.1",
2448 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
2449 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
2450 | "dev": true,
2451 | "dependencies": {
2452 | "postcss-selector-parser": "^6.0.11"
2453 | },
2454 | "engines": {
2455 | "node": ">=12.0"
2456 | },
2457 | "funding": {
2458 | "type": "opencollective",
2459 | "url": "https://opencollective.com/postcss/"
2460 | },
2461 | "peerDependencies": {
2462 | "postcss": "^8.2.14"
2463 | }
2464 | },
2465 | "node_modules/postcss-selector-parser": {
2466 | "version": "6.0.16",
2467 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
2468 | "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
2469 | "dev": true,
2470 | "dependencies": {
2471 | "cssesc": "^3.0.0",
2472 | "util-deprecate": "^1.0.2"
2473 | },
2474 | "engines": {
2475 | "node": ">=4"
2476 | }
2477 | },
2478 | "node_modules/postcss-value-parser": {
2479 | "version": "4.2.0",
2480 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2481 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2482 | "dev": true
2483 | },
2484 | "node_modules/promise": {
2485 | "version": "7.3.1",
2486 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
2487 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
2488 | "dependencies": {
2489 | "asap": "~2.0.3"
2490 | }
2491 | },
2492 | "node_modules/prop-types": {
2493 | "version": "15.8.1",
2494 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
2495 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
2496 | "dependencies": {
2497 | "loose-envify": "^1.4.0",
2498 | "object-assign": "^4.1.1",
2499 | "react-is": "^16.13.1"
2500 | }
2501 | },
2502 | "node_modules/protobufjs": {
2503 | "version": "7.2.6",
2504 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz",
2505 | "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==",
2506 | "hasInstallScript": true,
2507 | "dependencies": {
2508 | "@protobufjs/aspromise": "^1.1.2",
2509 | "@protobufjs/base64": "^1.1.2",
2510 | "@protobufjs/codegen": "^2.0.4",
2511 | "@protobufjs/eventemitter": "^1.1.0",
2512 | "@protobufjs/fetch": "^1.1.0",
2513 | "@protobufjs/float": "^1.0.2",
2514 | "@protobufjs/inquire": "^1.1.0",
2515 | "@protobufjs/path": "^1.1.2",
2516 | "@protobufjs/pool": "^1.1.0",
2517 | "@protobufjs/utf8": "^1.1.0",
2518 | "@types/node": ">=13.7.0",
2519 | "long": "^5.0.0"
2520 | },
2521 | "engines": {
2522 | "node": ">=12.0.0"
2523 | }
2524 | },
2525 | "node_modules/queue-microtask": {
2526 | "version": "1.2.3",
2527 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2528 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2529 | "dev": true,
2530 | "funding": [
2531 | {
2532 | "type": "github",
2533 | "url": "https://github.com/sponsors/feross"
2534 | },
2535 | {
2536 | "type": "patreon",
2537 | "url": "https://www.patreon.com/feross"
2538 | },
2539 | {
2540 | "type": "consulting",
2541 | "url": "https://feross.org/support"
2542 | }
2543 | ]
2544 | },
2545 | "node_modules/quill": {
2546 | "version": "1.3.7",
2547 | "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
2548 | "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
2549 | "dependencies": {
2550 | "clone": "^2.1.1",
2551 | "deep-equal": "^1.0.1",
2552 | "eventemitter3": "^2.0.3",
2553 | "extend": "^3.0.2",
2554 | "parchment": "^1.1.4",
2555 | "quill-delta": "^3.6.2"
2556 | }
2557 | },
2558 | "node_modules/quill-delta": {
2559 | "version": "3.6.3",
2560 | "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
2561 | "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
2562 | "dependencies": {
2563 | "deep-equal": "^1.0.1",
2564 | "extend": "^3.0.2",
2565 | "fast-diff": "1.1.2"
2566 | },
2567 | "engines": {
2568 | "node": ">=0.10"
2569 | }
2570 | },
2571 | "node_modules/react": {
2572 | "version": "18.2.0",
2573 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
2574 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
2575 | "dependencies": {
2576 | "loose-envify": "^1.1.0"
2577 | },
2578 | "engines": {
2579 | "node": ">=0.10.0"
2580 | }
2581 | },
2582 | "node_modules/react-dom": {
2583 | "version": "18.2.0",
2584 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
2585 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
2586 | "dependencies": {
2587 | "loose-envify": "^1.1.0",
2588 | "scheduler": "^0.23.0"
2589 | },
2590 | "peerDependencies": {
2591 | "react": "^18.2.0"
2592 | }
2593 | },
2594 | "node_modules/react-draft-wysiwyg": {
2595 | "version": "1.15.0",
2596 | "resolved": "https://registry.npmjs.org/react-draft-wysiwyg/-/react-draft-wysiwyg-1.15.0.tgz",
2597 | "integrity": "sha512-p1cYZcWc6/ALFBVksbFoCM3b29fGQDlZLIMrXng0TU/UElxIOF2/AWWo4L5auIYVhmqKTZ0NkNjnXOzGGuxyeA==",
2598 | "dependencies": {
2599 | "classnames": "^2.2.6",
2600 | "draftjs-utils": "^0.10.2",
2601 | "html-to-draftjs": "^1.5.0",
2602 | "linkify-it": "^2.2.0",
2603 | "prop-types": "^15.7.2"
2604 | },
2605 | "peerDependencies": {
2606 | "draft-js": "^0.10.x || ^0.11.x",
2607 | "immutable": "3.x.x || 4.x.x",
2608 | "react": "0.13.x || 0.14.x || ^15.0.0-0 || 15.x.x || ^16.0.0-0 || ^16.x.x || ^17.x.x || ^18.x.x",
2609 | "react-dom": "0.13.x || 0.14.x || ^15.0.0-0 || 15.x.x || ^16.0.0-0 || ^16.x.x || ^17.x.x || ^18.x.x"
2610 | }
2611 | },
2612 | "node_modules/react-is": {
2613 | "version": "16.13.1",
2614 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
2615 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
2616 | },
2617 | "node_modules/react-quill": {
2618 | "version": "2.0.0",
2619 | "resolved": "https://registry.npmjs.org/react-quill/-/react-quill-2.0.0.tgz",
2620 | "integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==",
2621 | "dependencies": {
2622 | "@types/quill": "^1.3.10",
2623 | "lodash": "^4.17.4",
2624 | "quill": "^1.3.7"
2625 | },
2626 | "peerDependencies": {
2627 | "react": "^16 || ^17 || ^18",
2628 | "react-dom": "^16 || ^17 || ^18"
2629 | }
2630 | },
2631 | "node_modules/read-cache": {
2632 | "version": "1.0.0",
2633 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2634 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2635 | "dev": true,
2636 | "dependencies": {
2637 | "pify": "^2.3.0"
2638 | }
2639 | },
2640 | "node_modules/readdirp": {
2641 | "version": "3.6.0",
2642 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2643 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2644 | "dev": true,
2645 | "dependencies": {
2646 | "picomatch": "^2.2.1"
2647 | },
2648 | "engines": {
2649 | "node": ">=8.10.0"
2650 | }
2651 | },
2652 | "node_modules/regenerator-runtime": {
2653 | "version": "0.14.1",
2654 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
2655 | "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
2656 | },
2657 | "node_modules/regexp.prototype.flags": {
2658 | "version": "1.5.2",
2659 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
2660 | "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
2661 | "dependencies": {
2662 | "call-bind": "^1.0.6",
2663 | "define-properties": "^1.2.1",
2664 | "es-errors": "^1.3.0",
2665 | "set-function-name": "^2.0.1"
2666 | },
2667 | "engines": {
2668 | "node": ">= 0.4"
2669 | },
2670 | "funding": {
2671 | "url": "https://github.com/sponsors/ljharb"
2672 | }
2673 | },
2674 | "node_modules/require-directory": {
2675 | "version": "2.1.1",
2676 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2677 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
2678 | "engines": {
2679 | "node": ">=0.10.0"
2680 | }
2681 | },
2682 | "node_modules/resolve": {
2683 | "version": "1.22.8",
2684 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
2685 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
2686 | "dev": true,
2687 | "dependencies": {
2688 | "is-core-module": "^2.13.0",
2689 | "path-parse": "^1.0.7",
2690 | "supports-preserve-symlinks-flag": "^1.0.0"
2691 | },
2692 | "bin": {
2693 | "resolve": "bin/resolve"
2694 | },
2695 | "funding": {
2696 | "url": "https://github.com/sponsors/ljharb"
2697 | }
2698 | },
2699 | "node_modules/reusify": {
2700 | "version": "1.0.4",
2701 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2702 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2703 | "dev": true,
2704 | "engines": {
2705 | "iojs": ">=1.0.0",
2706 | "node": ">=0.10.0"
2707 | }
2708 | },
2709 | "node_modules/run-parallel": {
2710 | "version": "1.2.0",
2711 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2712 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2713 | "dev": true,
2714 | "funding": [
2715 | {
2716 | "type": "github",
2717 | "url": "https://github.com/sponsors/feross"
2718 | },
2719 | {
2720 | "type": "patreon",
2721 | "url": "https://www.patreon.com/feross"
2722 | },
2723 | {
2724 | "type": "consulting",
2725 | "url": "https://feross.org/support"
2726 | }
2727 | ],
2728 | "dependencies": {
2729 | "queue-microtask": "^1.2.2"
2730 | }
2731 | },
2732 | "node_modules/safe-buffer": {
2733 | "version": "5.2.1",
2734 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2735 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
2736 | "funding": [
2737 | {
2738 | "type": "github",
2739 | "url": "https://github.com/sponsors/feross"
2740 | },
2741 | {
2742 | "type": "patreon",
2743 | "url": "https://www.patreon.com/feross"
2744 | },
2745 | {
2746 | "type": "consulting",
2747 | "url": "https://feross.org/support"
2748 | }
2749 | ]
2750 | },
2751 | "node_modules/scheduler": {
2752 | "version": "0.23.0",
2753 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
2754 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
2755 | "dependencies": {
2756 | "loose-envify": "^1.1.0"
2757 | }
2758 | },
2759 | "node_modules/set-function-length": {
2760 | "version": "1.2.2",
2761 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
2762 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
2763 | "dependencies": {
2764 | "define-data-property": "^1.1.4",
2765 | "es-errors": "^1.3.0",
2766 | "function-bind": "^1.1.2",
2767 | "get-intrinsic": "^1.2.4",
2768 | "gopd": "^1.0.1",
2769 | "has-property-descriptors": "^1.0.2"
2770 | },
2771 | "engines": {
2772 | "node": ">= 0.4"
2773 | }
2774 | },
2775 | "node_modules/set-function-name": {
2776 | "version": "2.0.2",
2777 | "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
2778 | "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
2779 | "dependencies": {
2780 | "define-data-property": "^1.1.4",
2781 | "es-errors": "^1.3.0",
2782 | "functions-have-names": "^1.2.3",
2783 | "has-property-descriptors": "^1.0.2"
2784 | },
2785 | "engines": {
2786 | "node": ">= 0.4"
2787 | }
2788 | },
2789 | "node_modules/setimmediate": {
2790 | "version": "1.0.5",
2791 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
2792 | "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
2793 | },
2794 | "node_modules/shebang-command": {
2795 | "version": "2.0.0",
2796 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2797 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2798 | "dev": true,
2799 | "dependencies": {
2800 | "shebang-regex": "^3.0.0"
2801 | },
2802 | "engines": {
2803 | "node": ">=8"
2804 | }
2805 | },
2806 | "node_modules/shebang-regex": {
2807 | "version": "3.0.0",
2808 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2809 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2810 | "dev": true,
2811 | "engines": {
2812 | "node": ">=8"
2813 | }
2814 | },
2815 | "node_modules/signal-exit": {
2816 | "version": "4.1.0",
2817 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2818 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
2819 | "dev": true,
2820 | "engines": {
2821 | "node": ">=14"
2822 | },
2823 | "funding": {
2824 | "url": "https://github.com/sponsors/isaacs"
2825 | }
2826 | },
2827 | "node_modules/source-map-js": {
2828 | "version": "1.2.0",
2829 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
2830 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
2831 | "engines": {
2832 | "node": ">=0.10.0"
2833 | }
2834 | },
2835 | "node_modules/streamsearch": {
2836 | "version": "1.1.0",
2837 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
2838 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
2839 | "engines": {
2840 | "node": ">=10.0.0"
2841 | }
2842 | },
2843 | "node_modules/string-width": {
2844 | "version": "5.1.2",
2845 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2846 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2847 | "dev": true,
2848 | "dependencies": {
2849 | "eastasianwidth": "^0.2.0",
2850 | "emoji-regex": "^9.2.2",
2851 | "strip-ansi": "^7.0.1"
2852 | },
2853 | "engines": {
2854 | "node": ">=12"
2855 | },
2856 | "funding": {
2857 | "url": "https://github.com/sponsors/sindresorhus"
2858 | }
2859 | },
2860 | "node_modules/string-width-cjs": {
2861 | "name": "string-width",
2862 | "version": "4.2.3",
2863 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2864 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2865 | "dev": true,
2866 | "dependencies": {
2867 | "emoji-regex": "^8.0.0",
2868 | "is-fullwidth-code-point": "^3.0.0",
2869 | "strip-ansi": "^6.0.1"
2870 | },
2871 | "engines": {
2872 | "node": ">=8"
2873 | }
2874 | },
2875 | "node_modules/string-width-cjs/node_modules/ansi-regex": {
2876 | "version": "5.0.1",
2877 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2878 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2879 | "dev": true,
2880 | "engines": {
2881 | "node": ">=8"
2882 | }
2883 | },
2884 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
2885 | "version": "8.0.0",
2886 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2887 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2888 | "dev": true
2889 | },
2890 | "node_modules/string-width-cjs/node_modules/strip-ansi": {
2891 | "version": "6.0.1",
2892 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2893 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2894 | "dev": true,
2895 | "dependencies": {
2896 | "ansi-regex": "^5.0.1"
2897 | },
2898 | "engines": {
2899 | "node": ">=8"
2900 | }
2901 | },
2902 | "node_modules/strip-ansi": {
2903 | "version": "7.1.0",
2904 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
2905 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
2906 | "dev": true,
2907 | "dependencies": {
2908 | "ansi-regex": "^6.0.1"
2909 | },
2910 | "engines": {
2911 | "node": ">=12"
2912 | },
2913 | "funding": {
2914 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
2915 | }
2916 | },
2917 | "node_modules/strip-ansi-cjs": {
2918 | "name": "strip-ansi",
2919 | "version": "6.0.1",
2920 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2921 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2922 | "dev": true,
2923 | "dependencies": {
2924 | "ansi-regex": "^5.0.1"
2925 | },
2926 | "engines": {
2927 | "node": ">=8"
2928 | }
2929 | },
2930 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
2931 | "version": "5.0.1",
2932 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2933 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2934 | "dev": true,
2935 | "engines": {
2936 | "node": ">=8"
2937 | }
2938 | },
2939 | "node_modules/styled-jsx": {
2940 | "version": "5.1.1",
2941 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
2942 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
2943 | "dependencies": {
2944 | "client-only": "0.0.1"
2945 | },
2946 | "engines": {
2947 | "node": ">= 12.0.0"
2948 | },
2949 | "peerDependencies": {
2950 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
2951 | },
2952 | "peerDependenciesMeta": {
2953 | "@babel/core": {
2954 | "optional": true
2955 | },
2956 | "babel-plugin-macros": {
2957 | "optional": true
2958 | }
2959 | }
2960 | },
2961 | "node_modules/sucrase": {
2962 | "version": "3.35.0",
2963 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
2964 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
2965 | "dev": true,
2966 | "dependencies": {
2967 | "@jridgewell/gen-mapping": "^0.3.2",
2968 | "commander": "^4.0.0",
2969 | "glob": "^10.3.10",
2970 | "lines-and-columns": "^1.1.6",
2971 | "mz": "^2.7.0",
2972 | "pirates": "^4.0.1",
2973 | "ts-interface-checker": "^0.1.9"
2974 | },
2975 | "bin": {
2976 | "sucrase": "bin/sucrase",
2977 | "sucrase-node": "bin/sucrase-node"
2978 | },
2979 | "engines": {
2980 | "node": ">=16 || 14 >=14.17"
2981 | }
2982 | },
2983 | "node_modules/supports-preserve-symlinks-flag": {
2984 | "version": "1.0.0",
2985 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2986 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2987 | "dev": true,
2988 | "engines": {
2989 | "node": ">= 0.4"
2990 | },
2991 | "funding": {
2992 | "url": "https://github.com/sponsors/ljharb"
2993 | }
2994 | },
2995 | "node_modules/swr": {
2996 | "version": "2.2.5",
2997 | "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz",
2998 | "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==",
2999 | "dependencies": {
3000 | "client-only": "^0.0.1",
3001 | "use-sync-external-store": "^1.2.0"
3002 | },
3003 | "peerDependencies": {
3004 | "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
3005 | }
3006 | },
3007 | "node_modules/tailwindcss": {
3008 | "version": "3.4.3",
3009 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz",
3010 | "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==",
3011 | "dev": true,
3012 | "dependencies": {
3013 | "@alloc/quick-lru": "^5.2.0",
3014 | "arg": "^5.0.2",
3015 | "chokidar": "^3.5.3",
3016 | "didyoumean": "^1.2.2",
3017 | "dlv": "^1.1.3",
3018 | "fast-glob": "^3.3.0",
3019 | "glob-parent": "^6.0.2",
3020 | "is-glob": "^4.0.3",
3021 | "jiti": "^1.21.0",
3022 | "lilconfig": "^2.1.0",
3023 | "micromatch": "^4.0.5",
3024 | "normalize-path": "^3.0.0",
3025 | "object-hash": "^3.0.0",
3026 | "picocolors": "^1.0.0",
3027 | "postcss": "^8.4.23",
3028 | "postcss-import": "^15.1.0",
3029 | "postcss-js": "^4.0.1",
3030 | "postcss-load-config": "^4.0.1",
3031 | "postcss-nested": "^6.0.1",
3032 | "postcss-selector-parser": "^6.0.11",
3033 | "resolve": "^1.22.2",
3034 | "sucrase": "^3.32.0"
3035 | },
3036 | "bin": {
3037 | "tailwind": "lib/cli.js",
3038 | "tailwindcss": "lib/cli.js"
3039 | },
3040 | "engines": {
3041 | "node": ">=14.0.0"
3042 | }
3043 | },
3044 | "node_modules/thenify": {
3045 | "version": "3.3.1",
3046 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
3047 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
3048 | "dev": true,
3049 | "dependencies": {
3050 | "any-promise": "^1.0.0"
3051 | }
3052 | },
3053 | "node_modules/thenify-all": {
3054 | "version": "1.6.0",
3055 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
3056 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
3057 | "dev": true,
3058 | "dependencies": {
3059 | "thenify": ">= 3.1.0 < 4"
3060 | },
3061 | "engines": {
3062 | "node": ">=0.8"
3063 | }
3064 | },
3065 | "node_modules/to-regex-range": {
3066 | "version": "5.0.1",
3067 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3068 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3069 | "dev": true,
3070 | "dependencies": {
3071 | "is-number": "^7.0.0"
3072 | },
3073 | "engines": {
3074 | "node": ">=8.0"
3075 | }
3076 | },
3077 | "node_modules/tr46": {
3078 | "version": "0.0.3",
3079 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
3080 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
3081 | },
3082 | "node_modules/ts-interface-checker": {
3083 | "version": "0.1.13",
3084 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
3085 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
3086 | "dev": true
3087 | },
3088 | "node_modules/tslib": {
3089 | "version": "2.6.2",
3090 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
3091 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
3092 | },
3093 | "node_modules/ua-parser-js": {
3094 | "version": "0.7.37",
3095 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz",
3096 | "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==",
3097 | "funding": [
3098 | {
3099 | "type": "opencollective",
3100 | "url": "https://opencollective.com/ua-parser-js"
3101 | },
3102 | {
3103 | "type": "paypal",
3104 | "url": "https://paypal.me/faisalman"
3105 | },
3106 | {
3107 | "type": "github",
3108 | "url": "https://github.com/sponsors/faisalman"
3109 | }
3110 | ],
3111 | "engines": {
3112 | "node": "*"
3113 | }
3114 | },
3115 | "node_modules/uc.micro": {
3116 | "version": "1.0.6",
3117 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
3118 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
3119 | },
3120 | "node_modules/undici": {
3121 | "version": "5.28.3",
3122 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz",
3123 | "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==",
3124 | "dependencies": {
3125 | "@fastify/busboy": "^2.0.0"
3126 | },
3127 | "engines": {
3128 | "node": ">=14.0"
3129 | }
3130 | },
3131 | "node_modules/undici-types": {
3132 | "version": "5.26.5",
3133 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
3134 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
3135 | },
3136 | "node_modules/update-browserslist-db": {
3137 | "version": "1.0.13",
3138 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
3139 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
3140 | "dev": true,
3141 | "funding": [
3142 | {
3143 | "type": "opencollective",
3144 | "url": "https://opencollective.com/browserslist"
3145 | },
3146 | {
3147 | "type": "tidelift",
3148 | "url": "https://tidelift.com/funding/github/npm/browserslist"
3149 | },
3150 | {
3151 | "type": "github",
3152 | "url": "https://github.com/sponsors/ai"
3153 | }
3154 | ],
3155 | "dependencies": {
3156 | "escalade": "^3.1.1",
3157 | "picocolors": "^1.0.0"
3158 | },
3159 | "bin": {
3160 | "update-browserslist-db": "cli.js"
3161 | },
3162 | "peerDependencies": {
3163 | "browserslist": ">= 4.21.0"
3164 | }
3165 | },
3166 | "node_modules/use-sync-external-store": {
3167 | "version": "1.2.0",
3168 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
3169 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
3170 | "peerDependencies": {
3171 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
3172 | }
3173 | },
3174 | "node_modules/util-deprecate": {
3175 | "version": "1.0.2",
3176 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3177 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
3178 | "dev": true
3179 | },
3180 | "node_modules/webidl-conversions": {
3181 | "version": "3.0.1",
3182 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
3183 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
3184 | },
3185 | "node_modules/websocket-driver": {
3186 | "version": "0.7.4",
3187 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
3188 | "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
3189 | "dependencies": {
3190 | "http-parser-js": ">=0.5.1",
3191 | "safe-buffer": ">=5.1.0",
3192 | "websocket-extensions": ">=0.1.1"
3193 | },
3194 | "engines": {
3195 | "node": ">=0.8.0"
3196 | }
3197 | },
3198 | "node_modules/websocket-extensions": {
3199 | "version": "0.1.4",
3200 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
3201 | "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
3202 | "engines": {
3203 | "node": ">=0.8.0"
3204 | }
3205 | },
3206 | "node_modules/whatwg-url": {
3207 | "version": "5.0.0",
3208 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
3209 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
3210 | "dependencies": {
3211 | "tr46": "~0.0.3",
3212 | "webidl-conversions": "^3.0.0"
3213 | }
3214 | },
3215 | "node_modules/which": {
3216 | "version": "2.0.2",
3217 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3218 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3219 | "dev": true,
3220 | "dependencies": {
3221 | "isexe": "^2.0.0"
3222 | },
3223 | "bin": {
3224 | "node-which": "bin/node-which"
3225 | },
3226 | "engines": {
3227 | "node": ">= 8"
3228 | }
3229 | },
3230 | "node_modules/wrap-ansi": {
3231 | "version": "8.1.0",
3232 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
3233 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
3234 | "dev": true,
3235 | "dependencies": {
3236 | "ansi-styles": "^6.1.0",
3237 | "string-width": "^5.0.1",
3238 | "strip-ansi": "^7.0.1"
3239 | },
3240 | "engines": {
3241 | "node": ">=12"
3242 | },
3243 | "funding": {
3244 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3245 | }
3246 | },
3247 | "node_modules/wrap-ansi-cjs": {
3248 | "name": "wrap-ansi",
3249 | "version": "7.0.0",
3250 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3251 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3252 | "dev": true,
3253 | "dependencies": {
3254 | "ansi-styles": "^4.0.0",
3255 | "string-width": "^4.1.0",
3256 | "strip-ansi": "^6.0.0"
3257 | },
3258 | "engines": {
3259 | "node": ">=10"
3260 | },
3261 | "funding": {
3262 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3263 | }
3264 | },
3265 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
3266 | "version": "5.0.1",
3267 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
3268 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
3269 | "dev": true,
3270 | "engines": {
3271 | "node": ">=8"
3272 | }
3273 | },
3274 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
3275 | "version": "4.3.0",
3276 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
3277 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
3278 | "dev": true,
3279 | "dependencies": {
3280 | "color-convert": "^2.0.1"
3281 | },
3282 | "engines": {
3283 | "node": ">=8"
3284 | },
3285 | "funding": {
3286 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
3287 | }
3288 | },
3289 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
3290 | "version": "8.0.0",
3291 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3292 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
3293 | "dev": true
3294 | },
3295 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
3296 | "version": "4.2.3",
3297 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3298 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3299 | "dev": true,
3300 | "dependencies": {
3301 | "emoji-regex": "^8.0.0",
3302 | "is-fullwidth-code-point": "^3.0.0",
3303 | "strip-ansi": "^6.0.1"
3304 | },
3305 | "engines": {
3306 | "node": ">=8"
3307 | }
3308 | },
3309 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
3310 | "version": "6.0.1",
3311 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3312 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3313 | "dev": true,
3314 | "dependencies": {
3315 | "ansi-regex": "^5.0.1"
3316 | },
3317 | "engines": {
3318 | "node": ">=8"
3319 | }
3320 | },
3321 | "node_modules/y18n": {
3322 | "version": "5.0.8",
3323 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
3324 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
3325 | "engines": {
3326 | "node": ">=10"
3327 | }
3328 | },
3329 | "node_modules/yaml": {
3330 | "version": "2.4.1",
3331 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
3332 | "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
3333 | "dev": true,
3334 | "bin": {
3335 | "yaml": "bin.mjs"
3336 | },
3337 | "engines": {
3338 | "node": ">= 14"
3339 | }
3340 | },
3341 | "node_modules/yargs": {
3342 | "version": "17.7.2",
3343 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
3344 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
3345 | "dependencies": {
3346 | "cliui": "^8.0.1",
3347 | "escalade": "^3.1.1",
3348 | "get-caller-file": "^2.0.5",
3349 | "require-directory": "^2.1.1",
3350 | "string-width": "^4.2.3",
3351 | "y18n": "^5.0.5",
3352 | "yargs-parser": "^21.1.1"
3353 | },
3354 | "engines": {
3355 | "node": ">=12"
3356 | }
3357 | },
3358 | "node_modules/yargs-parser": {
3359 | "version": "21.1.1",
3360 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
3361 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
3362 | "engines": {
3363 | "node": ">=12"
3364 | }
3365 | },
3366 | "node_modules/yargs/node_modules/ansi-regex": {
3367 | "version": "5.0.1",
3368 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
3369 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
3370 | "engines": {
3371 | "node": ">=8"
3372 | }
3373 | },
3374 | "node_modules/yargs/node_modules/emoji-regex": {
3375 | "version": "8.0.0",
3376 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3377 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
3378 | },
3379 | "node_modules/yargs/node_modules/string-width": {
3380 | "version": "4.2.3",
3381 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3382 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3383 | "dependencies": {
3384 | "emoji-regex": "^8.0.0",
3385 | "is-fullwidth-code-point": "^3.0.0",
3386 | "strip-ansi": "^6.0.1"
3387 | },
3388 | "engines": {
3389 | "node": ">=8"
3390 | }
3391 | },
3392 | "node_modules/yargs/node_modules/strip-ansi": {
3393 | "version": "6.0.1",
3394 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3395 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3396 | "dependencies": {
3397 | "ansi-regex": "^5.0.1"
3398 | },
3399 | "engines": {
3400 | "node": ">=8"
3401 | }
3402 | }
3403 | }
3404 | }
3405 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lyeana_blog",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "draft-convert": "^2.1.13",
13 | "draft-js": "^0.11.7",
14 | "firebase": "^10.10.0",
15 | "lucide-react": "^0.365.0",
16 | "next": "14.1.4",
17 | "react": "^18",
18 | "react-dom": "^18",
19 | "react-draft-wysiwyg": "^1.15.0",
20 | "react-quill": "^2.0.0",
21 | "swr": "^2.2.5"
22 | },
23 | "devDependencies": {
24 | "autoprefixer": "^10.0.1",
25 | "postcss": "^8",
26 | "tailwindcss": "^3.3.0"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/public/google.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RajendraAVerma/blog-website-nextjs/b1bd1a4a3b271e5aba7bd165f8d21dc97393f746/public/google.png
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RajendraAVerma/blog-website-nextjs/b1bd1a4a3b271e5aba7bd165f8d21dc97393f746/public/logo.png
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./pages/**/*.{js,ts,jsx,tsx,mdx}",
5 | "./components/**/*.{js,ts,jsx,tsx,mdx}",
6 | "./app/**/*.{js,ts,jsx,tsx,mdx}",
7 | ],
8 | theme: {
9 | extend: {
10 | backgroundImage: {
11 | "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
12 | "gradient-conic":
13 | "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
14 | },
15 | },
16 | },
17 | plugins: [],
18 | };
19 |
--------------------------------------------------------------------------------