├── .gitignore ├── README.md ├── app ├── Components │ ├── Button │ │ └── Button.tsx │ ├── Modals │ │ ├── CreateContent.tsx │ │ └── Modal.tsx │ ├── Sidebar │ │ └── Sidebar.tsx │ ├── TaskItem │ │ └── TaskItem.tsx │ └── Tasks │ │ └── Tasks.tsx ├── api │ └── tasks │ │ ├── [id] │ │ └── route.ts │ │ └── route.ts ├── completed │ └── page.tsx ├── context │ ├── globalProvider.js │ └── themes.js ├── favicon.ico ├── globals.css ├── important │ └── page.tsx ├── incomplete │ └── page.tsx ├── layout.tsx ├── page.tsx ├── providers │ ├── ContextProvider.tsx │ └── GlobalStyleProvider.tsx ├── signin │ └── page.tsx ├── signup │ └── page.tsx └── utils │ ├── Icons.js │ ├── connect.ts │ ├── formatDate.js │ └── menu.js ├── middleware.ts ├── next.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── prisma └── schema.prisma ├── public ├── avatar1.png ├── next.svg └── vercel.svg ├── tailwind.config.ts └── tsconfig.json /.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 | .env 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /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.tsx`. 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/Components/Button/Button.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { useGlobalState } from "@/app/context/globalProvider"; 3 | 4 | import React from "react"; 5 | import styled from "styled-components"; 6 | 7 | interface Props { 8 | icon?: React.ReactNode; 9 | name?: string; 10 | background?: string; 11 | padding?: string; 12 | borderRad?: string; 13 | fw?: string; 14 | fs?: string; 15 | click?: () => void; 16 | type?: "submit" | "button" | "reset" | undefined; 17 | border?: string; 18 | color?: string; 19 | } 20 | 21 | function Button({ 22 | icon, 23 | name, 24 | background, 25 | padding, 26 | borderRad, 27 | fw, 28 | fs, 29 | click, 30 | type, 31 | border, 32 | color, 33 | }: Props) { 34 | const { theme } = useGlobalState(); 35 | 36 | return ( 37 | 51 | {icon && icon} 52 | {name} 53 | 54 | ); 55 | } 56 | 57 | const ButtonStyled = styled.button` 58 | position: relative; 59 | display: flex; 60 | align-items: center; 61 | color: ${(props) => props.theme.colorGrey2}; 62 | z-index: 5; 63 | cursor: pointer; 64 | 65 | transition: all 0.55s ease-in-out; 66 | 67 | i { 68 | margin-right: 1rem; 69 | color: ${(props) => props.theme.colorGrey2}; 70 | font-size: 1.5rem; 71 | transition: all 0.55s ease-in-out; 72 | } 73 | 74 | &:hover { 75 | color: ${(props) => props.theme.colorGrey0}; 76 | i { 77 | color: ${(props) => props.theme.colorGrey0}; 78 | } 79 | } 80 | `; 81 | 82 | export default Button; 83 | -------------------------------------------------------------------------------- /app/Components/Modals/CreateContent.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { useGlobalState } from "@/app/context/globalProvider"; 3 | import axios from "axios"; 4 | import React, { useState } from "react"; 5 | import toast from "react-hot-toast"; 6 | import styled from "styled-components"; 7 | import Button from "../Button/Button"; 8 | import { add, plus } from "@/app/utils/Icons"; 9 | 10 | function CreateContent() { 11 | const [title, setTitle] = useState(""); 12 | const [description, setDescription] = useState(""); 13 | const [date, setDate] = useState(""); 14 | const [completed, setCompleted] = useState(false); 15 | const [important, setImportant] = useState(false); 16 | 17 | const { theme, allTasks, closeModal } = useGlobalState(); 18 | 19 | const handleChange = (name: string) => (e: any) => { 20 | switch (name) { 21 | case "title": 22 | setTitle(e.target.value); 23 | break; 24 | case "description": 25 | setDescription(e.target.value); 26 | break; 27 | case "date": 28 | setDate(e.target.value); 29 | break; 30 | case "completed": 31 | setCompleted(e.target.checked); 32 | break; 33 | case "important": 34 | setImportant(e.target.checked); 35 | break; 36 | default: 37 | break; 38 | } 39 | }; 40 | 41 | const handleSubmit = async (e: any) => { 42 | e.preventDefault(); 43 | 44 | const task = { 45 | title, 46 | description, 47 | date, 48 | completed, 49 | important, 50 | }; 51 | 52 | try { 53 | const res = await axios.post("/api/tasks", task); 54 | 55 | if (res.data.error) { 56 | toast.error(res.data.error); 57 | } 58 | 59 | if (!res.data.error) { 60 | toast.success("Task created successfully."); 61 | allTasks(); 62 | closeModal(); 63 | } 64 | } catch (error) { 65 | toast.error("Something went wrong."); 66 | console.log(error); 67 | } 68 | }; 69 | 70 | return ( 71 | 72 |

Create a Task

73 |
74 | 75 | 83 |
84 |
85 | 86 | 94 |
95 |
96 | 97 | 104 |
105 |
106 | 107 | 114 |
115 |
116 | 117 | 124 |
125 | 126 |
127 |
138 |
139 | ); 140 | } 141 | 142 | const CreateContentStyled = styled.form` 143 | > h1 { 144 | font-size: clamp(1.2rem, 5vw, 1.6rem); 145 | font-weight: 600; 146 | } 147 | 148 | color: ${(props) => props.theme.colorGrey1}; 149 | 150 | .input-control { 151 | position: relative; 152 | margin: 1.6rem 0; 153 | font-weight: 500; 154 | 155 | @media screen and (max-width: 450px) { 156 | margin: 1rem 0; 157 | } 158 | 159 | label { 160 | margin-bottom: 0.5rem; 161 | display: inline-block; 162 | font-size: clamp(0.9rem, 5vw, 1.2rem); 163 | 164 | span { 165 | color: ${(props) => props.theme.colorGrey3}; 166 | } 167 | } 168 | 169 | input, 170 | textarea { 171 | width: 100%; 172 | padding: 1rem; 173 | 174 | resize: none; 175 | background-color: ${(props) => props.theme.colorGreyDark}; 176 | color: ${(props) => props.theme.colorGrey2}; 177 | border-radius: 0.5rem; 178 | } 179 | } 180 | 181 | .submit-btn button { 182 | transition: all 0.35s ease-in-out; 183 | 184 | @media screen and (max-width: 500px) { 185 | font-size: 0.9rem !important; 186 | padding: 0.6rem 1rem !important; 187 | 188 | i { 189 | font-size: 1.2rem !important; 190 | margin-right: 0.5rem !important; 191 | } 192 | } 193 | 194 | i { 195 | color: ${(props) => props.theme.colorGrey0}; 196 | } 197 | 198 | &:hover { 199 | background: ${(props) => props.theme.colorPrimaryGreen} !important; 200 | color: ${(props) => props.theme.colorWhite} !important; 201 | } 202 | } 203 | 204 | .toggler { 205 | display: flex; 206 | align-items: center; 207 | justify-content: space-between; 208 | 209 | cursor: pointer; 210 | 211 | label { 212 | flex: 1; 213 | } 214 | 215 | input { 216 | width: initial; 217 | } 218 | } 219 | `; 220 | 221 | export default CreateContent; 222 | -------------------------------------------------------------------------------- /app/Components/Modals/Modal.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { useGlobalState } from "@/app/context/globalProvider"; 3 | import React from "react"; 4 | import styled from "styled-components"; 5 | 6 | interface Props { 7 | content: React.ReactNode; 8 | } 9 | 10 | function Modal({ content }: Props) { 11 | const { closeModal } = useGlobalState(); 12 | 13 | const { theme } = useGlobalState(); 14 | return ( 15 | 16 |
17 |
{content}
18 |
19 | ); 20 | } 21 | 22 | const ModalStyled = styled.div` 23 | position: fixed; 24 | top: 0; 25 | left: 0; 26 | width: 100%; 27 | height: 100vh; 28 | z-index: 100; 29 | 30 | display: flex; 31 | justify-content: center; 32 | align-items: center; 33 | 34 | .modal-overlay { 35 | position: absolute; 36 | top: 0; 37 | left: 0; 38 | width: 100%; 39 | height: 100vh; 40 | background-color: rgba(0, 0, 0, 0.45); 41 | filter: blur(4px); 42 | } 43 | 44 | .modal-content { 45 | margin: 0 1rem; 46 | 47 | padding: 2rem; 48 | position: relative; 49 | max-width: 630px; 50 | width: 100%; 51 | z-index: 100; 52 | 53 | border-radius: 1rem; 54 | background-color: ${(props) => props.theme.colorBg2}; 55 | box-shadow: 0 0 1rem rgba(0, 0, 0, 0.3); 56 | border-radius: ${(props) => props.theme.borderRadiusMd2}; 57 | 58 | @media screen and (max-width: 450px) { 59 | font-size: 90%; 60 | } 61 | } 62 | `; 63 | 64 | export default Modal; 65 | -------------------------------------------------------------------------------- /app/Components/Sidebar/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | import { useGlobalState } from "@/app/context/globalProvider"; 5 | import Image from "next/image"; 6 | 7 | import menu from "@/app/utils/menu"; 8 | import Link from "next/link"; 9 | import { usePathname, useRouter } from "next/navigation"; 10 | import Button from "../Button/Button"; 11 | import { arrowLeft, bars, logout } from "@/app/utils/Icons"; 12 | import { UserButton, useClerk, useUser } from "@clerk/nextjs"; 13 | 14 | function Sidebar() { 15 | const { theme, collapsed, collapseMenu } = useGlobalState(); 16 | const { signOut } = useClerk(); 17 | 18 | const { user } = useUser(); 19 | 20 | const { firstName, lastName, imageUrl } = user || { 21 | firstName: "", 22 | lastName: "", 23 | imageUrl: "", 24 | }; 25 | 26 | const router = useRouter(); 27 | const pathname = usePathname(); 28 | 29 | const handleClick = (link: string) => { 30 | router.push(link); 31 | }; 32 | 33 | return ( 34 | 35 | 38 |
39 |
40 |
41 | profile 42 |
43 |
44 | 45 |
46 |

47 | {firstName} {lastName} 48 |

49 |
50 | 67 |
68 |
81 |
82 | ); 83 | } 84 | 85 | const SidebarStyled = styled.nav<{ collapsed: boolean }>` 86 | position: relative; 87 | width: ${(props) => props.theme.sidebarWidth}; 88 | background-color: ${(props) => props.theme.colorBg2}; 89 | border: 2px solid ${(props) => props.theme.borderColor2}; 90 | border-radius: 1rem; 91 | 92 | display: flex; 93 | flex-direction: column; 94 | justify-content: space-between; 95 | 96 | color: ${(props) => props.theme.colorGrey3}; 97 | 98 | @media screen and (max-width: 768px) { 99 | position: fixed; 100 | height: calc(100vh - 2rem); 101 | z-index: 100; 102 | 103 | transition: all 0.3s cubic-bezier(0.53, 0.21, 0, 1); 104 | transform: ${(props) => 105 | props.collapsed ? "translateX(-107%)" : "translateX(0)"}; 106 | 107 | .toggle-nav { 108 | display: block !important; 109 | } 110 | } 111 | 112 | .toggle-nav { 113 | display: none; 114 | padding: 0.8rem 0.9rem; 115 | position: absolute; 116 | right: -69px; 117 | top: 1.8rem; 118 | 119 | border-top-right-radius: 1rem; 120 | border-bottom-right-radius: 1rem; 121 | 122 | background-color: ${(props) => props.theme.colorBg2}; 123 | border-right: 2px solid ${(props) => props.theme.borderColor2}; 124 | border-top: 2px solid ${(props) => props.theme.borderColor2}; 125 | border-bottom: 2px solid ${(props) => props.theme.borderColor2}; 126 | } 127 | 128 | .user-btn { 129 | .cl-rootBox { 130 | width: 100%; 131 | height: 100%; 132 | 133 | .cl-userButtonBox { 134 | width: 100%; 135 | height: 100%; 136 | 137 | .cl-userButtonTrigger { 138 | width: 100%; 139 | height: 100%; 140 | opacity: 0; 141 | } 142 | } 143 | } 144 | } 145 | 146 | .profile { 147 | margin: 1.5rem; 148 | padding: 1rem 0.8rem; 149 | position: relative; 150 | 151 | border-radius: 1rem; 152 | cursor: pointer; 153 | 154 | font-weight: 500; 155 | color: ${(props) => props.theme.colorGrey0}; 156 | 157 | display: flex; 158 | align-items: center; 159 | 160 | .profile-overlay { 161 | position: absolute; 162 | top: 0; 163 | left: 0; 164 | width: 100%; 165 | height: 100%; 166 | backdrop-filter: blur(10px); 167 | z-index: 0; 168 | background: ${(props) => props.theme.colorBg3}; 169 | transition: all 0.55s linear; 170 | border-radius: 1rem; 171 | border: 2px solid ${(props) => props.theme.borderColor2}; 172 | 173 | opacity: 0.2; 174 | } 175 | 176 | h1 { 177 | font-size: 1.2rem; 178 | display: flex; 179 | flex-direction: column; 180 | 181 | line-height: 1.4rem; 182 | } 183 | 184 | .image, 185 | h1 { 186 | position: relative; 187 | z-index: 1; 188 | } 189 | 190 | .image { 191 | flex-shrink: 0; 192 | display: inline-block; 193 | overflow: hidden; 194 | transition: all 0.5s ease; 195 | border-radius: 100%; 196 | 197 | width: 70px; 198 | height: 70px; 199 | 200 | img { 201 | border-radius: 100%; 202 | transition: all 0.5s ease; 203 | } 204 | } 205 | 206 | > h1 { 207 | margin-left: 0.8rem; 208 | font-size: clamp(1.2rem, 4vw, 1.4rem); 209 | line-height: 100%; 210 | } 211 | 212 | &:hover { 213 | .profile-overlay { 214 | opacity: 1; 215 | border: 2px solid ${(props) => props.theme.borderColor2}; 216 | } 217 | 218 | img { 219 | transform: scale(1.1); 220 | } 221 | } 222 | } 223 | 224 | .nav-item { 225 | position: relative; 226 | padding: 0.8rem 1rem 0.9rem 2.1rem; 227 | margin: 0.3rem 0; 228 | 229 | display: grid; 230 | grid-template-columns: 40px 1fr; 231 | cursor: pointer; 232 | align-items: center; 233 | 234 | &::after { 235 | position: absolute; 236 | content: ""; 237 | left: 0; 238 | top: 0; 239 | width: 0; 240 | height: 100%; 241 | background-color: ${(props) => props.theme.activeNavLinkHover}; 242 | z-index: 1; 243 | transition: all 0.3s ease-in-out; 244 | } 245 | 246 | &::before { 247 | position: absolute; 248 | content: ""; 249 | right: 0; 250 | top: 0; 251 | width: 0%; 252 | height: 100%; 253 | background-color: ${(props) => props.theme.colorGreenDark}; 254 | 255 | border-bottom-left-radius: 5px; 256 | border-top-left-radius: 5px; 257 | } 258 | 259 | a { 260 | font-weight: 500; 261 | transition: all 0.3s ease-in-out; 262 | z-index: 2; 263 | line-height: 0; 264 | } 265 | 266 | i { 267 | display: flex; 268 | align-items: center; 269 | color: ${(props) => props.theme.colorIcons}; 270 | } 271 | 272 | &:hover { 273 | &::after { 274 | width: 100%; 275 | } 276 | } 277 | } 278 | 279 | .active { 280 | background-color: ${(props) => props.theme.activeNavLink}; 281 | 282 | i, 283 | a { 284 | color: ${(props) => props.theme.colorIcons2}; 285 | } 286 | } 287 | 288 | .active::before { 289 | width: 0.3rem; 290 | } 291 | 292 | > button { 293 | margin: 1.5rem; 294 | } 295 | `; 296 | 297 | export default Sidebar; 298 | -------------------------------------------------------------------------------- /app/Components/TaskItem/TaskItem.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { useGlobalState } from "@/app/context/globalProvider"; 3 | import { edit, trash } from "@/app/utils/Icons"; 4 | import React from "react"; 5 | import styled from "styled-components"; 6 | import formatDate from "@/app/utils/formatDate"; 7 | 8 | interface Props { 9 | title: string; 10 | description: string; 11 | date: string; 12 | isCompleted: boolean; 13 | id: string; 14 | } 15 | 16 | function TaskItem({ title, description, date, isCompleted, id }: Props) { 17 | const { theme, deleteTask, updateTask } = useGlobalState(); 18 | return ( 19 | 20 |

{title}

21 |

{description}

22 |

{formatDate(date)}

23 |
24 | {isCompleted ? ( 25 | 38 | ) : ( 39 | 52 | )} 53 | 54 | 62 |
63 |
64 | ); 65 | } 66 | 67 | const TaskItemStyled = styled.div` 68 | padding: 1.2rem 1rem; 69 | border-radius: 1rem; 70 | background-color: ${(props) => props.theme.borderColor2}; 71 | box-shadow: ${(props) => props.theme.shadow7}; 72 | border: 2px solid ${(props) => props.theme.borderColor2}; 73 | 74 | height: 16rem; 75 | display: flex; 76 | flex-direction: column; 77 | gap: 0.5rem; 78 | 79 | .date { 80 | margin-top: auto; 81 | } 82 | 83 | > h1 { 84 | font-size: 1.5rem; 85 | font-weight: 600; 86 | } 87 | 88 | .task-footer { 89 | display: flex; 90 | align-items: center; 91 | gap: 1.2rem; 92 | 93 | button { 94 | border: none; 95 | outline: none; 96 | cursor: pointer; 97 | 98 | i { 99 | font-size: 1.4rem; 100 | color: ${(props) => props.theme.colorGrey2}; 101 | } 102 | } 103 | 104 | .edit { 105 | margin-left: auto; 106 | } 107 | 108 | .completed, 109 | .incomplete { 110 | display: inline-block; 111 | padding: 0.4rem 1rem; 112 | background: ${(props) => props.theme.colorDanger}; 113 | border-radius: 30px; 114 | } 115 | 116 | .completed { 117 | background: ${(props) => props.theme.colorGreenDark} !important; 118 | } 119 | } 120 | `; 121 | 122 | export default TaskItem; 123 | -------------------------------------------------------------------------------- /app/Components/Tasks/Tasks.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { useGlobalState } from "@/app/context/globalProvider"; 3 | import React from "react"; 4 | import styled from "styled-components"; 5 | import CreateContent from "../Modals/CreateContent"; 6 | import TaskItem from "../TaskItem/TaskItem"; 7 | import { add, plus } from "@/app/utils/Icons"; 8 | import Modal from "../Modals/Modal"; 9 | 10 | interface Props { 11 | title: string; 12 | tasks: any[]; 13 | } 14 | 15 | function Tasks({ title, tasks }: Props) { 16 | const { theme, isLoading, openModal, modal } = useGlobalState(); 17 | 18 | return ( 19 | 20 | {modal && } />} 21 |

{title}

22 | 23 | 26 | 27 |
28 | {tasks.map((task) => ( 29 | 37 | ))} 38 | 42 |
43 |
44 | ); 45 | } 46 | 47 | const TaskStyled = styled.main` 48 | position: relative; 49 | padding: 2rem; 50 | width: 100%; 51 | background-color: ${(props) => props.theme.colorBg2}; 52 | border: 2px solid ${(props) => props.theme.borderColor2}; 53 | border-radius: 1rem; 54 | height: 100%; 55 | 56 | overflow-y: auto; 57 | 58 | &::-webkit-scrollbar { 59 | width: 0.5rem; 60 | } 61 | 62 | .btn-rounded { 63 | position: fixed; 64 | top: 4.9rem; 65 | right: 5.1rem; 66 | width: 3rem; 67 | height: 3rem; 68 | border-radius: 50%; 69 | 70 | background-color: ${(props) => props.theme.colorBg}; 71 | border: 2px solid ${(props) => props.theme.borderColor2}; 72 | box-shadow: 0 3px 15px rgba(0, 0, 0, 0.3); 73 | color: ${(props) => props.theme.colorGrey2}; 74 | font-size: 1.4rem; 75 | 76 | display: flex; 77 | align-items: center; 78 | justify-content: center; 79 | 80 | @media screen and (max-width: 768px) { 81 | top: 3rem; 82 | right: 3.5rem; 83 | } 84 | } 85 | 86 | .tasks { 87 | margin: 2rem 0; 88 | } 89 | 90 | > h1 { 91 | font-size: clamp(1.5rem, 2vw, 2rem); 92 | font-weight: 800; 93 | position: relative; 94 | 95 | &::after { 96 | content: ""; 97 | position: absolute; 98 | bottom: -0.5rem; 99 | left: 0; 100 | width: 3rem; 101 | height: 0.2rem; 102 | background-color: ${(props) => props.theme.colorPrimaryGreen}; 103 | border-radius: 0.5rem; 104 | } 105 | } 106 | 107 | .create-task { 108 | display: flex; 109 | align-items: center; 110 | justify-content: center; 111 | gap: 0.5rem; 112 | 113 | height: 16rem; 114 | color: ${(props) => props.theme.colorGrey2}; 115 | font-weight: 600; 116 | cursor: pointer; 117 | border-radius: 1rem; 118 | border: 3px dashed ${(props) => props.theme.colorGrey5}; 119 | transition: all 0.3s ease; 120 | 121 | i { 122 | font-size: 1.5rem; 123 | margin-right: 0.2rem; 124 | } 125 | 126 | &:hover { 127 | background-color: ${(props) => props.theme.colorGrey5}; 128 | color: ${(props) => props.theme.colorGrey0}; 129 | } 130 | } 131 | `; 132 | 133 | export default Tasks; 134 | -------------------------------------------------------------------------------- /app/api/tasks/[id]/route.ts: -------------------------------------------------------------------------------- 1 | import prisma from "@/app/utils/connect"; 2 | import { auth } from "@clerk/nextjs"; 3 | import { NextResponse } from "next/server"; 4 | 5 | export async function DELETE( 6 | req: Request, 7 | { params }: { params: { id: string } } 8 | ) { 9 | try { 10 | const { userId } = auth(); 11 | const { id } = params; 12 | 13 | if (!userId) { 14 | return new NextResponse("Unauthorized", { status: 401 }); 15 | } 16 | 17 | const task = await prisma.task.delete({ 18 | where: { 19 | id, 20 | }, 21 | }); 22 | 23 | return NextResponse.json(task); 24 | } catch (error) { 25 | console.log("ERROR DELETING TASK: ", error); 26 | return NextResponse.json({ error: "Error deleting task", status: 500 }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/api/tasks/route.ts: -------------------------------------------------------------------------------- 1 | import prisma from "@/app/utils/connect"; 2 | import { auth } from "@clerk/nextjs"; 3 | import { NextResponse } from "next/server"; 4 | 5 | export async function POST(req: Request) { 6 | try { 7 | const { userId } = auth(); 8 | 9 | if (!userId) { 10 | return NextResponse.json({ error: "Unauthorized", status: 401 }); 11 | } 12 | 13 | const { title, description, date, completed, important } = await req.json(); 14 | 15 | if (!title || !description || !date) { 16 | return NextResponse.json({ 17 | error: "Missing required fields", 18 | status: 400, 19 | }); 20 | } 21 | 22 | if (title.length < 3) { 23 | return NextResponse.json({ 24 | error: "Title must be at least 3 characters long", 25 | status: 400, 26 | }); 27 | } 28 | 29 | const task = await prisma.task.create({ 30 | data: { 31 | title, 32 | description, 33 | date, 34 | isCompleted: completed, 35 | isImportant: important, 36 | userId, 37 | }, 38 | }); 39 | 40 | return NextResponse.json(task); 41 | } catch (error) { 42 | console.log("ERROR CREATING TASK: ", error); 43 | return NextResponse.json({ error: "Error creating task", status: 500 }); 44 | } 45 | } 46 | 47 | export async function GET(req: Request) { 48 | try { 49 | const { userId } = auth(); 50 | 51 | if (!userId) { 52 | return NextResponse.json({ error: "Unauthorized", status: 401 }); 53 | } 54 | 55 | const tasks = await prisma.task.findMany({ 56 | where: { 57 | userId, 58 | }, 59 | }); 60 | 61 | return NextResponse.json(tasks); 62 | } catch (error) { 63 | console.log("ERROR GETTING TASKS: ", error); 64 | return NextResponse.json({ error: "Error updating task", status: 500 }); 65 | } 66 | } 67 | 68 | export async function PUT(req: Request) { 69 | try { 70 | const { userId } = auth(); 71 | const { isCompleted, id } = await req.json(); 72 | 73 | if (!userId) { 74 | return NextResponse.json({ error: "Unauthorized", status: 401 }); 75 | } 76 | 77 | const task = await prisma.task.update({ 78 | where: { 79 | id, 80 | }, 81 | data: { 82 | isCompleted, 83 | }, 84 | }); 85 | 86 | return NextResponse.json(task); 87 | } catch (error) { 88 | console.log("ERROR UPDATING TASK: ", error); 89 | return NextResponse.json({ error: "Error deleting task", status: 500 }); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /app/completed/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React from "react"; 3 | import { useGlobalState } from "../context/globalProvider"; 4 | import Tasks from "../Components/Tasks/Tasks"; 5 | 6 | function page() { 7 | const { completedTasks } = useGlobalState(); 8 | 9 | return ; 10 | } 11 | 12 | export default page; 13 | -------------------------------------------------------------------------------- /app/context/globalProvider.js: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React, { createContext, useState, useContext } from "react"; 3 | import themes from "./themes"; 4 | import axios from "axios"; 5 | import toast from "react-hot-toast"; 6 | import { useUser } from "@clerk/nextjs"; 7 | 8 | export const GlobalContext = createContext(); 9 | export const GlobalUpdateContext = createContext(); 10 | 11 | export const GlobalProvider = ({ children }) => { 12 | const { user } = useUser(); 13 | 14 | const [selectedTheme, setSelectedTheme] = useState(0); 15 | const [isLoading, setIsLoading] = useState(false); 16 | const [modal, setModal] = useState(false); 17 | const [collapsed, setCollapsed] = useState(false); 18 | 19 | const [tasks, setTasks] = useState([]); 20 | 21 | const theme = themes[selectedTheme]; 22 | 23 | const openModal = () => { 24 | setModal(true); 25 | }; 26 | 27 | const closeModal = () => { 28 | setModal(false); 29 | }; 30 | 31 | const collapseMenu = () => { 32 | setCollapsed(!collapsed); 33 | }; 34 | 35 | const allTasks = async () => { 36 | setIsLoading(true); 37 | try { 38 | const res = await axios.get("/api/tasks"); 39 | 40 | const sorted = res.data.sort((a, b) => { 41 | return ( 42 | new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime() 43 | ); 44 | }); 45 | 46 | setTasks(sorted); 47 | 48 | setIsLoading(false); 49 | } catch (error) { 50 | console.log(error); 51 | } 52 | }; 53 | 54 | const deleteTask = async (id) => { 55 | try { 56 | const res = await axios.delete(`/api/tasks/${id}`); 57 | toast.success("Task deleted"); 58 | 59 | allTasks(); 60 | } catch (error) { 61 | console.log(error); 62 | toast.error("Something went wrong"); 63 | } 64 | }; 65 | 66 | const updateTask = async (task) => { 67 | try { 68 | const res = await axios.put(`/api/tasks`, task); 69 | 70 | toast.success("Task updated"); 71 | 72 | allTasks(); 73 | } catch (error) { 74 | console.log(error); 75 | toast.error("Something went wrong"); 76 | } 77 | }; 78 | 79 | const completedTasks = tasks.filter((task) => task.isCompleted === true); 80 | const importantTasks = tasks.filter((task) => task.isImportant === true); 81 | const incompleteTasks = tasks.filter((task) => task.isCompleted === false); 82 | 83 | React.useEffect(() => { 84 | if (user) allTasks(); 85 | }, [user]); 86 | 87 | return ( 88 | 106 | 107 | {children} 108 | 109 | 110 | ); 111 | }; 112 | 113 | export const useGlobalState = () => useContext(GlobalContext); 114 | export const useGlobalUpdate = () => useContext(GlobalUpdateContext); 115 | -------------------------------------------------------------------------------- /app/context/themes.js: -------------------------------------------------------------------------------- 1 | const themes = [ 2 | { 3 | name: "default", 4 | colorBg: "#252525", 5 | colorBg2: "#212121", 6 | colorBg3: "#181818", 7 | colorBg4: "#1A1A1A", 8 | colorButton: "#3A3B3C", 9 | colorDanger: "#fe6854", 10 | colorFontPrimary: "#e5e7eb", 11 | colorTextSecondary: "#B0B3B8", 12 | colorTextPrimary: "#FFFFFF", 13 | colorTextLight: "#f8f8f8", 14 | colorbackground: "#FBFBFD", 15 | colorGradient: "linear-gradient(110.42deg, #CF57A3 29.2%, #4731B6 63.56%)", 16 | colorGreenDark: "#27AE60", 17 | colorGreenLight: "#dbe1e8", 18 | activeNavLink: "rgba(249,249,249, 0.08)", 19 | activeNavLinkHover: "rgba(249,249,249, 0.03)", 20 | colorPrimary: "#7263F3", 21 | colorPrimary2: "#705DF2", 22 | colorGreyDark: "#131313", 23 | colorGrey0: "#f8f8f8", 24 | colorGrey1: "#dbe1e8", 25 | colorGrey2: "#b2becd", 26 | colorGrey3: "#6c7983", 27 | colorGrey4: "#454e56", 28 | colorGrey5: "#2a2e35", 29 | colorGrey6: "#12181b", 30 | colorWhite: "#fff", 31 | colorPrimaryGreen: "#6FCF97", 32 | borderColor: "rgba(249,249,249, 0.08)", 33 | borderColor2: "rgba(249,249,249, 0.08)", 34 | shadow7: "1px 7px 12px rgba(8, 18, 69, 0.1)", 35 | sidebarWidth: "15rem", 36 | sidebarCollapsed: "5.4rem", 37 | fH4: "19px", 38 | fontSmall: "14px", 39 | fontSmall2: "15px", 40 | gridGap: "2rem", 41 | padLRSm: "0 2rem", 42 | colorIcons: "rgba(249,249,249, 0.35)", 43 | colorIcons2: "rgba(249,249,249, 0.75)", 44 | colorIcons3: "rgba(249,249,249, 0.08)", 45 | colorIcons4: "rgba(0,0,0, 0.3)", 46 | marLRSm: "0 1rem", 47 | }, 48 | { 49 | name: "light", 50 | colorBg: "#fff", 51 | colorBg2: "#F9F9F9", 52 | colorBg3: "#EDEDED", 53 | colorBg4: "#1A1A1A", 54 | colorButton: "#3A3B3C", 55 | colorDanger: "#fe6854", 56 | colorTextSecondary: "#B0B3B8", 57 | colorFontPrimary: "#6c7983", 58 | colorTextPrimary: "#FFFFFF", 59 | colorTextLight: "#f8f8f8", 60 | colorbackground: "#FBFBFD", 61 | colorGradient: "linear-gradient(110.42deg, #CF57A3 29.2%, #4731B6 63.56%)", 62 | colorGreenDark: "#27AE60", 63 | colorGreenLight: "#dbe1e8", 64 | activeNavLink: "rgba(230,230,230, .87)", 65 | activeNavLinkHover: "#C5C5C5", 66 | colorPrimary: "#7263F3", 67 | colorPrimary2: "#705DF2", 68 | colorGreyDark: "#131313", 69 | colorGrey0: "#f8f8f8", 70 | colorGrey1: "#dbe1e8", 71 | colorGrey2: "#b2becd", 72 | colorGrey3: "#6c7983", 73 | colorGrey4: "#454e56", 74 | colorGrey5: "#2a2e35", 75 | colorGrey6: "#12181b", 76 | colorWhite: "#fff", 77 | buttonGradient1: 78 | "linear-gradient(110.42deg, rgba(107, 190, 146, 0.7) 29.2%, rgba(245, 102, 146, 0.7) 63.56%)", 79 | buttonGradient2: 80 | "linear-gradient(110.42deg, rgba(25, 151, 222, 0.7) 29.2%, rgba(168, 85, 247, 0.7) 63.56%)", 81 | buttonGradient3: 82 | "linear-gradient(110.42deg, rgba(25, 151, 222, 0.7) 29.2%, rgba(168, 85, 247, 0.7) 63.56%)", 83 | buttonGradient4: 84 | "linear-gradient(110.42deg, rgba(168, 85, 247, 0.7) 29.2%, rgba(245, 102, 146, 0.7) 63.56%)", 85 | buttonGradient5: 86 | "linear-gradient(110.42deg, rgba(25, 151, 222, 0.7) 29.2%, rgba(168, 85, 247, 0.7) 63.56%)", 87 | buttonGradient6: 88 | "linear-gradient(110.42deg, rgba(25, 151, 222, 0.7) 29.2%, rgba(168, 85, 247, 0.7) 63.56%)", 89 | buttonGradient7: 90 | "linear-gradient(110.42deg, rgba(41, 25, 222, 0.7) 29.2%, rgba(235, 87, 87, 0.7) 63.56%)", 91 | buttonGradient8: 92 | "linear-gradient(110.42deg, rgba(25, 151, 222, 0.7) 29.2%, rgba(168, 85, 247, 0.7) 63.56%)", 93 | buttonGradient9: 94 | "linear-gradient(110.42deg, rgba(226, 195, 33, 0.7) 29.2%, rgba(247, 104, 85, 0.7) 63.56%)", 95 | buttonGradient10: 96 | "linear-gradient(110.42deg, rgba(235, 87, 87, 0.7) 29.2%, rgba(189, 68, 166, 0.7) 53.82%, rgba(247, 85, 143, 0.1) 63.56%)", 97 | buttonGradient11: 98 | "linear-gradient(110.42deg, rgba(25, 151, 222, 0.7) 29.2%, rgba(168, 85, 247, 0.7) 63.56%)", 99 | buttonGradient12: 100 | "linear-gradient(110.42deg, rgba(226, 195, 33, 0.7) 29.2%, rgba(247, 104, 85, 0.7) 63.56%)", 101 | buttonGradient13: 102 | "linear-gradient(110.42deg, rgba(226, 195, 33, 0.7) 29.2%, rgba(99, 3, 255, 0.7) 63.56%)", 103 | buttonGradient14: 104 | "linear-gradient(110.42deg, rgba(41, 25, 222, 0.7) 29.2%, rgba(235, 87, 87, 0.7) 63.56%)", 105 | borderRadiusMd: "12px", 106 | borderRadiusMd2: "15px", 107 | borderRadiusSm: "8px", 108 | borderColor: "rgba(249,249,249, 0.08)", 109 | borderColor2: "rgba(249,249,249, 0.08)", 110 | shadow1: "4px 4px 84px rgba(16, 10, 86, 0.04)", 111 | shadow2: "0px 48px 77px rgba(8, 18, 69, 0.07)", 112 | shadow3: "0 14px 40px rgb(0 0 0 / 25%)", 113 | shadow7: "0px 48px 77px rgba(8, 18, 69, 0.16)", 114 | shadow5: "0px 4px 0px rgba(249,249,249, 0.35)", 115 | shadow6: 116 | "0px 6px 20px rgba(0, 0, 0, 0.15), 0px -3px 20px rgba(0, 0, 0, 0.1)", 117 | sidebarWidth: "15rem", 118 | sidebarCollapsed: "5.4rem", 119 | fH4: "19px", 120 | fontSmall: "14px", 121 | fontSmall2: "15px", 122 | gridGap: "2rem", 123 | padLRSm: "0 2rem", 124 | colorIcons: "#999999", 125 | colorIcons2: "#181818", 126 | colorIcons3: "rgba(249,249,249, 0.08)", 127 | colorIcons4: "rgba(0,0,0, 0.3)", 128 | marLRSm: "0 1rem", 129 | }, 130 | ]; 131 | export default themes; 132 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maclinz/todoapp_fullstack/86d2980f542bf85f5fc7e28617adb097739aac1e/app/favicon.ico -------------------------------------------------------------------------------- /app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | @media (prefers-color-scheme: dark) { 12 | :root { 13 | --foreground-rgb: 255, 255, 255; 14 | --background-start-rgb: 0, 0, 0; 15 | --background-end-rgb: 0, 0, 0; 16 | } 17 | } 18 | 19 | body { 20 | background-color: #181818; 21 | font-size: 17px; 22 | color: #fff; 23 | 24 | height: 100vh; 25 | } 26 | 27 | input, 28 | textarea, 29 | button { 30 | border: none; 31 | outline: none; 32 | background: transparent; 33 | } 34 | 35 | input[type="date"]::-webkit-calendar-picker-indicator { 36 | filter: invert(1); 37 | font-size: 1.5rem; 38 | cursor: pointer; 39 | } 40 | 41 | input[type="checkbox"] { 42 | width: 1.5rem; 43 | height: 1.5rem; 44 | cursor: pointer; 45 | } 46 | 47 | .loader { 48 | width: 48px; 49 | height: 48px; 50 | border: 5px solid #27ae60; 51 | border-bottom-color: transparent; 52 | border-radius: 50%; 53 | display: inline-block; 54 | box-sizing: border-box; 55 | animation: rotation 1s linear infinite; 56 | } 57 | 58 | @keyframes rotation { 59 | 0% { 60 | transform: rotate(0deg); 61 | } 62 | 100% { 63 | transform: rotate(360deg); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/important/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React from "react"; 3 | import { useGlobalState } from "../context/globalProvider"; 4 | import Tasks from "../Components/Tasks/Tasks"; 5 | 6 | function page() { 7 | const { importantTasks } = useGlobalState(); 8 | return ; 9 | } 10 | 11 | export default page; 12 | -------------------------------------------------------------------------------- /app/incomplete/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React from "react"; 3 | import { useGlobalState } from "../context/globalProvider"; 4 | import Tasks from "../Components/Tasks/Tasks"; 5 | 6 | function page() { 7 | const { incompleteTasks } = useGlobalState(); 8 | return ; 9 | } 10 | 11 | export default page; 12 | -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import { Nunito } from "next/font/google"; 3 | import { ClerkProvider, auth } from "@clerk/nextjs"; 4 | 5 | import "./globals.css"; 6 | import Sidebar from "./Components/Sidebar/Sidebar"; 7 | import GlobalStyleProvider from "./providers/GlobalStyleProvider"; 8 | import ContextProvider from "./providers/ContextProvider"; 9 | import NextTopLoader from "nextjs-toploader"; 10 | 11 | const nunito = Nunito({ 12 | weight: ["400", "500", "600", "700", "800"], 13 | subsets: ["latin"], 14 | }); 15 | 16 | export const metadata: Metadata = { 17 | title: "Create Next App", 18 | description: "Generated by create next app", 19 | }; 20 | 21 | export default function RootLayout({ 22 | children, 23 | }: { 24 | children: React.ReactNode; 25 | }) { 26 | const { userId } = auth(); 27 | 28 | return ( 29 | 30 | 31 | 32 | 39 | 40 | 41 | 46 | 47 | 48 | {userId && } 49 |
{children}
50 |
51 |
52 | 53 | 54 |
55 | ); 56 | } 57 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import Tasks from "./Components/Tasks/Tasks"; 3 | import { useGlobalState } from "./context/globalProvider"; 4 | 5 | export default function Home() { 6 | const { tasks } = useGlobalState(); 7 | 8 | return ; 9 | } 10 | -------------------------------------------------------------------------------- /app/providers/ContextProvider.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React from "react"; 3 | import { GlobalProvider } from "../context/globalProvider"; 4 | import { Toaster } from "react-hot-toast"; 5 | 6 | interface Props { 7 | children: React.ReactNode; 8 | } 9 | 10 | function ContextProvider({ children }: Props) { 11 | const [isReady, setIsReady] = React.useState(false); 12 | 13 | React.useEffect(() => { 14 | setTimeout(() => { 15 | setIsReady(true); 16 | }, 250); 17 | }, []); 18 | 19 | if (!isReady) { 20 | return ( 21 |
22 | 23 |
24 | ); 25 | } 26 | 27 | return ( 28 | 29 | 30 | {children} 31 | 32 | ); 33 | } 34 | 35 | export default ContextProvider; 36 | -------------------------------------------------------------------------------- /app/providers/GlobalStyleProvider.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | 5 | interface Props { 6 | children: React.ReactNode; 7 | } 8 | 9 | function GlobalStyleProvider({ children }: Props) { 10 | return {children}; 11 | } 12 | 13 | const GlobalStyles = styled.div` 14 | padding: 2.5rem; 15 | display: flex; 16 | gap: 2.5rem; 17 | height: 100%; 18 | transition: all 0.3s ease-in-out; 19 | 20 | @media screen and (max-width: 768px) { 21 | padding: 1rem; 22 | gap: 1rem; 23 | } 24 | 25 | .grid { 26 | display: grid; 27 | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 28 | gap: 1.5rem; 29 | } 30 | `; 31 | 32 | export default GlobalStyleProvider; 33 | -------------------------------------------------------------------------------- /app/signin/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { SignIn } from "@clerk/nextjs"; 3 | import React from "react"; 4 | 5 | function page() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | 13 | export default page; 14 | -------------------------------------------------------------------------------- /app/signup/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { SignUp } from "@clerk/nextjs"; 3 | import React from "react"; 4 | 5 | function page() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | 13 | export default page; 14 | -------------------------------------------------------------------------------- /app/utils/Icons.js: -------------------------------------------------------------------------------- 1 | export const bars = ; 2 | export const arrowLeft = ; 3 | 4 | export const add = ; 5 | export const moon = ; 6 | export const search = ; 7 | export const bell = ; 8 | export const home = ; 9 | export const list = ; 10 | export const check = ; 11 | export const help = ; 12 | export const gear = ; 13 | export const login = ; 14 | export const logout = ; 15 | export const user = ; 16 | export const join = ; 17 | export const heart = ; 18 | export const edit = ; 19 | export const users = ; 20 | export const todo = ; 21 | export const down = ; 22 | export const trash = ; 23 | export const admin = ; 24 | export const linked = ; 25 | export const mailIcon = ; 26 | export const plus = ; 27 | -------------------------------------------------------------------------------- /app/utils/connect.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from "@prisma/client"; 2 | 3 | let prisma: PrismaClient; 4 | 5 | if (process.env.NODE_ENV === "production") { 6 | prisma = new PrismaClient(); 7 | } else { 8 | // @ts-ignore 9 | if (!global.prisma) { 10 | // @ts-ignore 11 | global.prisma = new PrismaClient(); 12 | } 13 | // @ts-ignore 14 | prisma = global.prisma; 15 | } 16 | 17 | export default prisma; 18 | -------------------------------------------------------------------------------- /app/utils/formatDate.js: -------------------------------------------------------------------------------- 1 | const moment = require("moment/moment"); 2 | 3 | const formatDate = (date) => { 4 | return moment(date).format("DD/MM/YYYY"); 5 | }; 6 | 7 | export default formatDate; 8 | -------------------------------------------------------------------------------- /app/utils/menu.js: -------------------------------------------------------------------------------- 1 | import { list, check, todo, home } from "./Icons"; 2 | 3 | const menu = [ 4 | { 5 | id: 1, 6 | title: "All Tasks", 7 | icon: home, 8 | link: "/", 9 | }, 10 | { 11 | id: 2, 12 | title: "Important!", 13 | icon: list, 14 | link: "/important", 15 | }, 16 | { 17 | id: 3, 18 | title: "Completed!", 19 | icon: check, 20 | link: "/completed", 21 | }, 22 | { 23 | id: 4, 24 | title: "Do It Now", 25 | icon: todo, 26 | link: "/incomplete", 27 | }, 28 | ]; 29 | 30 | export default menu; 31 | -------------------------------------------------------------------------------- /middleware.ts: -------------------------------------------------------------------------------- 1 | import { authMiddleware } from "@clerk/nextjs"; 2 | 3 | export default authMiddleware({}); 4 | 5 | export const config = { 6 | matcher: ["/((?!.+\\.[\\w]+$|_next).*)", "/", "/(api|trpc)(.*)"], 7 | }; 8 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | domains: ["localhost", "https://img.clerk.com", "img.clerk.com"], 5 | }, 6 | }; 7 | 8 | module.exports = nextConfig; 9 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mytasks", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "mytasks", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "@clerk/nextjs": "^4.25.6", 12 | "@next-auth/prisma-adapter": "^1.0.7", 13 | "@prisma/client": "^5.4.2", 14 | "axios": "^1.5.1", 15 | "moment": "^2.29.4", 16 | "next": "13.5.6", 17 | "nextjs-toploader": "^1.5.3", 18 | "prisma": "^5.4.2", 19 | "react": "^18", 20 | "react-dom": "^18", 21 | "react-hot-toast": "^2.4.1", 22 | "styled-components": "^6.1.0" 23 | }, 24 | "devDependencies": { 25 | "@types/node": "^20", 26 | "@types/react": "^18", 27 | "@types/react-dom": "^18", 28 | "autoprefixer": "^10", 29 | "postcss": "^8", 30 | "tailwindcss": "^3", 31 | "typescript": "^5" 32 | } 33 | }, 34 | "node_modules/@alloc/quick-lru": { 35 | "version": "5.2.0", 36 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 37 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 38 | "dev": true, 39 | "engines": { 40 | "node": ">=10" 41 | }, 42 | "funding": { 43 | "url": "https://github.com/sponsors/sindresorhus" 44 | } 45 | }, 46 | "node_modules/@babel/runtime": { 47 | "version": "7.23.2", 48 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", 49 | "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", 50 | "peer": true, 51 | "dependencies": { 52 | "regenerator-runtime": "^0.14.0" 53 | }, 54 | "engines": { 55 | "node": ">=6.9.0" 56 | } 57 | }, 58 | "node_modules/@clerk/backend": { 59 | "version": "0.31.2", 60 | "resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-0.31.2.tgz", 61 | "integrity": "sha512-9Nv4em2TghXlXqYxts/ofpmu6MAg+0NW3Y5r9mzTD/stCPf/62aIB681au8rDN6fuf8YDclRhD59T+vvmnimTw==", 62 | "dependencies": { 63 | "@clerk/shared": "0.24.5", 64 | "@clerk/types": "3.56.1", 65 | "@peculiar/webcrypto": "1.4.1", 66 | "@types/node": "16.18.6", 67 | "cookie": "0.5.0", 68 | "deepmerge": "4.2.2", 69 | "node-fetch-native": "1.0.1", 70 | "snakecase-keys": "5.4.4", 71 | "tslib": "2.4.1" 72 | }, 73 | "engines": { 74 | "node": ">=14" 75 | } 76 | }, 77 | "node_modules/@clerk/backend/node_modules/@types/node": { 78 | "version": "16.18.6", 79 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.6.tgz", 80 | "integrity": "sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==" 81 | }, 82 | "node_modules/@clerk/backend/node_modules/tslib": { 83 | "version": "2.4.1", 84 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 85 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 86 | }, 87 | "node_modules/@clerk/clerk-react": { 88 | "version": "4.26.6", 89 | "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-4.26.6.tgz", 90 | "integrity": "sha512-WYePQN0Q2fyzXxfMJES3U+RHHhkxITrfhqHr2GLZNjYs46Ks20PAgYXI4R6DPcJVqT8zxw7jnpgCh0nozBXXiQ==", 91 | "dependencies": { 92 | "@clerk/shared": "0.24.5", 93 | "@clerk/types": "3.56.1", 94 | "tslib": "2.4.1" 95 | }, 96 | "engines": { 97 | "node": ">=14" 98 | }, 99 | "peerDependencies": { 100 | "react": ">=16" 101 | } 102 | }, 103 | "node_modules/@clerk/clerk-react/node_modules/tslib": { 104 | "version": "2.4.1", 105 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 106 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 107 | }, 108 | "node_modules/@clerk/clerk-sdk-node": { 109 | "version": "4.12.15", 110 | "resolved": "https://registry.npmjs.org/@clerk/clerk-sdk-node/-/clerk-sdk-node-4.12.15.tgz", 111 | "integrity": "sha512-3g+Zn+utKJ6zWE7MLFQtCCsTpXdlQ2J/BK8X8Ko2gd9B6u1j/4x1AL2LwM6VK2WlQX/EAzbGCARX/Do7EQVmXw==", 112 | "dependencies": { 113 | "@clerk/backend": "0.31.2", 114 | "@clerk/shared": "0.24.5", 115 | "@clerk/types": "3.56.1", 116 | "@types/cookies": "0.7.7", 117 | "@types/express": "4.17.14", 118 | "@types/node-fetch": "2.6.2", 119 | "camelcase-keys": "6.2.2", 120 | "snakecase-keys": "3.2.1", 121 | "tslib": "2.4.1" 122 | }, 123 | "engines": { 124 | "node": ">=14" 125 | } 126 | }, 127 | "node_modules/@clerk/clerk-sdk-node/node_modules/snakecase-keys": { 128 | "version": "3.2.1", 129 | "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-3.2.1.tgz", 130 | "integrity": "sha512-CjU5pyRfwOtaOITYv5C8DzpZ8XA/ieRsDpr93HI2r6e3YInC6moZpSQbmUtg8cTk58tq2x3jcG2gv+p1IZGmMA==", 131 | "dependencies": { 132 | "map-obj": "^4.1.0", 133 | "to-snake-case": "^1.0.0" 134 | }, 135 | "engines": { 136 | "node": ">=8" 137 | } 138 | }, 139 | "node_modules/@clerk/clerk-sdk-node/node_modules/tslib": { 140 | "version": "2.4.1", 141 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 142 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 143 | }, 144 | "node_modules/@clerk/nextjs": { 145 | "version": "4.25.6", 146 | "resolved": "https://registry.npmjs.org/@clerk/nextjs/-/nextjs-4.25.6.tgz", 147 | "integrity": "sha512-3dZX3pv+/L4JIVapmoLYbH/+LsgQBGFg2Y/BuUnkn5BTRj2rXI9bxgM2nRAObcC5vg1ipjeroOzSMtiZEvxKBQ==", 148 | "dependencies": { 149 | "@clerk/backend": "0.31.2", 150 | "@clerk/clerk-react": "4.26.6", 151 | "@clerk/clerk-sdk-node": "4.12.15", 152 | "@clerk/shared": "0.24.5", 153 | "@clerk/types": "3.56.1", 154 | "path-to-regexp": "6.2.1", 155 | "tslib": "2.4.1" 156 | }, 157 | "engines": { 158 | "node": ">=14" 159 | }, 160 | "peerDependencies": { 161 | "next": ">=10", 162 | "react": "^17.0.2 || ^18.0.0-0", 163 | "react-dom": "^17.0.2 || ^18.0.0-0" 164 | } 165 | }, 166 | "node_modules/@clerk/nextjs/node_modules/tslib": { 167 | "version": "2.4.1", 168 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 169 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 170 | }, 171 | "node_modules/@clerk/shared": { 172 | "version": "0.24.5", 173 | "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-0.24.5.tgz", 174 | "integrity": "sha512-93ZNcAS0S3iH4s5lE9e+zroF3/Chc0pCsVm8P9kinA3y/IornidaGKhezMFgJLdJkCOxg7/QiWwdYbQpB8HVBw==", 175 | "dependencies": { 176 | "glob-to-regexp": "0.4.1", 177 | "js-cookie": "3.0.1", 178 | "swr": "2.2.0" 179 | }, 180 | "peerDependencies": { 181 | "react": ">=16" 182 | }, 183 | "peerDependenciesMeta": { 184 | "react": { 185 | "optional": true 186 | } 187 | } 188 | }, 189 | "node_modules/@clerk/types": { 190 | "version": "3.56.1", 191 | "resolved": "https://registry.npmjs.org/@clerk/types/-/types-3.56.1.tgz", 192 | "integrity": "sha512-w/LKUH/PtB0nfQ6xtfh08/HyRLcIhvp1Vl3tx67Rvj7HdgDb5r2a2wbqsVanQZkdhE71WpIG36BRPhNWF4W2Bg==", 193 | "dependencies": { 194 | "csstype": "3.1.1" 195 | }, 196 | "engines": { 197 | "node": ">=14" 198 | } 199 | }, 200 | "node_modules/@clerk/types/node_modules/csstype": { 201 | "version": "3.1.1", 202 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 203 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" 204 | }, 205 | "node_modules/@emotion/is-prop-valid": { 206 | "version": "1.2.1", 207 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", 208 | "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", 209 | "dependencies": { 210 | "@emotion/memoize": "^0.8.1" 211 | } 212 | }, 213 | "node_modules/@emotion/memoize": { 214 | "version": "0.8.1", 215 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", 216 | "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" 217 | }, 218 | "node_modules/@emotion/unitless": { 219 | "version": "0.8.1", 220 | "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", 221 | "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" 222 | }, 223 | "node_modules/@jridgewell/gen-mapping": { 224 | "version": "0.3.3", 225 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 226 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 227 | "dev": true, 228 | "dependencies": { 229 | "@jridgewell/set-array": "^1.0.1", 230 | "@jridgewell/sourcemap-codec": "^1.4.10", 231 | "@jridgewell/trace-mapping": "^0.3.9" 232 | }, 233 | "engines": { 234 | "node": ">=6.0.0" 235 | } 236 | }, 237 | "node_modules/@jridgewell/resolve-uri": { 238 | "version": "3.1.1", 239 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 240 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 241 | "dev": true, 242 | "engines": { 243 | "node": ">=6.0.0" 244 | } 245 | }, 246 | "node_modules/@jridgewell/set-array": { 247 | "version": "1.1.2", 248 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 249 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 250 | "dev": true, 251 | "engines": { 252 | "node": ">=6.0.0" 253 | } 254 | }, 255 | "node_modules/@jridgewell/sourcemap-codec": { 256 | "version": "1.4.15", 257 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 258 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 259 | "dev": true 260 | }, 261 | "node_modules/@jridgewell/trace-mapping": { 262 | "version": "0.3.20", 263 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", 264 | "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", 265 | "dev": true, 266 | "dependencies": { 267 | "@jridgewell/resolve-uri": "^3.1.0", 268 | "@jridgewell/sourcemap-codec": "^1.4.14" 269 | } 270 | }, 271 | "node_modules/@next-auth/prisma-adapter": { 272 | "version": "1.0.7", 273 | "resolved": "https://registry.npmjs.org/@next-auth/prisma-adapter/-/prisma-adapter-1.0.7.tgz", 274 | "integrity": "sha512-Cdko4KfcmKjsyHFrWwZ//lfLUbcLqlyFqjd/nYE2m3aZ7tjMNUjpks47iw7NTCnXf+5UWz5Ypyt1dSs1EP5QJw==", 275 | "peerDependencies": { 276 | "@prisma/client": ">=2.26.0 || >=3", 277 | "next-auth": "^4" 278 | } 279 | }, 280 | "node_modules/@next/env": { 281 | "version": "13.5.6", 282 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", 283 | "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" 284 | }, 285 | "node_modules/@next/swc-darwin-arm64": { 286 | "version": "13.5.6", 287 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", 288 | "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", 289 | "cpu": [ 290 | "arm64" 291 | ], 292 | "optional": true, 293 | "os": [ 294 | "darwin" 295 | ], 296 | "engines": { 297 | "node": ">= 10" 298 | } 299 | }, 300 | "node_modules/@next/swc-darwin-x64": { 301 | "version": "13.5.6", 302 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", 303 | "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", 304 | "cpu": [ 305 | "x64" 306 | ], 307 | "optional": true, 308 | "os": [ 309 | "darwin" 310 | ], 311 | "engines": { 312 | "node": ">= 10" 313 | } 314 | }, 315 | "node_modules/@next/swc-linux-arm64-gnu": { 316 | "version": "13.5.6", 317 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", 318 | "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", 319 | "cpu": [ 320 | "arm64" 321 | ], 322 | "optional": true, 323 | "os": [ 324 | "linux" 325 | ], 326 | "engines": { 327 | "node": ">= 10" 328 | } 329 | }, 330 | "node_modules/@next/swc-linux-arm64-musl": { 331 | "version": "13.5.6", 332 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", 333 | "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", 334 | "cpu": [ 335 | "arm64" 336 | ], 337 | "optional": true, 338 | "os": [ 339 | "linux" 340 | ], 341 | "engines": { 342 | "node": ">= 10" 343 | } 344 | }, 345 | "node_modules/@next/swc-linux-x64-gnu": { 346 | "version": "13.5.6", 347 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", 348 | "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", 349 | "cpu": [ 350 | "x64" 351 | ], 352 | "optional": true, 353 | "os": [ 354 | "linux" 355 | ], 356 | "engines": { 357 | "node": ">= 10" 358 | } 359 | }, 360 | "node_modules/@next/swc-linux-x64-musl": { 361 | "version": "13.5.6", 362 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", 363 | "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", 364 | "cpu": [ 365 | "x64" 366 | ], 367 | "optional": true, 368 | "os": [ 369 | "linux" 370 | ], 371 | "engines": { 372 | "node": ">= 10" 373 | } 374 | }, 375 | "node_modules/@next/swc-win32-arm64-msvc": { 376 | "version": "13.5.6", 377 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", 378 | "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", 379 | "cpu": [ 380 | "arm64" 381 | ], 382 | "optional": true, 383 | "os": [ 384 | "win32" 385 | ], 386 | "engines": { 387 | "node": ">= 10" 388 | } 389 | }, 390 | "node_modules/@next/swc-win32-ia32-msvc": { 391 | "version": "13.5.6", 392 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", 393 | "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", 394 | "cpu": [ 395 | "ia32" 396 | ], 397 | "optional": true, 398 | "os": [ 399 | "win32" 400 | ], 401 | "engines": { 402 | "node": ">= 10" 403 | } 404 | }, 405 | "node_modules/@next/swc-win32-x64-msvc": { 406 | "version": "13.5.6", 407 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", 408 | "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", 409 | "cpu": [ 410 | "x64" 411 | ], 412 | "optional": true, 413 | "os": [ 414 | "win32" 415 | ], 416 | "engines": { 417 | "node": ">= 10" 418 | } 419 | }, 420 | "node_modules/@nodelib/fs.scandir": { 421 | "version": "2.1.5", 422 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 423 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 424 | "dev": true, 425 | "dependencies": { 426 | "@nodelib/fs.stat": "2.0.5", 427 | "run-parallel": "^1.1.9" 428 | }, 429 | "engines": { 430 | "node": ">= 8" 431 | } 432 | }, 433 | "node_modules/@nodelib/fs.stat": { 434 | "version": "2.0.5", 435 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 436 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 437 | "dev": true, 438 | "engines": { 439 | "node": ">= 8" 440 | } 441 | }, 442 | "node_modules/@nodelib/fs.walk": { 443 | "version": "1.2.8", 444 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 445 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 446 | "dev": true, 447 | "dependencies": { 448 | "@nodelib/fs.scandir": "2.1.5", 449 | "fastq": "^1.6.0" 450 | }, 451 | "engines": { 452 | "node": ">= 8" 453 | } 454 | }, 455 | "node_modules/@panva/hkdf": { 456 | "version": "1.1.1", 457 | "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", 458 | "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", 459 | "peer": true, 460 | "funding": { 461 | "url": "https://github.com/sponsors/panva" 462 | } 463 | }, 464 | "node_modules/@peculiar/asn1-schema": { 465 | "version": "2.3.8", 466 | "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", 467 | "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", 468 | "dependencies": { 469 | "asn1js": "^3.0.5", 470 | "pvtsutils": "^1.3.5", 471 | "tslib": "^2.6.2" 472 | } 473 | }, 474 | "node_modules/@peculiar/json-schema": { 475 | "version": "1.1.12", 476 | "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", 477 | "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", 478 | "dependencies": { 479 | "tslib": "^2.0.0" 480 | }, 481 | "engines": { 482 | "node": ">=8.0.0" 483 | } 484 | }, 485 | "node_modules/@peculiar/webcrypto": { 486 | "version": "1.4.1", 487 | "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.1.tgz", 488 | "integrity": "sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw==", 489 | "dependencies": { 490 | "@peculiar/asn1-schema": "^2.3.0", 491 | "@peculiar/json-schema": "^1.1.12", 492 | "pvtsutils": "^1.3.2", 493 | "tslib": "^2.4.1", 494 | "webcrypto-core": "^1.7.4" 495 | }, 496 | "engines": { 497 | "node": ">=10.12.0" 498 | } 499 | }, 500 | "node_modules/@prisma/client": { 501 | "version": "5.4.2", 502 | "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.4.2.tgz", 503 | "integrity": "sha512-2xsPaz4EaMKj1WS9iW6MlPhmbqtBsXAOeVttSePp8vTFTtvzh2hZbDgswwBdSCgPzmmwF+tLB259QzggvCmJqA==", 504 | "hasInstallScript": true, 505 | "dependencies": { 506 | "@prisma/engines-version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" 507 | }, 508 | "engines": { 509 | "node": ">=16.13" 510 | }, 511 | "peerDependencies": { 512 | "prisma": "*" 513 | }, 514 | "peerDependenciesMeta": { 515 | "prisma": { 516 | "optional": true 517 | } 518 | } 519 | }, 520 | "node_modules/@prisma/engines": { 521 | "version": "5.4.2", 522 | "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.4.2.tgz", 523 | "integrity": "sha512-fqeucJ3LH0e1eyFdT0zRx+oETLancu5+n4lhiYECyEz6H2RDskPJHJYHkVc0LhkU4Uv7fuEnppKU3nVKNzMh8g==", 524 | "hasInstallScript": true 525 | }, 526 | "node_modules/@prisma/engines-version": { 527 | "version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574", 528 | "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574.tgz", 529 | "integrity": "sha512-wvupDL4AA1vf4TQNANg7kR7y98ITqPsk6aacfBxZKtrJKRIsWjURHkZCGcQliHdqCiW/hGreO6d6ZuSv9MhdAA==" 530 | }, 531 | "node_modules/@swc/helpers": { 532 | "version": "0.5.2", 533 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", 534 | "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", 535 | "dependencies": { 536 | "tslib": "^2.4.0" 537 | } 538 | }, 539 | "node_modules/@types/body-parser": { 540 | "version": "1.19.4", 541 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", 542 | "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", 543 | "dependencies": { 544 | "@types/connect": "*", 545 | "@types/node": "*" 546 | } 547 | }, 548 | "node_modules/@types/connect": { 549 | "version": "3.4.37", 550 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", 551 | "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", 552 | "dependencies": { 553 | "@types/node": "*" 554 | } 555 | }, 556 | "node_modules/@types/cookies": { 557 | "version": "0.7.7", 558 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", 559 | "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", 560 | "dependencies": { 561 | "@types/connect": "*", 562 | "@types/express": "*", 563 | "@types/keygrip": "*", 564 | "@types/node": "*" 565 | } 566 | }, 567 | "node_modules/@types/express": { 568 | "version": "4.17.14", 569 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", 570 | "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", 571 | "dependencies": { 572 | "@types/body-parser": "*", 573 | "@types/express-serve-static-core": "^4.17.18", 574 | "@types/qs": "*", 575 | "@types/serve-static": "*" 576 | } 577 | }, 578 | "node_modules/@types/express-serve-static-core": { 579 | "version": "4.17.39", 580 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", 581 | "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", 582 | "dependencies": { 583 | "@types/node": "*", 584 | "@types/qs": "*", 585 | "@types/range-parser": "*", 586 | "@types/send": "*" 587 | } 588 | }, 589 | "node_modules/@types/http-errors": { 590 | "version": "2.0.3", 591 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", 592 | "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==" 593 | }, 594 | "node_modules/@types/keygrip": { 595 | "version": "1.0.4", 596 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.4.tgz", 597 | "integrity": "sha512-/tjWYD8StMrINelsrHNmpXceo9s3/Y22AzePH1qCvXIgmz/aQp2YFFr6HqhNQVIOdcvaVyp5GS+yjHGuF7Rwsg==" 598 | }, 599 | "node_modules/@types/mime": { 600 | "version": "1.3.4", 601 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", 602 | "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==" 603 | }, 604 | "node_modules/@types/node": { 605 | "version": "20.8.7", 606 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", 607 | "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", 608 | "dependencies": { 609 | "undici-types": "~5.25.1" 610 | } 611 | }, 612 | "node_modules/@types/node-fetch": { 613 | "version": "2.6.2", 614 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", 615 | "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", 616 | "dependencies": { 617 | "@types/node": "*", 618 | "form-data": "^3.0.0" 619 | } 620 | }, 621 | "node_modules/@types/nprogress": { 622 | "version": "0.2.2", 623 | "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.2.tgz", 624 | "integrity": "sha512-2wLrSJXLztGmr7wXwM0hA/wuIOY9DznVdd+ZFofHOiXcj9JnVt+2ZeLRJ7v5ZVlmheSkUOSg3Q3O4Ce7yji79A==" 625 | }, 626 | "node_modules/@types/prop-types": { 627 | "version": "15.7.9", 628 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", 629 | "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==", 630 | "dev": true 631 | }, 632 | "node_modules/@types/qs": { 633 | "version": "6.9.9", 634 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", 635 | "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==" 636 | }, 637 | "node_modules/@types/range-parser": { 638 | "version": "1.2.6", 639 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", 640 | "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==" 641 | }, 642 | "node_modules/@types/react": { 643 | "version": "18.2.31", 644 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.31.tgz", 645 | "integrity": "sha512-c2UnPv548q+5DFh03y8lEDeMfDwBn9G3dRwfkrxQMo/dOtRHUUO57k6pHvBIfH/VF4Nh+98mZ5aaSe+2echD5g==", 646 | "dev": true, 647 | "dependencies": { 648 | "@types/prop-types": "*", 649 | "@types/scheduler": "*", 650 | "csstype": "^3.0.2" 651 | } 652 | }, 653 | "node_modules/@types/react-dom": { 654 | "version": "18.2.14", 655 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", 656 | "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", 657 | "dev": true, 658 | "dependencies": { 659 | "@types/react": "*" 660 | } 661 | }, 662 | "node_modules/@types/scheduler": { 663 | "version": "0.16.5", 664 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", 665 | "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==", 666 | "dev": true 667 | }, 668 | "node_modules/@types/send": { 669 | "version": "0.17.3", 670 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", 671 | "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", 672 | "dependencies": { 673 | "@types/mime": "^1", 674 | "@types/node": "*" 675 | } 676 | }, 677 | "node_modules/@types/serve-static": { 678 | "version": "1.15.4", 679 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", 680 | "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", 681 | "dependencies": { 682 | "@types/http-errors": "*", 683 | "@types/mime": "*", 684 | "@types/node": "*" 685 | } 686 | }, 687 | "node_modules/@types/stylis": { 688 | "version": "4.2.2", 689 | "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.2.tgz", 690 | "integrity": "sha512-Rm17MsTpQQP5Jq4BF7CdrxJsDufoiL/q5IbJZYZmOZAJALyijgF7BzLgobXUqraNcQdqFYLYGeglDp6QzaxPpg==" 691 | }, 692 | "node_modules/any-promise": { 693 | "version": "1.3.0", 694 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 695 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 696 | "dev": true 697 | }, 698 | "node_modules/anymatch": { 699 | "version": "3.1.3", 700 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 701 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 702 | "dev": true, 703 | "dependencies": { 704 | "normalize-path": "^3.0.0", 705 | "picomatch": "^2.0.4" 706 | }, 707 | "engines": { 708 | "node": ">= 8" 709 | } 710 | }, 711 | "node_modules/arg": { 712 | "version": "5.0.2", 713 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 714 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 715 | "dev": true 716 | }, 717 | "node_modules/asn1js": { 718 | "version": "3.0.5", 719 | "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", 720 | "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", 721 | "dependencies": { 722 | "pvtsutils": "^1.3.2", 723 | "pvutils": "^1.1.3", 724 | "tslib": "^2.4.0" 725 | }, 726 | "engines": { 727 | "node": ">=12.0.0" 728 | } 729 | }, 730 | "node_modules/asynckit": { 731 | "version": "0.4.0", 732 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 733 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 734 | }, 735 | "node_modules/autoprefixer": { 736 | "version": "10.4.16", 737 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", 738 | "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", 739 | "dev": true, 740 | "funding": [ 741 | { 742 | "type": "opencollective", 743 | "url": "https://opencollective.com/postcss/" 744 | }, 745 | { 746 | "type": "tidelift", 747 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 748 | }, 749 | { 750 | "type": "github", 751 | "url": "https://github.com/sponsors/ai" 752 | } 753 | ], 754 | "dependencies": { 755 | "browserslist": "^4.21.10", 756 | "caniuse-lite": "^1.0.30001538", 757 | "fraction.js": "^4.3.6", 758 | "normalize-range": "^0.1.2", 759 | "picocolors": "^1.0.0", 760 | "postcss-value-parser": "^4.2.0" 761 | }, 762 | "bin": { 763 | "autoprefixer": "bin/autoprefixer" 764 | }, 765 | "engines": { 766 | "node": "^10 || ^12 || >=14" 767 | }, 768 | "peerDependencies": { 769 | "postcss": "^8.1.0" 770 | } 771 | }, 772 | "node_modules/axios": { 773 | "version": "1.5.1", 774 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", 775 | "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", 776 | "dependencies": { 777 | "follow-redirects": "^1.15.0", 778 | "form-data": "^4.0.0", 779 | "proxy-from-env": "^1.1.0" 780 | } 781 | }, 782 | "node_modules/axios/node_modules/form-data": { 783 | "version": "4.0.0", 784 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 785 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 786 | "dependencies": { 787 | "asynckit": "^0.4.0", 788 | "combined-stream": "^1.0.8", 789 | "mime-types": "^2.1.12" 790 | }, 791 | "engines": { 792 | "node": ">= 6" 793 | } 794 | }, 795 | "node_modules/balanced-match": { 796 | "version": "1.0.2", 797 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 798 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 799 | "dev": true 800 | }, 801 | "node_modules/binary-extensions": { 802 | "version": "2.2.0", 803 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 804 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 805 | "dev": true, 806 | "engines": { 807 | "node": ">=8" 808 | } 809 | }, 810 | "node_modules/brace-expansion": { 811 | "version": "1.1.11", 812 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 813 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 814 | "dev": true, 815 | "dependencies": { 816 | "balanced-match": "^1.0.0", 817 | "concat-map": "0.0.1" 818 | } 819 | }, 820 | "node_modules/braces": { 821 | "version": "3.0.2", 822 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 823 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 824 | "dev": true, 825 | "dependencies": { 826 | "fill-range": "^7.0.1" 827 | }, 828 | "engines": { 829 | "node": ">=8" 830 | } 831 | }, 832 | "node_modules/browserslist": { 833 | "version": "4.22.1", 834 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", 835 | "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", 836 | "dev": true, 837 | "funding": [ 838 | { 839 | "type": "opencollective", 840 | "url": "https://opencollective.com/browserslist" 841 | }, 842 | { 843 | "type": "tidelift", 844 | "url": "https://tidelift.com/funding/github/npm/browserslist" 845 | }, 846 | { 847 | "type": "github", 848 | "url": "https://github.com/sponsors/ai" 849 | } 850 | ], 851 | "dependencies": { 852 | "caniuse-lite": "^1.0.30001541", 853 | "electron-to-chromium": "^1.4.535", 854 | "node-releases": "^2.0.13", 855 | "update-browserslist-db": "^1.0.13" 856 | }, 857 | "bin": { 858 | "browserslist": "cli.js" 859 | }, 860 | "engines": { 861 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 862 | } 863 | }, 864 | "node_modules/busboy": { 865 | "version": "1.6.0", 866 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 867 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 868 | "dependencies": { 869 | "streamsearch": "^1.1.0" 870 | }, 871 | "engines": { 872 | "node": ">=10.16.0" 873 | } 874 | }, 875 | "node_modules/camelcase": { 876 | "version": "5.3.1", 877 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 878 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 879 | "engines": { 880 | "node": ">=6" 881 | } 882 | }, 883 | "node_modules/camelcase-css": { 884 | "version": "2.0.1", 885 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 886 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 887 | "dev": true, 888 | "engines": { 889 | "node": ">= 6" 890 | } 891 | }, 892 | "node_modules/camelcase-keys": { 893 | "version": "6.2.2", 894 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", 895 | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", 896 | "dependencies": { 897 | "camelcase": "^5.3.1", 898 | "map-obj": "^4.0.0", 899 | "quick-lru": "^4.0.1" 900 | }, 901 | "engines": { 902 | "node": ">=8" 903 | }, 904 | "funding": { 905 | "url": "https://github.com/sponsors/sindresorhus" 906 | } 907 | }, 908 | "node_modules/camelize": { 909 | "version": "1.0.1", 910 | "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", 911 | "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", 912 | "funding": { 913 | "url": "https://github.com/sponsors/ljharb" 914 | } 915 | }, 916 | "node_modules/caniuse-lite": { 917 | "version": "1.0.30001551", 918 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", 919 | "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", 920 | "funding": [ 921 | { 922 | "type": "opencollective", 923 | "url": "https://opencollective.com/browserslist" 924 | }, 925 | { 926 | "type": "tidelift", 927 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 928 | }, 929 | { 930 | "type": "github", 931 | "url": "https://github.com/sponsors/ai" 932 | } 933 | ] 934 | }, 935 | "node_modules/chokidar": { 936 | "version": "3.5.3", 937 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 938 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 939 | "dev": true, 940 | "funding": [ 941 | { 942 | "type": "individual", 943 | "url": "https://paulmillr.com/funding/" 944 | } 945 | ], 946 | "dependencies": { 947 | "anymatch": "~3.1.2", 948 | "braces": "~3.0.2", 949 | "glob-parent": "~5.1.2", 950 | "is-binary-path": "~2.1.0", 951 | "is-glob": "~4.0.1", 952 | "normalize-path": "~3.0.0", 953 | "readdirp": "~3.6.0" 954 | }, 955 | "engines": { 956 | "node": ">= 8.10.0" 957 | }, 958 | "optionalDependencies": { 959 | "fsevents": "~2.3.2" 960 | } 961 | }, 962 | "node_modules/chokidar/node_modules/glob-parent": { 963 | "version": "5.1.2", 964 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 965 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 966 | "dev": true, 967 | "dependencies": { 968 | "is-glob": "^4.0.1" 969 | }, 970 | "engines": { 971 | "node": ">= 6" 972 | } 973 | }, 974 | "node_modules/client-only": { 975 | "version": "0.0.1", 976 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 977 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 978 | }, 979 | "node_modules/combined-stream": { 980 | "version": "1.0.8", 981 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 982 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 983 | "dependencies": { 984 | "delayed-stream": "~1.0.0" 985 | }, 986 | "engines": { 987 | "node": ">= 0.8" 988 | } 989 | }, 990 | "node_modules/commander": { 991 | "version": "4.1.1", 992 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 993 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 994 | "dev": true, 995 | "engines": { 996 | "node": ">= 6" 997 | } 998 | }, 999 | "node_modules/concat-map": { 1000 | "version": "0.0.1", 1001 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1002 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1003 | "dev": true 1004 | }, 1005 | "node_modules/cookie": { 1006 | "version": "0.5.0", 1007 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1008 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 1009 | "engines": { 1010 | "node": ">= 0.6" 1011 | } 1012 | }, 1013 | "node_modules/css-color-keywords": { 1014 | "version": "1.0.0", 1015 | "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", 1016 | "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", 1017 | "engines": { 1018 | "node": ">=4" 1019 | } 1020 | }, 1021 | "node_modules/css-to-react-native": { 1022 | "version": "3.2.0", 1023 | "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", 1024 | "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", 1025 | "dependencies": { 1026 | "camelize": "^1.0.0", 1027 | "css-color-keywords": "^1.0.0", 1028 | "postcss-value-parser": "^4.0.2" 1029 | } 1030 | }, 1031 | "node_modules/cssesc": { 1032 | "version": "3.0.0", 1033 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1034 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1035 | "dev": true, 1036 | "bin": { 1037 | "cssesc": "bin/cssesc" 1038 | }, 1039 | "engines": { 1040 | "node": ">=4" 1041 | } 1042 | }, 1043 | "node_modules/csstype": { 1044 | "version": "3.1.2", 1045 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", 1046 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" 1047 | }, 1048 | "node_modules/deepmerge": { 1049 | "version": "4.2.2", 1050 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1051 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1052 | "engines": { 1053 | "node": ">=0.10.0" 1054 | } 1055 | }, 1056 | "node_modules/delayed-stream": { 1057 | "version": "1.0.0", 1058 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1059 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1060 | "engines": { 1061 | "node": ">=0.4.0" 1062 | } 1063 | }, 1064 | "node_modules/didyoumean": { 1065 | "version": "1.2.2", 1066 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1067 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1068 | "dev": true 1069 | }, 1070 | "node_modules/dlv": { 1071 | "version": "1.1.3", 1072 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1073 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1074 | "dev": true 1075 | }, 1076 | "node_modules/dot-case": { 1077 | "version": "3.0.4", 1078 | "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", 1079 | "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", 1080 | "dependencies": { 1081 | "no-case": "^3.0.4", 1082 | "tslib": "^2.0.3" 1083 | } 1084 | }, 1085 | "node_modules/electron-to-chromium": { 1086 | "version": "1.4.561", 1087 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.561.tgz", 1088 | "integrity": "sha512-eS5t4ulWOBfVHdq9SW2dxEaFarj1lPjvJ8PaYMOjY0DecBaj/t4ARziL2IPpDr4atyWwjLFGQ2vo/VCgQFezVQ==", 1089 | "dev": true 1090 | }, 1091 | "node_modules/escalade": { 1092 | "version": "3.1.1", 1093 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1094 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1095 | "dev": true, 1096 | "engines": { 1097 | "node": ">=6" 1098 | } 1099 | }, 1100 | "node_modules/fast-glob": { 1101 | "version": "3.3.1", 1102 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1103 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1104 | "dev": true, 1105 | "dependencies": { 1106 | "@nodelib/fs.stat": "^2.0.2", 1107 | "@nodelib/fs.walk": "^1.2.3", 1108 | "glob-parent": "^5.1.2", 1109 | "merge2": "^1.3.0", 1110 | "micromatch": "^4.0.4" 1111 | }, 1112 | "engines": { 1113 | "node": ">=8.6.0" 1114 | } 1115 | }, 1116 | "node_modules/fast-glob/node_modules/glob-parent": { 1117 | "version": "5.1.2", 1118 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1119 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1120 | "dev": true, 1121 | "dependencies": { 1122 | "is-glob": "^4.0.1" 1123 | }, 1124 | "engines": { 1125 | "node": ">= 6" 1126 | } 1127 | }, 1128 | "node_modules/fastq": { 1129 | "version": "1.15.0", 1130 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1131 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1132 | "dev": true, 1133 | "dependencies": { 1134 | "reusify": "^1.0.4" 1135 | } 1136 | }, 1137 | "node_modules/fill-range": { 1138 | "version": "7.0.1", 1139 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1140 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1141 | "dev": true, 1142 | "dependencies": { 1143 | "to-regex-range": "^5.0.1" 1144 | }, 1145 | "engines": { 1146 | "node": ">=8" 1147 | } 1148 | }, 1149 | "node_modules/follow-redirects": { 1150 | "version": "1.15.3", 1151 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", 1152 | "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", 1153 | "funding": [ 1154 | { 1155 | "type": "individual", 1156 | "url": "https://github.com/sponsors/RubenVerborgh" 1157 | } 1158 | ], 1159 | "engines": { 1160 | "node": ">=4.0" 1161 | }, 1162 | "peerDependenciesMeta": { 1163 | "debug": { 1164 | "optional": true 1165 | } 1166 | } 1167 | }, 1168 | "node_modules/form-data": { 1169 | "version": "3.0.1", 1170 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 1171 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 1172 | "dependencies": { 1173 | "asynckit": "^0.4.0", 1174 | "combined-stream": "^1.0.8", 1175 | "mime-types": "^2.1.12" 1176 | }, 1177 | "engines": { 1178 | "node": ">= 6" 1179 | } 1180 | }, 1181 | "node_modules/fraction.js": { 1182 | "version": "4.3.7", 1183 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 1184 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 1185 | "dev": true, 1186 | "engines": { 1187 | "node": "*" 1188 | }, 1189 | "funding": { 1190 | "type": "patreon", 1191 | "url": "https://github.com/sponsors/rawify" 1192 | } 1193 | }, 1194 | "node_modules/fs.realpath": { 1195 | "version": "1.0.0", 1196 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1197 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1198 | "dev": true 1199 | }, 1200 | "node_modules/fsevents": { 1201 | "version": "2.3.3", 1202 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1203 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1204 | "dev": true, 1205 | "hasInstallScript": true, 1206 | "optional": true, 1207 | "os": [ 1208 | "darwin" 1209 | ], 1210 | "engines": { 1211 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1212 | } 1213 | }, 1214 | "node_modules/glob": { 1215 | "version": "7.1.6", 1216 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1217 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1218 | "dev": true, 1219 | "dependencies": { 1220 | "fs.realpath": "^1.0.0", 1221 | "inflight": "^1.0.4", 1222 | "inherits": "2", 1223 | "minimatch": "^3.0.4", 1224 | "once": "^1.3.0", 1225 | "path-is-absolute": "^1.0.0" 1226 | }, 1227 | "engines": { 1228 | "node": "*" 1229 | }, 1230 | "funding": { 1231 | "url": "https://github.com/sponsors/isaacs" 1232 | } 1233 | }, 1234 | "node_modules/glob-parent": { 1235 | "version": "6.0.2", 1236 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1237 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1238 | "dev": true, 1239 | "dependencies": { 1240 | "is-glob": "^4.0.3" 1241 | }, 1242 | "engines": { 1243 | "node": ">=10.13.0" 1244 | } 1245 | }, 1246 | "node_modules/glob-to-regexp": { 1247 | "version": "0.4.1", 1248 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1249 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" 1250 | }, 1251 | "node_modules/goober": { 1252 | "version": "2.1.13", 1253 | "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.13.tgz", 1254 | "integrity": "sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==", 1255 | "peerDependencies": { 1256 | "csstype": "^3.0.10" 1257 | } 1258 | }, 1259 | "node_modules/graceful-fs": { 1260 | "version": "4.2.11", 1261 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1262 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 1263 | }, 1264 | "node_modules/has": { 1265 | "version": "1.0.4", 1266 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", 1267 | "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", 1268 | "dev": true, 1269 | "engines": { 1270 | "node": ">= 0.4.0" 1271 | } 1272 | }, 1273 | "node_modules/inflight": { 1274 | "version": "1.0.6", 1275 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1276 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1277 | "dev": true, 1278 | "dependencies": { 1279 | "once": "^1.3.0", 1280 | "wrappy": "1" 1281 | } 1282 | }, 1283 | "node_modules/inherits": { 1284 | "version": "2.0.4", 1285 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1286 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1287 | "dev": true 1288 | }, 1289 | "node_modules/is-binary-path": { 1290 | "version": "2.1.0", 1291 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1292 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1293 | "dev": true, 1294 | "dependencies": { 1295 | "binary-extensions": "^2.0.0" 1296 | }, 1297 | "engines": { 1298 | "node": ">=8" 1299 | } 1300 | }, 1301 | "node_modules/is-core-module": { 1302 | "version": "2.13.0", 1303 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 1304 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 1305 | "dev": true, 1306 | "dependencies": { 1307 | "has": "^1.0.3" 1308 | }, 1309 | "funding": { 1310 | "url": "https://github.com/sponsors/ljharb" 1311 | } 1312 | }, 1313 | "node_modules/is-extglob": { 1314 | "version": "2.1.1", 1315 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1316 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1317 | "dev": true, 1318 | "engines": { 1319 | "node": ">=0.10.0" 1320 | } 1321 | }, 1322 | "node_modules/is-glob": { 1323 | "version": "4.0.3", 1324 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1325 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1326 | "dev": true, 1327 | "dependencies": { 1328 | "is-extglob": "^2.1.1" 1329 | }, 1330 | "engines": { 1331 | "node": ">=0.10.0" 1332 | } 1333 | }, 1334 | "node_modules/is-number": { 1335 | "version": "7.0.0", 1336 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1337 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1338 | "dev": true, 1339 | "engines": { 1340 | "node": ">=0.12.0" 1341 | } 1342 | }, 1343 | "node_modules/jiti": { 1344 | "version": "1.20.0", 1345 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", 1346 | "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", 1347 | "dev": true, 1348 | "bin": { 1349 | "jiti": "bin/jiti.js" 1350 | } 1351 | }, 1352 | "node_modules/jose": { 1353 | "version": "4.15.4", 1354 | "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", 1355 | "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", 1356 | "peer": true, 1357 | "funding": { 1358 | "url": "https://github.com/sponsors/panva" 1359 | } 1360 | }, 1361 | "node_modules/js-cookie": { 1362 | "version": "3.0.1", 1363 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", 1364 | "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", 1365 | "engines": { 1366 | "node": ">=12" 1367 | } 1368 | }, 1369 | "node_modules/js-tokens": { 1370 | "version": "4.0.0", 1371 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1372 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1373 | }, 1374 | "node_modules/lilconfig": { 1375 | "version": "2.1.0", 1376 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 1377 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 1378 | "dev": true, 1379 | "engines": { 1380 | "node": ">=10" 1381 | } 1382 | }, 1383 | "node_modules/lines-and-columns": { 1384 | "version": "1.2.4", 1385 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1386 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1387 | "dev": true 1388 | }, 1389 | "node_modules/loose-envify": { 1390 | "version": "1.4.0", 1391 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1392 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1393 | "dependencies": { 1394 | "js-tokens": "^3.0.0 || ^4.0.0" 1395 | }, 1396 | "bin": { 1397 | "loose-envify": "cli.js" 1398 | } 1399 | }, 1400 | "node_modules/lower-case": { 1401 | "version": "2.0.2", 1402 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", 1403 | "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", 1404 | "dependencies": { 1405 | "tslib": "^2.0.3" 1406 | } 1407 | }, 1408 | "node_modules/lru-cache": { 1409 | "version": "6.0.0", 1410 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1411 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1412 | "peer": true, 1413 | "dependencies": { 1414 | "yallist": "^4.0.0" 1415 | }, 1416 | "engines": { 1417 | "node": ">=10" 1418 | } 1419 | }, 1420 | "node_modules/map-obj": { 1421 | "version": "4.3.0", 1422 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", 1423 | "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", 1424 | "engines": { 1425 | "node": ">=8" 1426 | }, 1427 | "funding": { 1428 | "url": "https://github.com/sponsors/sindresorhus" 1429 | } 1430 | }, 1431 | "node_modules/merge2": { 1432 | "version": "1.4.1", 1433 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1434 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1435 | "dev": true, 1436 | "engines": { 1437 | "node": ">= 8" 1438 | } 1439 | }, 1440 | "node_modules/micromatch": { 1441 | "version": "4.0.5", 1442 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1443 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1444 | "dev": true, 1445 | "dependencies": { 1446 | "braces": "^3.0.2", 1447 | "picomatch": "^2.3.1" 1448 | }, 1449 | "engines": { 1450 | "node": ">=8.6" 1451 | } 1452 | }, 1453 | "node_modules/mime-db": { 1454 | "version": "1.52.0", 1455 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1456 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1457 | "engines": { 1458 | "node": ">= 0.6" 1459 | } 1460 | }, 1461 | "node_modules/mime-types": { 1462 | "version": "2.1.35", 1463 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1464 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1465 | "dependencies": { 1466 | "mime-db": "1.52.0" 1467 | }, 1468 | "engines": { 1469 | "node": ">= 0.6" 1470 | } 1471 | }, 1472 | "node_modules/minimatch": { 1473 | "version": "3.1.2", 1474 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1475 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1476 | "dev": true, 1477 | "dependencies": { 1478 | "brace-expansion": "^1.1.7" 1479 | }, 1480 | "engines": { 1481 | "node": "*" 1482 | } 1483 | }, 1484 | "node_modules/moment": { 1485 | "version": "2.29.4", 1486 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1487 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 1488 | "engines": { 1489 | "node": "*" 1490 | } 1491 | }, 1492 | "node_modules/mz": { 1493 | "version": "2.7.0", 1494 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1495 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1496 | "dev": true, 1497 | "dependencies": { 1498 | "any-promise": "^1.0.0", 1499 | "object-assign": "^4.0.1", 1500 | "thenify-all": "^1.0.0" 1501 | } 1502 | }, 1503 | "node_modules/nanoid": { 1504 | "version": "3.3.6", 1505 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 1506 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 1507 | "funding": [ 1508 | { 1509 | "type": "github", 1510 | "url": "https://github.com/sponsors/ai" 1511 | } 1512 | ], 1513 | "bin": { 1514 | "nanoid": "bin/nanoid.cjs" 1515 | }, 1516 | "engines": { 1517 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1518 | } 1519 | }, 1520 | "node_modules/next": { 1521 | "version": "13.5.6", 1522 | "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", 1523 | "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", 1524 | "dependencies": { 1525 | "@next/env": "13.5.6", 1526 | "@swc/helpers": "0.5.2", 1527 | "busboy": "1.6.0", 1528 | "caniuse-lite": "^1.0.30001406", 1529 | "postcss": "8.4.31", 1530 | "styled-jsx": "5.1.1", 1531 | "watchpack": "2.4.0" 1532 | }, 1533 | "bin": { 1534 | "next": "dist/bin/next" 1535 | }, 1536 | "engines": { 1537 | "node": ">=16.14.0" 1538 | }, 1539 | "optionalDependencies": { 1540 | "@next/swc-darwin-arm64": "13.5.6", 1541 | "@next/swc-darwin-x64": "13.5.6", 1542 | "@next/swc-linux-arm64-gnu": "13.5.6", 1543 | "@next/swc-linux-arm64-musl": "13.5.6", 1544 | "@next/swc-linux-x64-gnu": "13.5.6", 1545 | "@next/swc-linux-x64-musl": "13.5.6", 1546 | "@next/swc-win32-arm64-msvc": "13.5.6", 1547 | "@next/swc-win32-ia32-msvc": "13.5.6", 1548 | "@next/swc-win32-x64-msvc": "13.5.6" 1549 | }, 1550 | "peerDependencies": { 1551 | "@opentelemetry/api": "^1.1.0", 1552 | "react": "^18.2.0", 1553 | "react-dom": "^18.2.0", 1554 | "sass": "^1.3.0" 1555 | }, 1556 | "peerDependenciesMeta": { 1557 | "@opentelemetry/api": { 1558 | "optional": true 1559 | }, 1560 | "sass": { 1561 | "optional": true 1562 | } 1563 | } 1564 | }, 1565 | "node_modules/next-auth": { 1566 | "version": "4.24.3", 1567 | "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.3.tgz", 1568 | "integrity": "sha512-n1EvmY7MwQMSOkCh6jhI6uBneB6VVtkYELVMEwVaCLD1mBD3IAAucwk+90kgxramW09nSp5drvynwfNCi1JjaQ==", 1569 | "peer": true, 1570 | "dependencies": { 1571 | "@babel/runtime": "^7.20.13", 1572 | "@panva/hkdf": "^1.0.2", 1573 | "cookie": "^0.5.0", 1574 | "jose": "^4.11.4", 1575 | "oauth": "^0.9.15", 1576 | "openid-client": "^5.4.0", 1577 | "preact": "^10.6.3", 1578 | "preact-render-to-string": "^5.1.19", 1579 | "uuid": "^8.3.2" 1580 | }, 1581 | "peerDependencies": { 1582 | "next": "^12.2.5 || ^13", 1583 | "nodemailer": "^6.6.5", 1584 | "react": "^17.0.2 || ^18", 1585 | "react-dom": "^17.0.2 || ^18" 1586 | }, 1587 | "peerDependenciesMeta": { 1588 | "nodemailer": { 1589 | "optional": true 1590 | } 1591 | } 1592 | }, 1593 | "node_modules/nextjs-toploader": { 1594 | "version": "1.5.3", 1595 | "resolved": "https://registry.npmjs.org/nextjs-toploader/-/nextjs-toploader-1.5.3.tgz", 1596 | "integrity": "sha512-kNqgpOxVeo7ihMZqNzxtsCNcO0lo1NNjxhCtnJ2qgTKxgppMGpuSVU4FTMaCOefamVop1mWk1Ij3C2pBP5NwPg==", 1597 | "dependencies": { 1598 | "@types/nprogress": "^0.2.1", 1599 | "nprogress": "^0.2.0", 1600 | "prop-types": "^15.8.1" 1601 | }, 1602 | "peerDependencies": { 1603 | "next": ">= 6.0.0", 1604 | "react": ">= 16.0.0", 1605 | "react-dom": ">= 16.0.0" 1606 | } 1607 | }, 1608 | "node_modules/no-case": { 1609 | "version": "3.0.4", 1610 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", 1611 | "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", 1612 | "dependencies": { 1613 | "lower-case": "^2.0.2", 1614 | "tslib": "^2.0.3" 1615 | } 1616 | }, 1617 | "node_modules/node-fetch-native": { 1618 | "version": "1.0.1", 1619 | "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.0.1.tgz", 1620 | "integrity": "sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==" 1621 | }, 1622 | "node_modules/node-releases": { 1623 | "version": "2.0.13", 1624 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", 1625 | "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", 1626 | "dev": true 1627 | }, 1628 | "node_modules/normalize-path": { 1629 | "version": "3.0.0", 1630 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1631 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1632 | "dev": true, 1633 | "engines": { 1634 | "node": ">=0.10.0" 1635 | } 1636 | }, 1637 | "node_modules/normalize-range": { 1638 | "version": "0.1.2", 1639 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1640 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 1641 | "dev": true, 1642 | "engines": { 1643 | "node": ">=0.10.0" 1644 | } 1645 | }, 1646 | "node_modules/nprogress": { 1647 | "version": "0.2.0", 1648 | "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", 1649 | "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" 1650 | }, 1651 | "node_modules/oauth": { 1652 | "version": "0.9.15", 1653 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 1654 | "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==", 1655 | "peer": true 1656 | }, 1657 | "node_modules/object-assign": { 1658 | "version": "4.1.1", 1659 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1660 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1661 | "engines": { 1662 | "node": ">=0.10.0" 1663 | } 1664 | }, 1665 | "node_modules/object-hash": { 1666 | "version": "3.0.0", 1667 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1668 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1669 | "dev": true, 1670 | "engines": { 1671 | "node": ">= 6" 1672 | } 1673 | }, 1674 | "node_modules/oidc-token-hash": { 1675 | "version": "5.0.3", 1676 | "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", 1677 | "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", 1678 | "peer": true, 1679 | "engines": { 1680 | "node": "^10.13.0 || >=12.0.0" 1681 | } 1682 | }, 1683 | "node_modules/once": { 1684 | "version": "1.4.0", 1685 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1686 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1687 | "dev": true, 1688 | "dependencies": { 1689 | "wrappy": "1" 1690 | } 1691 | }, 1692 | "node_modules/openid-client": { 1693 | "version": "5.6.1", 1694 | "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.1.tgz", 1695 | "integrity": "sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==", 1696 | "peer": true, 1697 | "dependencies": { 1698 | "jose": "^4.15.1", 1699 | "lru-cache": "^6.0.0", 1700 | "object-hash": "^2.2.0", 1701 | "oidc-token-hash": "^5.0.3" 1702 | }, 1703 | "funding": { 1704 | "url": "https://github.com/sponsors/panva" 1705 | } 1706 | }, 1707 | "node_modules/openid-client/node_modules/object-hash": { 1708 | "version": "2.2.0", 1709 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", 1710 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", 1711 | "peer": true, 1712 | "engines": { 1713 | "node": ">= 6" 1714 | } 1715 | }, 1716 | "node_modules/path-is-absolute": { 1717 | "version": "1.0.1", 1718 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1719 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1720 | "dev": true, 1721 | "engines": { 1722 | "node": ">=0.10.0" 1723 | } 1724 | }, 1725 | "node_modules/path-parse": { 1726 | "version": "1.0.7", 1727 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1728 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1729 | "dev": true 1730 | }, 1731 | "node_modules/path-to-regexp": { 1732 | "version": "6.2.1", 1733 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", 1734 | "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" 1735 | }, 1736 | "node_modules/picocolors": { 1737 | "version": "1.0.0", 1738 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1739 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1740 | }, 1741 | "node_modules/picomatch": { 1742 | "version": "2.3.1", 1743 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1744 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1745 | "dev": true, 1746 | "engines": { 1747 | "node": ">=8.6" 1748 | }, 1749 | "funding": { 1750 | "url": "https://github.com/sponsors/jonschlinkert" 1751 | } 1752 | }, 1753 | "node_modules/pify": { 1754 | "version": "2.3.0", 1755 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1756 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1757 | "dev": true, 1758 | "engines": { 1759 | "node": ">=0.10.0" 1760 | } 1761 | }, 1762 | "node_modules/pirates": { 1763 | "version": "4.0.6", 1764 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1765 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1766 | "dev": true, 1767 | "engines": { 1768 | "node": ">= 6" 1769 | } 1770 | }, 1771 | "node_modules/postcss": { 1772 | "version": "8.4.31", 1773 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", 1774 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 1775 | "funding": [ 1776 | { 1777 | "type": "opencollective", 1778 | "url": "https://opencollective.com/postcss/" 1779 | }, 1780 | { 1781 | "type": "tidelift", 1782 | "url": "https://tidelift.com/funding/github/npm/postcss" 1783 | }, 1784 | { 1785 | "type": "github", 1786 | "url": "https://github.com/sponsors/ai" 1787 | } 1788 | ], 1789 | "dependencies": { 1790 | "nanoid": "^3.3.6", 1791 | "picocolors": "^1.0.0", 1792 | "source-map-js": "^1.0.2" 1793 | }, 1794 | "engines": { 1795 | "node": "^10 || ^12 || >=14" 1796 | } 1797 | }, 1798 | "node_modules/postcss-import": { 1799 | "version": "15.1.0", 1800 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 1801 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 1802 | "dev": true, 1803 | "dependencies": { 1804 | "postcss-value-parser": "^4.0.0", 1805 | "read-cache": "^1.0.0", 1806 | "resolve": "^1.1.7" 1807 | }, 1808 | "engines": { 1809 | "node": ">=14.0.0" 1810 | }, 1811 | "peerDependencies": { 1812 | "postcss": "^8.0.0" 1813 | } 1814 | }, 1815 | "node_modules/postcss-js": { 1816 | "version": "4.0.1", 1817 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 1818 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 1819 | "dev": true, 1820 | "dependencies": { 1821 | "camelcase-css": "^2.0.1" 1822 | }, 1823 | "engines": { 1824 | "node": "^12 || ^14 || >= 16" 1825 | }, 1826 | "funding": { 1827 | "type": "opencollective", 1828 | "url": "https://opencollective.com/postcss/" 1829 | }, 1830 | "peerDependencies": { 1831 | "postcss": "^8.4.21" 1832 | } 1833 | }, 1834 | "node_modules/postcss-load-config": { 1835 | "version": "4.0.1", 1836 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", 1837 | "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", 1838 | "dev": true, 1839 | "dependencies": { 1840 | "lilconfig": "^2.0.5", 1841 | "yaml": "^2.1.1" 1842 | }, 1843 | "engines": { 1844 | "node": ">= 14" 1845 | }, 1846 | "funding": { 1847 | "type": "opencollective", 1848 | "url": "https://opencollective.com/postcss/" 1849 | }, 1850 | "peerDependencies": { 1851 | "postcss": ">=8.0.9", 1852 | "ts-node": ">=9.0.0" 1853 | }, 1854 | "peerDependenciesMeta": { 1855 | "postcss": { 1856 | "optional": true 1857 | }, 1858 | "ts-node": { 1859 | "optional": true 1860 | } 1861 | } 1862 | }, 1863 | "node_modules/postcss-nested": { 1864 | "version": "6.0.1", 1865 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 1866 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 1867 | "dev": true, 1868 | "dependencies": { 1869 | "postcss-selector-parser": "^6.0.11" 1870 | }, 1871 | "engines": { 1872 | "node": ">=12.0" 1873 | }, 1874 | "funding": { 1875 | "type": "opencollective", 1876 | "url": "https://opencollective.com/postcss/" 1877 | }, 1878 | "peerDependencies": { 1879 | "postcss": "^8.2.14" 1880 | } 1881 | }, 1882 | "node_modules/postcss-selector-parser": { 1883 | "version": "6.0.13", 1884 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 1885 | "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 1886 | "dev": true, 1887 | "dependencies": { 1888 | "cssesc": "^3.0.0", 1889 | "util-deprecate": "^1.0.2" 1890 | }, 1891 | "engines": { 1892 | "node": ">=4" 1893 | } 1894 | }, 1895 | "node_modules/postcss-value-parser": { 1896 | "version": "4.2.0", 1897 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1898 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 1899 | }, 1900 | "node_modules/preact": { 1901 | "version": "10.18.1", 1902 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.18.1.tgz", 1903 | "integrity": "sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==", 1904 | "peer": true, 1905 | "funding": { 1906 | "type": "opencollective", 1907 | "url": "https://opencollective.com/preact" 1908 | } 1909 | }, 1910 | "node_modules/preact-render-to-string": { 1911 | "version": "5.2.6", 1912 | "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", 1913 | "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", 1914 | "peer": true, 1915 | "dependencies": { 1916 | "pretty-format": "^3.8.0" 1917 | }, 1918 | "peerDependencies": { 1919 | "preact": ">=10" 1920 | } 1921 | }, 1922 | "node_modules/pretty-format": { 1923 | "version": "3.8.0", 1924 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", 1925 | "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", 1926 | "peer": true 1927 | }, 1928 | "node_modules/prisma": { 1929 | "version": "5.4.2", 1930 | "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.4.2.tgz", 1931 | "integrity": "sha512-GDMZwZy7mysB2oXU+angQqJ90iaPFdD0rHaZNkn+dio5NRkGLmMqmXs31//tg/qXT3iB0cTQwnGGQNuirhSTZg==", 1932 | "hasInstallScript": true, 1933 | "dependencies": { 1934 | "@prisma/engines": "5.4.2" 1935 | }, 1936 | "bin": { 1937 | "prisma": "build/index.js" 1938 | }, 1939 | "engines": { 1940 | "node": ">=16.13" 1941 | } 1942 | }, 1943 | "node_modules/prop-types": { 1944 | "version": "15.8.1", 1945 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 1946 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 1947 | "dependencies": { 1948 | "loose-envify": "^1.4.0", 1949 | "object-assign": "^4.1.1", 1950 | "react-is": "^16.13.1" 1951 | } 1952 | }, 1953 | "node_modules/proxy-from-env": { 1954 | "version": "1.1.0", 1955 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1956 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1957 | }, 1958 | "node_modules/pvtsutils": { 1959 | "version": "1.3.5", 1960 | "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", 1961 | "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", 1962 | "dependencies": { 1963 | "tslib": "^2.6.1" 1964 | } 1965 | }, 1966 | "node_modules/pvutils": { 1967 | "version": "1.1.3", 1968 | "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", 1969 | "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", 1970 | "engines": { 1971 | "node": ">=6.0.0" 1972 | } 1973 | }, 1974 | "node_modules/queue-microtask": { 1975 | "version": "1.2.3", 1976 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1977 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1978 | "dev": true, 1979 | "funding": [ 1980 | { 1981 | "type": "github", 1982 | "url": "https://github.com/sponsors/feross" 1983 | }, 1984 | { 1985 | "type": "patreon", 1986 | "url": "https://www.patreon.com/feross" 1987 | }, 1988 | { 1989 | "type": "consulting", 1990 | "url": "https://feross.org/support" 1991 | } 1992 | ] 1993 | }, 1994 | "node_modules/quick-lru": { 1995 | "version": "4.0.1", 1996 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", 1997 | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", 1998 | "engines": { 1999 | "node": ">=8" 2000 | } 2001 | }, 2002 | "node_modules/react": { 2003 | "version": "18.2.0", 2004 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 2005 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 2006 | "dependencies": { 2007 | "loose-envify": "^1.1.0" 2008 | }, 2009 | "engines": { 2010 | "node": ">=0.10.0" 2011 | } 2012 | }, 2013 | "node_modules/react-dom": { 2014 | "version": "18.2.0", 2015 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 2016 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 2017 | "dependencies": { 2018 | "loose-envify": "^1.1.0", 2019 | "scheduler": "^0.23.0" 2020 | }, 2021 | "peerDependencies": { 2022 | "react": "^18.2.0" 2023 | } 2024 | }, 2025 | "node_modules/react-hot-toast": { 2026 | "version": "2.4.1", 2027 | "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz", 2028 | "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==", 2029 | "dependencies": { 2030 | "goober": "^2.1.10" 2031 | }, 2032 | "engines": { 2033 | "node": ">=10" 2034 | }, 2035 | "peerDependencies": { 2036 | "react": ">=16", 2037 | "react-dom": ">=16" 2038 | } 2039 | }, 2040 | "node_modules/react-is": { 2041 | "version": "16.13.1", 2042 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 2043 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 2044 | }, 2045 | "node_modules/read-cache": { 2046 | "version": "1.0.0", 2047 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 2048 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 2049 | "dev": true, 2050 | "dependencies": { 2051 | "pify": "^2.3.0" 2052 | } 2053 | }, 2054 | "node_modules/readdirp": { 2055 | "version": "3.6.0", 2056 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2057 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2058 | "dev": true, 2059 | "dependencies": { 2060 | "picomatch": "^2.2.1" 2061 | }, 2062 | "engines": { 2063 | "node": ">=8.10.0" 2064 | } 2065 | }, 2066 | "node_modules/regenerator-runtime": { 2067 | "version": "0.14.0", 2068 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", 2069 | "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", 2070 | "peer": true 2071 | }, 2072 | "node_modules/resolve": { 2073 | "version": "1.22.8", 2074 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 2075 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 2076 | "dev": true, 2077 | "dependencies": { 2078 | "is-core-module": "^2.13.0", 2079 | "path-parse": "^1.0.7", 2080 | "supports-preserve-symlinks-flag": "^1.0.0" 2081 | }, 2082 | "bin": { 2083 | "resolve": "bin/resolve" 2084 | }, 2085 | "funding": { 2086 | "url": "https://github.com/sponsors/ljharb" 2087 | } 2088 | }, 2089 | "node_modules/reusify": { 2090 | "version": "1.0.4", 2091 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2092 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2093 | "dev": true, 2094 | "engines": { 2095 | "iojs": ">=1.0.0", 2096 | "node": ">=0.10.0" 2097 | } 2098 | }, 2099 | "node_modules/run-parallel": { 2100 | "version": "1.2.0", 2101 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2102 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2103 | "dev": true, 2104 | "funding": [ 2105 | { 2106 | "type": "github", 2107 | "url": "https://github.com/sponsors/feross" 2108 | }, 2109 | { 2110 | "type": "patreon", 2111 | "url": "https://www.patreon.com/feross" 2112 | }, 2113 | { 2114 | "type": "consulting", 2115 | "url": "https://feross.org/support" 2116 | } 2117 | ], 2118 | "dependencies": { 2119 | "queue-microtask": "^1.2.2" 2120 | } 2121 | }, 2122 | "node_modules/scheduler": { 2123 | "version": "0.23.0", 2124 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 2125 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 2126 | "dependencies": { 2127 | "loose-envify": "^1.1.0" 2128 | } 2129 | }, 2130 | "node_modules/shallowequal": { 2131 | "version": "1.1.0", 2132 | "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", 2133 | "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" 2134 | }, 2135 | "node_modules/snake-case": { 2136 | "version": "3.0.4", 2137 | "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", 2138 | "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", 2139 | "dependencies": { 2140 | "dot-case": "^3.0.4", 2141 | "tslib": "^2.0.3" 2142 | } 2143 | }, 2144 | "node_modules/snakecase-keys": { 2145 | "version": "5.4.4", 2146 | "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-5.4.4.tgz", 2147 | "integrity": "sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==", 2148 | "dependencies": { 2149 | "map-obj": "^4.1.0", 2150 | "snake-case": "^3.0.4", 2151 | "type-fest": "^2.5.2" 2152 | }, 2153 | "engines": { 2154 | "node": ">=12" 2155 | } 2156 | }, 2157 | "node_modules/source-map-js": { 2158 | "version": "1.0.2", 2159 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2160 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2161 | "engines": { 2162 | "node": ">=0.10.0" 2163 | } 2164 | }, 2165 | "node_modules/streamsearch": { 2166 | "version": "1.1.0", 2167 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 2168 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 2169 | "engines": { 2170 | "node": ">=10.0.0" 2171 | } 2172 | }, 2173 | "node_modules/styled-components": { 2174 | "version": "6.1.0", 2175 | "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.0.tgz", 2176 | "integrity": "sha512-VWNfYYBuXzuLS/QYEeoPgMErP26WL+dX9//rEh80B2mmlS1yRxRxuL5eax4m6ybYEUoHWlTy2XOU32767mlMkg==", 2177 | "dependencies": { 2178 | "@emotion/is-prop-valid": "^1.2.1", 2179 | "@emotion/unitless": "^0.8.0", 2180 | "@types/stylis": "^4.0.2", 2181 | "css-to-react-native": "^3.2.0", 2182 | "csstype": "^3.1.2", 2183 | "postcss": "^8.4.31", 2184 | "shallowequal": "^1.1.0", 2185 | "stylis": "^4.3.0", 2186 | "tslib": "^2.5.0" 2187 | }, 2188 | "engines": { 2189 | "node": ">= 16" 2190 | }, 2191 | "funding": { 2192 | "type": "opencollective", 2193 | "url": "https://opencollective.com/styled-components" 2194 | }, 2195 | "peerDependencies": { 2196 | "react": ">= 16.8.0", 2197 | "react-dom": ">= 16.8.0" 2198 | } 2199 | }, 2200 | "node_modules/styled-jsx": { 2201 | "version": "5.1.1", 2202 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", 2203 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", 2204 | "dependencies": { 2205 | "client-only": "0.0.1" 2206 | }, 2207 | "engines": { 2208 | "node": ">= 12.0.0" 2209 | }, 2210 | "peerDependencies": { 2211 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 2212 | }, 2213 | "peerDependenciesMeta": { 2214 | "@babel/core": { 2215 | "optional": true 2216 | }, 2217 | "babel-plugin-macros": { 2218 | "optional": true 2219 | } 2220 | } 2221 | }, 2222 | "node_modules/stylis": { 2223 | "version": "4.3.0", 2224 | "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", 2225 | "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" 2226 | }, 2227 | "node_modules/sucrase": { 2228 | "version": "3.34.0", 2229 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", 2230 | "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", 2231 | "dev": true, 2232 | "dependencies": { 2233 | "@jridgewell/gen-mapping": "^0.3.2", 2234 | "commander": "^4.0.0", 2235 | "glob": "7.1.6", 2236 | "lines-and-columns": "^1.1.6", 2237 | "mz": "^2.7.0", 2238 | "pirates": "^4.0.1", 2239 | "ts-interface-checker": "^0.1.9" 2240 | }, 2241 | "bin": { 2242 | "sucrase": "bin/sucrase", 2243 | "sucrase-node": "bin/sucrase-node" 2244 | }, 2245 | "engines": { 2246 | "node": ">=8" 2247 | } 2248 | }, 2249 | "node_modules/supports-preserve-symlinks-flag": { 2250 | "version": "1.0.0", 2251 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2252 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2253 | "dev": true, 2254 | "engines": { 2255 | "node": ">= 0.4" 2256 | }, 2257 | "funding": { 2258 | "url": "https://github.com/sponsors/ljharb" 2259 | } 2260 | }, 2261 | "node_modules/swr": { 2262 | "version": "2.2.0", 2263 | "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.0.tgz", 2264 | "integrity": "sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==", 2265 | "dependencies": { 2266 | "use-sync-external-store": "^1.2.0" 2267 | }, 2268 | "peerDependencies": { 2269 | "react": "^16.11.0 || ^17.0.0 || ^18.0.0" 2270 | } 2271 | }, 2272 | "node_modules/tailwindcss": { 2273 | "version": "3.3.3", 2274 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", 2275 | "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", 2276 | "dev": true, 2277 | "dependencies": { 2278 | "@alloc/quick-lru": "^5.2.0", 2279 | "arg": "^5.0.2", 2280 | "chokidar": "^3.5.3", 2281 | "didyoumean": "^1.2.2", 2282 | "dlv": "^1.1.3", 2283 | "fast-glob": "^3.2.12", 2284 | "glob-parent": "^6.0.2", 2285 | "is-glob": "^4.0.3", 2286 | "jiti": "^1.18.2", 2287 | "lilconfig": "^2.1.0", 2288 | "micromatch": "^4.0.5", 2289 | "normalize-path": "^3.0.0", 2290 | "object-hash": "^3.0.0", 2291 | "picocolors": "^1.0.0", 2292 | "postcss": "^8.4.23", 2293 | "postcss-import": "^15.1.0", 2294 | "postcss-js": "^4.0.1", 2295 | "postcss-load-config": "^4.0.1", 2296 | "postcss-nested": "^6.0.1", 2297 | "postcss-selector-parser": "^6.0.11", 2298 | "resolve": "^1.22.2", 2299 | "sucrase": "^3.32.0" 2300 | }, 2301 | "bin": { 2302 | "tailwind": "lib/cli.js", 2303 | "tailwindcss": "lib/cli.js" 2304 | }, 2305 | "engines": { 2306 | "node": ">=14.0.0" 2307 | } 2308 | }, 2309 | "node_modules/thenify": { 2310 | "version": "3.3.1", 2311 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 2312 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 2313 | "dev": true, 2314 | "dependencies": { 2315 | "any-promise": "^1.0.0" 2316 | } 2317 | }, 2318 | "node_modules/thenify-all": { 2319 | "version": "1.6.0", 2320 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 2321 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 2322 | "dev": true, 2323 | "dependencies": { 2324 | "thenify": ">= 3.1.0 < 4" 2325 | }, 2326 | "engines": { 2327 | "node": ">=0.8" 2328 | } 2329 | }, 2330 | "node_modules/to-no-case": { 2331 | "version": "1.0.2", 2332 | "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", 2333 | "integrity": "sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==" 2334 | }, 2335 | "node_modules/to-regex-range": { 2336 | "version": "5.0.1", 2337 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2338 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2339 | "dev": true, 2340 | "dependencies": { 2341 | "is-number": "^7.0.0" 2342 | }, 2343 | "engines": { 2344 | "node": ">=8.0" 2345 | } 2346 | }, 2347 | "node_modules/to-snake-case": { 2348 | "version": "1.0.0", 2349 | "resolved": "https://registry.npmjs.org/to-snake-case/-/to-snake-case-1.0.0.tgz", 2350 | "integrity": "sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ==", 2351 | "dependencies": { 2352 | "to-space-case": "^1.0.0" 2353 | } 2354 | }, 2355 | "node_modules/to-space-case": { 2356 | "version": "1.0.0", 2357 | "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", 2358 | "integrity": "sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==", 2359 | "dependencies": { 2360 | "to-no-case": "^1.0.0" 2361 | } 2362 | }, 2363 | "node_modules/ts-interface-checker": { 2364 | "version": "0.1.13", 2365 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 2366 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 2367 | "dev": true 2368 | }, 2369 | "node_modules/tslib": { 2370 | "version": "2.6.2", 2371 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 2372 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" 2373 | }, 2374 | "node_modules/type-fest": { 2375 | "version": "2.19.0", 2376 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", 2377 | "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", 2378 | "engines": { 2379 | "node": ">=12.20" 2380 | }, 2381 | "funding": { 2382 | "url": "https://github.com/sponsors/sindresorhus" 2383 | } 2384 | }, 2385 | "node_modules/typescript": { 2386 | "version": "5.2.2", 2387 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 2388 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 2389 | "dev": true, 2390 | "bin": { 2391 | "tsc": "bin/tsc", 2392 | "tsserver": "bin/tsserver" 2393 | }, 2394 | "engines": { 2395 | "node": ">=14.17" 2396 | } 2397 | }, 2398 | "node_modules/undici-types": { 2399 | "version": "5.25.3", 2400 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", 2401 | "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" 2402 | }, 2403 | "node_modules/update-browserslist-db": { 2404 | "version": "1.0.13", 2405 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 2406 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 2407 | "dev": true, 2408 | "funding": [ 2409 | { 2410 | "type": "opencollective", 2411 | "url": "https://opencollective.com/browserslist" 2412 | }, 2413 | { 2414 | "type": "tidelift", 2415 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2416 | }, 2417 | { 2418 | "type": "github", 2419 | "url": "https://github.com/sponsors/ai" 2420 | } 2421 | ], 2422 | "dependencies": { 2423 | "escalade": "^3.1.1", 2424 | "picocolors": "^1.0.0" 2425 | }, 2426 | "bin": { 2427 | "update-browserslist-db": "cli.js" 2428 | }, 2429 | "peerDependencies": { 2430 | "browserslist": ">= 4.21.0" 2431 | } 2432 | }, 2433 | "node_modules/use-sync-external-store": { 2434 | "version": "1.2.0", 2435 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", 2436 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", 2437 | "peerDependencies": { 2438 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0" 2439 | } 2440 | }, 2441 | "node_modules/util-deprecate": { 2442 | "version": "1.0.2", 2443 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2444 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2445 | "dev": true 2446 | }, 2447 | "node_modules/uuid": { 2448 | "version": "8.3.2", 2449 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 2450 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 2451 | "peer": true, 2452 | "bin": { 2453 | "uuid": "dist/bin/uuid" 2454 | } 2455 | }, 2456 | "node_modules/watchpack": { 2457 | "version": "2.4.0", 2458 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", 2459 | "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", 2460 | "dependencies": { 2461 | "glob-to-regexp": "^0.4.1", 2462 | "graceful-fs": "^4.1.2" 2463 | }, 2464 | "engines": { 2465 | "node": ">=10.13.0" 2466 | } 2467 | }, 2468 | "node_modules/webcrypto-core": { 2469 | "version": "1.7.7", 2470 | "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.7.tgz", 2471 | "integrity": "sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==", 2472 | "dependencies": { 2473 | "@peculiar/asn1-schema": "^2.3.6", 2474 | "@peculiar/json-schema": "^1.1.12", 2475 | "asn1js": "^3.0.1", 2476 | "pvtsutils": "^1.3.2", 2477 | "tslib": "^2.4.0" 2478 | } 2479 | }, 2480 | "node_modules/wrappy": { 2481 | "version": "1.0.2", 2482 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2483 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2484 | "dev": true 2485 | }, 2486 | "node_modules/yallist": { 2487 | "version": "4.0.0", 2488 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2489 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2490 | "peer": true 2491 | }, 2492 | "node_modules/yaml": { 2493 | "version": "2.3.3", 2494 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", 2495 | "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", 2496 | "dev": true, 2497 | "engines": { 2498 | "node": ">= 14" 2499 | } 2500 | } 2501 | } 2502 | } 2503 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mytasks", 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 | "postinstall": "npx prisma generate" 11 | }, 12 | "dependencies": { 13 | "@clerk/nextjs": "^4.25.6", 14 | "@next-auth/prisma-adapter": "^1.0.7", 15 | "@prisma/client": "^5.4.2", 16 | "axios": "^1.5.1", 17 | "moment": "^2.29.4", 18 | "next": "13.5.6", 19 | "nextjs-toploader": "^1.5.3", 20 | "prisma": "^5.4.2", 21 | "react": "^18", 22 | "react-dom": "^18", 23 | "react-hot-toast": "^2.4.1", 24 | "styled-components": "^6.1.0" 25 | }, 26 | "devDependencies": { 27 | "@types/node": "^20", 28 | "@types/react": "^18", 29 | "@types/react-dom": "^18", 30 | "autoprefixer": "^10", 31 | "postcss": "^8", 32 | "tailwindcss": "^3", 33 | "typescript": "^5" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | // This is your Prisma schema file, 2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 | 4 | generator client { 5 | provider = "prisma-client-js" 6 | } 7 | 8 | datasource db { 9 | provider = "mongodb" 10 | url = env("DATABASE_URL") 11 | } 12 | 13 | 14 | model Task{ 15 | id String @id @default(cuid()) @map("_id") 16 | title String 17 | description String? 18 | date String 19 | isCompleted Boolean @default(false) 20 | isImportant Boolean @default(false) 21 | 22 | createdAt DateTime @default(now()) @map("created_at") 23 | updatedAt DateTime @default(now()) @updatedAt @map("updated_at") 24 | userId String 25 | } -------------------------------------------------------------------------------- /public/avatar1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Maclinz/todoapp_fullstack/86d2980f542bf85f5fc7e28617adb097739aac1e/public/avatar1.png -------------------------------------------------------------------------------- /public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss' 2 | 3 | const config: Config = { 4 | content: [ 5 | './pages/**/*.{js,ts,jsx,tsx,mdx}', 6 | './components/**/*.{js,ts,jsx,tsx,mdx}', 7 | './app/**/*.{js,ts,jsx,tsx,mdx}', 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 13 | 'gradient-conic': 14 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | } 20 | export default config 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | --------------------------------------------------------------------------------