diff --git a/README.md b/README.md index 979c3c5..7b771c4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ CodeQL Analysis

-# [Lucid Creations Media Website](https://lucidcreations.media/) +# [Lucid Creations Media Website](https://new.lucidcreations.media/) ## About diff --git a/example.env b/example.env new file mode 100644 index 0000000..40ef6ec --- /dev/null +++ b/example.env @@ -0,0 +1,17 @@ +# Environment variables declared in this file are automatically made available to Prisma. +# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema + +# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. +# See the documentation for all the connection string options: https://pris.ly/d/connection-strings + +# This is for local/dev. Make sure to update ./prisma/schema.prisma to use the dev config. +DATABASE_URL="postgresql://postgres:randompassword@localhost:5432/dbname?schema=public" + +# These are values from Vercel. Make sure to update ./prisma/schema.prisma to use the vercel config. +POSTGRES_DATABASE="dbname" +POSTGRES_PASSWORD="randompassword" +POSTGRES_HOST="region.postgres.vercel-storage.com" +POSTGRES_USER="postgres" +POSTGRES_PRISMA_URL="postgres://postgres:randompassword@region.postgres.vercel-storage.com/dbname?pgbouncer=true&connect_timeout=15" +POSTGRES_URL_NON_POOLING="postgres://postgres:randompassword@region.postgres.vercel-storage.com/dbname" +POSTGRES_URL="postgres://postgres:randompassword@region.postgres.vercel-storage.com/dbname" \ No newline at end of file diff --git a/example.env.development b/example.env.development new file mode 100644 index 0000000..e69de29 diff --git a/example.env.local b/example.env.local new file mode 100644 index 0000000..cafda3b --- /dev/null +++ b/example.env.local @@ -0,0 +1,14 @@ +# This section is only applicable during the beta and will be removed when the app is completed. +NEXT_PUBLIC_APP_VERSION="0.2.0" + +# Auth Secrets +NEXTAUTH_URL=http://localhost:3000 +NEXTAUTH_SECRET="" +# Used when sending emails to users +EMAIL_SERVER_USER="" +EMAIL_SERVER_PASSWORD="" +SMTP_SERVER_HOST="" +SMTP_SERVER_PORT="" +EMAIL_FROM="" +GOOGLE_ID="" +GOOGLE_SECRET="" \ No newline at end of file diff --git a/package.json b/package.json index 63b8563..8ed1094 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "private": true, "name": "lucid-creations-website", "homepage": "https://new.lucidcreations.media/", - "version": "0.0.2", + "version": "0.0.1", "author": { "name": "Lucid Creations Media", "url": "https://lucidcreations.media", @@ -17,33 +17,38 @@ }, "dependencies": { "@chakra-ui/react": "^2.8.2", - "@emotion/react": "^11.11.3", + "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.0", + "@fontsource/anonymous-pro": "^5.0.12", + "@fontsource/anybody": "^5.0.19", + "@fontsource/kalam": "^5.0.12", + "@fontsource/montserrat": "^5.0.17", + "@fontsource/tilt-neon": "^5.0.4", "@iconify/react": "^4.1.1", "@reduxjs/toolkit": "^2.2.1", - "date-fns": "^3.3.1", + "date-fns": "^3.5.0", "formik": "^2.4.5", - "framer-motion": "^11.0.6", - "next": "14.1.0", + "framer-motion": "^11.0.14", + "next": "14.1.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^9.1.0", "sharp": "^0.33.2" }, "devDependencies": { - "@types/node": "^20.11.20", - "@types/react": "^18.2.58", + "@types/node": "^20.11.28", + "@types/react": "^18.2.66", "@types/react-redux": "^7.1.33", - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", "eslint": "^8.57.0", "eslint-config-next": "<13.4.9", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^3.2.5", - "typescript": "^5.3.3" + "typescript": "^5.4.2" }, "packageManager": "yarn@4.1.0" } diff --git a/public/images/logo.png b/public/images/logo.png index 1009fd0..d6ad411 100644 Binary files a/public/images/logo.png and b/public/images/logo.png differ diff --git a/public/images/logo.svg b/public/images/logo.svg index 295413e..84cfb1a 100644 --- a/public/images/logo.svg +++ b/public/images/logo.svg @@ -1 +1,212 @@ - \ No newline at end of file + + + + diff --git a/src/components/buttons/Custom.tsx b/src/components/buttons/Custom.tsx index b96adae..af13ec8 100644 --- a/src/components/buttons/Custom.tsx +++ b/src/components/buttons/Custom.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Box, Link, Button, BoxProps } from "@chakra-ui/react"; +import { Box, Link, Button, BoxProps, Text } from "@chakra-ui/react"; import { motion } from "framer-motion"; interface CustomButtonProps { @@ -14,7 +14,9 @@ const CustomButton = ({ text, link, type }: CustomButtonProps): JSX.Element => { return ( - + ); diff --git a/src/components/buttons/KoFi.tsx b/src/components/buttons/KoFi.tsx index 82b596d..aff4415 100644 --- a/src/components/buttons/KoFi.tsx +++ b/src/components/buttons/KoFi.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Box, Link, Button, BoxProps } from "@chakra-ui/react"; +import { Box, Link, Button, BoxProps, Text } from "@chakra-ui/react"; import { Icon } from "@iconify/react"; import { motion } from "framer-motion"; @@ -14,7 +14,7 @@ const KoFi = (): JSX.Element => { rel="noopener" > diff --git a/src/components/buttons/data/links.ts b/src/components/buttons/data/links.ts index 834cea3..9835682 100644 --- a/src/components/buttons/data/links.ts +++ b/src/components/buttons/data/links.ts @@ -8,18 +8,13 @@ type Links = LinkObj[]; const links: Links = [ { - href: "https://docs.google.com/document/d/1hrerGKHTO3iach8A-CabtfIB4lyZWlgO8EGTyOCrI2Y", + href: "https://docs.google.com/document/d/1y1tbTG6TYoLMEde4XHzInByyHQ0T6Aw2RF6Y4Z7Yabs", name: "Roadmap and Progress", type: "secondary" }, - { - href: "https://lucidcreations.media/lcm-potty-chart/", - name: "Official Announcement", - type: "secondary" - }, - { - type: "ko-fi" - }, + // { + // type: "ko-fi" + // }, { href: "https://t.me/LucidCreationsMedia", name: "Dev Updates", diff --git a/src/components/calender/CalenderNav.tsx b/src/components/calender/CalenderNav.tsx deleted file mode 100644 index 94a46e9..0000000 --- a/src/components/calender/CalenderNav.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from "react"; -import { useAppSelector } from "../../redux/hooks"; -import { useRouter } from "next/router"; -import { HStack, IconButton } from "@chakra-ui/react"; -import { Icon } from "@iconify/react"; -import { format, isSameMonth, addMonths, subMonths } from "date-fns"; -import findValidDateRange from "../../../lib/findValidDateRange"; -import DatePicker from "./DatePicker"; - -interface CalenderNavProps { - isLoading: boolean; - title: string; -} - -/** - * @param {boolean} isLoading is the component loading? - * @param {string} title the title for the current date. - */ - -const CalenderNav = ({ title, isLoading }: CalenderNavProps): JSX.Element => { - const selectedDate = useAppSelector( - (state) => state.calender.selectedDateInfo - ); - const { date } = selectedDate; - - const selectedDateObj = new Date(date); - - const validDateRange = findValidDateRange(); - const { start: validStart, end: validEnd } = validDateRange; - - const router = useRouter(); - - const handleNavButtons = (direction: "next" | "prev") => { - if (direction === "next") { - const newMonth = addMonths(selectedDateObj, 1); - - const year = format(newMonth, "y"); - const month = format(newMonth, "L"); - - router.push(`/calendar/${year}/${month}`); - } else if (direction === "prev") { - const newMonth = subMonths(selectedDateObj, 1); - - const year = format(newMonth, "y"); - const month = format(newMonth, "L"); - - router.push(`/calendar/${year}/${month}`); - } - }; - - return ( - - } - onClick={() => handleNavButtons("prev")} - /> - - } - onClick={() => handleNavButtons("next")} - /> - - ); -}; - -export default CalenderNav; diff --git a/src/components/calender/DatePicker.tsx b/src/components/calender/DatePicker.tsx deleted file mode 100644 index 459a852..0000000 --- a/src/components/calender/DatePicker.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import React, { useRef, useState } from "react"; -import { useRouter } from "next/router"; -import { - Button, - FormControl, - FormErrorMessage, - FormLabel, - Heading, - HStack, - Input, - Popover, - PopoverBody, - PopoverCloseButton, - PopoverContent, - PopoverHeader, - PopoverTrigger, - Skeleton, - VStack -} from "@chakra-ui/react"; -import { - Formik, - // FormikHelpers, - FormikProps, - Form, - Field, - FieldProps -} from "formik"; -import { format } from "date-fns"; -import findValidDateRange from "../../../lib/findValidDateRange"; -import FormValidateEmoji from "./FormValidateEmoji"; - -interface DatePickerProps { - isLoading: boolean; - title: string; -} - -/** - * @param {boolean} isLoading is the component loading? - * @param {string} title the title for the current date. - */ - -const DatePicker = ({ title, isLoading }: DatePickerProps): JSX.Element => { - const router = useRouter(); - - const [valid, setValid] = useState(false); - - const validDateRange = findValidDateRange(); - - const validateDate = ( - dateString?: string | undefined - ): string | undefined => { - let dateError; - - if (dateString) { - const dateArr = dateString.split("-"); - if (dateArr.length !== 3) { - dateError = "Please select a date."; - setValid(false); - } else if (dateArr.length === 3) { - const date: UpdateCalenderPropsDateLayout = { - year: parseInt(dateArr[0]), - month: parseInt(dateArr[1]), - day: parseInt(dateArr[2]) - }; - - if (!/^(19|20)\d{2}$/.test(`${date.year}`)) { - dateError = "Please use a year between 1900 and 2099"; - setValid(false); - } - - if (date.month < 1 || date.month > 12) { - dateError = "Please use a month between 1 and 12"; - setValid(false); - } - - if (date.day < 1 || date.day > 31) { - dateError = "Please use a day between 1 and 31"; - setValid(false); - } - - setValid(true); - } else { - setValid(true); - } - } else if (dateString.length === 0) { - dateError = "Please select a date."; - setValid(false); - } else { - setValid(true); - } - - return dateError; - }; - - const handleSubmit = (formInput?: { date?: string }): Promise => { - return new Promise((resolve, reject) => { - if (formInput.date) { - if (!validateDate(formInput.date)) { - const dateArr = formInput.date.split("-"); - const date: UpdateCalenderPropsDateLayout = { - year: parseInt(dateArr[0]), - month: parseInt(dateArr[1]), - day: parseInt(dateArr[2]) - }; - - return resolve(router.push(`/calendar/${date.year}/${date.month}`)); - } else { - return reject("Error validating date."); - } - } else { - return reject("Date not provided."); - } - }); - }; - - // Field theme - const fieldTheme = { - width: "auto", - bg: "gray.900", - borderColor: "white", - _placeholder: { - color: "white" - }, - _focus: { - bg: "#000", - color: "#FFF", - borderColor: "#63b3ed", - boxShadow: "0 0 0 1px #63b3ed", - zIndex: "1" - } - }; - - const initRef = useRef(); - - return ( - - - - - - - - {"Choose a Date"} - - - - - { - handleSubmit(data) - .then(() => { - actions.setSubmitting(false); - actions.resetForm({ - values: { - date: "" - } - }); - }) - .catch(() => { - actions.setSubmitting(false); - }); - }} - > - {( - formProps: FormikProps<{ - date: string; - }> - ) => ( -
- - - {"Required fields indicated with"} - - - - {({ field, form }: FieldProps) => ( - - - - - {"Date:"} - - - {!form.touched.date && ( - - )} - {form.errors.name && form.touched.date && ( - - )} - {!form.errors.name && form.touched.date && ( - - )} - - - {typeof form.errors.date === "string" && - form.errors.date} - - - - )} - - - -
- )} -
-
-
-
- ); -}; - -export default DatePicker; diff --git a/src/components/calender/Day.tsx b/src/components/calender/Day.tsx deleted file mode 100644 index b5e5245..0000000 --- a/src/components/calender/Day.tsx +++ /dev/null @@ -1,262 +0,0 @@ -import React, { useState } from "react"; -import { Provider } from "react-redux"; -import { store } from "../../redux/store"; -import { Box, Skeleton, VStack } from "@chakra-ui/react"; -import { - add, - getYear, - getMonth, - sub, - getDate, - isBefore, - endOfDay, - isToday as isTodayFun -} from "date-fns"; -import router from "next/router"; -import AddUpdateSticker from "./modals/AddUpdateSticker"; -import DemoStickers from "./stickers/DemoStickers"; - -interface DayProps { - isLoading: boolean; - isOverflow?: boolean; - overflowDirection?: "next" | "prev" | null; - currSticker: StickerVal; - date: string; - selectedDate: string; - currDate: Date; - tutorial?: "add" | "edit"; -} - -/** - * The individual days in the calender component. - * @param {boolean} isLoading is the component loading? - * @param {boolean} isOverflow is the current date being given before or after the current month. - * @param {"next" | "prev" | null} overflowDirection the direction the overflow is. This will navigate the calender forward or backwards 1 month. - * @param {StickerVal} currSticker the sticker for this date. - * @param {date} date the date for this day. - * @param {date} selectedDate the date for the selected month. - * @param {Date} currDate today's date. - */ -const Day = ({ - isLoading, - isOverflow, - overflowDirection, - currSticker, - date, - selectedDate, - currDate, - tutorial -}: DayProps): JSX.Element => { - const selectedDateObj = new Date(selectedDate); - const currDateObj = new Date(date); - const isToday = isTodayFun(currDateObj); - - const handleNav = (direction: "next" | "prev") => { - if (direction === "next") { - console.log(overflowDirection); - const newMonth = add(selectedDateObj, { months: 1 }); - - const year = getYear(newMonth); - const month = getMonth(newMonth) + 1; - - router.push(`/calendar/${year}/${month}`); - } else if (direction === "prev") { - const newMonth = sub(selectedDateObj, { months: 1 }); - - const year = getYear(newMonth); - const month = getMonth(newMonth) + 1; - - router.push(`/calendar/${year}/${month}`); - } - }; - - // This handles the modal for the day. - const [isOpen, setIsOpen] = useState(false); - - // The step the modal is at. - const [step, setStep] = useState(0); - - // The current selected sticker. (To be added or updated) - const [selectedSticker, setSelectedSticker] = useState(null); - - /** - * TODO: Add logic to remove the onClick within overflow dates. - * Do not give dates for the next month an onClick. - * Do not give dates in the past an onClick there is nothing before that month. - * (Creation date of a chart) - */ - - // TODO: When the valid date range is created, disallow pointer cursor outside of the date range. - - return isOverflow ? ( - - selectedSticker !== null ? handleNav(overflowDirection) : "" - } - spacing="0.5rem" - alignContent="center" - justifyContent="flex-start" - > - - {`${getDate(currDateObj)}`} - - {isLoading ? ( - - - - - - ) : ( - - - - )} - - ) : ( - { - setStep(0); - setSelectedSticker(null); - setIsOpen(true); - }} - alignContent="center" - justifyContent="flex-start" - pt={2} - _hover={{ - cursor: isBefore(currDateObj, endOfDay(currDate)) - ? "pointer" - : "default", - bg: tutorial - ? tutorial === "add" && isToday - ? "gray.600" - : tutorial === "edit" && - !isToday && - isBefore(currDateObj, endOfDay(currDate)) - ? "gray.600" - : "transparent" - : "transparent", - border: "1px solid #FFF" - }} - > - {isToday ? ( - - {`${getDate(currDateObj)}`} - - ) : ( - - {`${getDate(currDateObj)}`} - - )} - {isLoading ? ( - - - - - - ) : ( - - - - )} - {tutorial ? ( - - {tutorial.toLowerCase() === "add" && isToday && !isLoading && ( - - )} - {tutorial.toLowerCase() === "edit" && - !isToday && - isBefore(currDateObj, endOfDay(currDate)) && - !isLoading && ( - - )} - - ) : ( - - {isBefore(currDateObj, endOfDay(currDate)) && !isLoading && ( - - )} - - )} - - ); -}; - -export default Day; diff --git a/src/components/calender/FormValidateEmoji.tsx b/src/components/calender/FormValidateEmoji.tsx deleted file mode 100644 index a231114..0000000 --- a/src/components/calender/FormValidateEmoji.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { FC } from "react"; - -interface FormValidateEmojiProps { - type: string; -} - -const FormValidateEmoji: FC = ({ - type -}: FormValidateEmojiProps) => { - interface Validations { - [key: string]: JSX.Element; - } - - const validations: Validations = { - Required: ( - - ❗ - - ), - Error: ( - - ❌ - - ), - Valid: ( - - ✔ - - ) - }; - - return validations[`${type}`]; -}; - -export default FormValidateEmoji; diff --git a/src/components/calender/index.tsx b/src/components/calender/index.tsx deleted file mode 100644 index 01f9dda..0000000 --- a/src/components/calender/index.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React, { useEffect } from "react"; -import { useAppDispatch, useAppSelector } from "../../redux/hooks"; -import { updateCurrDate, updateMonth } from "../../features/calender"; -import { Box, HStack, SimpleGrid, Text, VStack } from "@chakra-ui/react"; -import { isSameDay, format } from "date-fns"; -import CalenderNav from "./CalenderNav"; -import Day from "./Day"; - -const Calender = ({ - date: newDate, - isLoading -}: UpdateCalendarProps): JSX.Element => { - const dispatch = useAppDispatch(); - - // * Month * // - const currDate: string = useAppSelector((state) => state.calender.currDate); - const selectedDate: SelectedDateInfo = useAppSelector( - (state) => state.calender.selectedDateInfo - ); - const { layout, title, date: currentSelectedDateStr } = selectedDate; - - const currDateObj = new Date(currDate); - - // * Stickers * // - - const stickersMonth: StickerDays = useAppSelector( - (state) => state.stickers.stickersMonth - ); - - useEffect(() => { - if (newDate && newDate.year && newDate.month && newDate.day) { - const { year, month, day } = newDate; - - if (year > 0 && month > 0 && day > 0) { - const generatedDate: Date = new Date(year, month - 1, day); - const currSelectedDateObj = new Date(currentSelectedDateStr); - const dateString: string = generatedDate.toJSON(); - - if (!isSameDay(currSelectedDateObj, generatedDate)) { - dispatch(updateMonth(dateString)); - } - } else { - console.warn("Invalid date format: ", newDate); - } - } - }, [currentSelectedDateStr, dispatch, newDate]); - - useEffect(() => { - // console.info("Check to update date."); - - const currDateObj = new Date(currDate); - - if (!isSameDay(currDateObj, new Date())) { - // console.info("Updated date."); - dispatch(updateCurrDate()); - } - }, [currDate, dispatch]); - - // Simulated user settings. - const userSettings = { - theme: "default", - startOfWeek: "Sunday" - }; - - const currMonth: WeekLayout = - layout[`${userSettings.startOfWeek.toLowerCase()}`]; - const { month, weekdays } = currMonth; - - // TODO: Move the weekdays into it's own component for responsiveness. - - return ( - - - - - {weekdays.map((weekDay) => { - return ( - - - {weekDay} - - - {weekDay.substring(0, 3)} - - - {weekDay.substring(0, 2)} - - - ); - })} - - - {Object.keys(month).map((week) => { - const thisWeek = month[week]; - - return thisWeek.map((day: MonthDay) => { - const { date, isOverflow, overflowDirection } = day; - - const toDateObj: Date = new Date(date); - - let sticker = null; - - let id = ""; - - stickersMonth.map((stickerDay) => { - const { date: stickerDate } = stickerDay; - - if (isSameDay(new Date(stickerDate), toDateObj)) { - sticker = stickerDay.sticker; - - id = stickerDay.id; - } - }); - - return ( - - ); - }); - })} - - - - ); -}; - -export default Calender; diff --git a/src/components/calender/modals/AddUpdateSticker.tsx b/src/components/calender/modals/AddUpdateSticker.tsx deleted file mode 100644 index 60f2146..0000000 --- a/src/components/calender/modals/AddUpdateSticker.tsx +++ /dev/null @@ -1,271 +0,0 @@ -import React, { useState, useRef } from "react"; -import { useAppDispatch } from "../../../redux/hooks"; -import { addEditSticker } from "../../../features/calender/stickers"; -import { - Button, - Modal, - ModalOverlay, - ModalContent, - ModalHeader, - ModalBody, - ModalFooter, - Heading, - HStack, - Text, - VStack, - SimpleGrid, - Box -} from "@chakra-ui/react"; -import { format, isSameDay } from "date-fns"; -import { Icon } from "@iconify/react"; -import StickerSelector from "./StickerSelector"; -import DemoStickers from "../stickers/DemoStickers"; - -interface AddStickerProps { - isOpen: boolean; - updateIsOpen: React.Dispatch>; - stickerDate: string; - currSticker: StickerVal; - step: number; - updateStep: React.Dispatch>; - selectedSticker: StickerVal; - updateSelectedSticker: React.Dispatch>; - currDate: Date; -} - -/** - * Handles adding and modifying the stickers for the given month. - * @param {boolean} isOpen Tells the component when the modal should be open. - * @param {React.Dispatch>} updateIsOpen Used to close the modal. - * @param {date} stickerDate The date for which the sticker will be added or modified. - * @param {StickerVal} currSticker The current sticker for the date. - * @param {number} step A numerical variable that represents the page the modal should be at. - * @param {React.Dispatch>} updateStep Used to navigate the pages of the modal by updating the step the modal is on. - * @param {StickerVal} selectedSticker the value of the selected sticker. - * @param {React.Dispatch>} updateSelectedSticker The react state function to update the selected sticker that will be added or updated. - * @param {Date} currDate the current date. - */ -const AddUpdateSticker = ({ - isOpen, - updateIsOpen, - stickerDate, - currSticker, - step, - updateStep, - selectedSticker, - updateSelectedSticker, - currDate -}: AddStickerProps): JSX.Element => { - const dispatch = useAppDispatch(); - const stickerDateObj = new Date(stickerDate); - - const [modalVariant] = useState<"add" | "edit">( - isSameDay(stickerDateObj, currDate) ? "add" : "edit" - ); - - const handleClose = () => { - updateIsOpen(false); - }; - - // TODO: Validate that the provided sticker is not the current sticker. Throw an error if the same sticker is attempted. - const handleSubmit = (sticker: StickerVal) => { - dispatch(addEditSticker({ stickerDate, sticker })); - handleClose(); - }; - - // The first sticker to have focus when the modal opens. - const initialRef = useRef(); - - // * Double check that the submit button is disabled if the selected sticker is the same as the current sticker. - - const variants = { - add: [ - { - header: `Which sticker did you earn for ${format( - stickerDateObj, - "LLL d, y" - )}?`, - body: ( - - - {"Select a sticker"} - - - - ), - footer: ( - - ) - } - ], - edit: [ - { - header: `Which sticker did you want to update for ${format( - stickerDateObj, - "LLL d, y" - )}?`, - body: ( - - - {"Current Sticker"} - - - - - - {"Select your new sticker"} - - - - ), - footer: ( - - ) - }, - { - header: `Are you sure you want to change the sticker for ${format( - stickerDateObj, - "M/d/y" - )}?`, - body: ( - - - {"Previous Sticker"} - - - - {"New Sticker"} - - - - - - - - - - - - ), - footer: ( - - - - - - - - ) - } - ] - }; - - return ( - handleClose()} - motionPreset="slideInBottom" - scrollBehavior="inside" - size={modalVariant === "add" ? "xl" : "2xl"} - > - - - - - - {modalVariant && variants[modalVariant][step].header} - - - - - - {modalVariant && variants[modalVariant][step].body} - - - {modalVariant && variants[modalVariant][step].footer} - - - - ); -}; - -export default AddUpdateSticker; diff --git a/src/components/calender/modals/StickerSelector.tsx b/src/components/calender/modals/StickerSelector.tsx deleted file mode 100644 index 63b5199..0000000 --- a/src/components/calender/modals/StickerSelector.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { HStack, Button } from "@chakra-ui/react"; -import React from "react"; -import DemoStickers from "../stickers/DemoStickers"; - -interface StickerSelectorProps { - stickerSet: "Demo"; - currSticker: StickerVal; - selectedSticker: StickerVal; - updateSelectedSticker: React.Dispatch>; - initialSticker: React.MutableRefObject; -} - -/** - * Handles displaying a list of dynamic stickers to be selected. - * @param {string} stickerSet The name of the stickers that should be displayed. - * @param {StickerVal} currSticker The current sticker for the date. - * @param {StickerVal} selectedSticker The selected sticker for the current. date - * @param {React.Dispatch>} updateSelectedSticker TThe react state function to update the selected sticker that will be added or updated. - * @param {React.MutableRefObject} initialSticker the sticker that should have be in focus when the modal opens. - */ - -const StickerSelector = ({ - stickerSet, - currSticker, - selectedSticker, - updateSelectedSticker, - initialSticker -}: StickerSelectorProps): JSX.Element => { - const stickers = { - Demo: ( - - - - - - ) - }; - - return stickers[stickerSet]; -}; - -export default StickerSelector; diff --git a/src/components/calender/stickers/DemoStickers.tsx b/src/components/calender/stickers/DemoStickers.tsx deleted file mode 100644 index e7d60f3..0000000 --- a/src/components/calender/stickers/DemoStickers.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, { FC } from "react"; - -// TODO: When themes are made import the theme from user settings store. Refactor to use whatever those SVGs are. - -interface DemoStickersProps { - stickerVal: StickerVal; -} - -const DemoStickers: FC = ({ - stickerVal -}: DemoStickersProps) => { - // If sticker is null return an empty space. - if (stickerVal === null) { - return  ; - } - - interface StickerToEmoji { - [key: string]: JSX.Element; - } - - /** - * ? Temporarily using values -1 to 1. - * ? In the full app the values will be between -2 and 2. - */ - let key = "0"; - - if (stickerVal > 0) { - key = "1"; - } else if (stickerVal < 0) { - key = "-1"; - } - - // Link value to an emoji representing a sticker. - const stickerToEmoji: StickerToEmoji = { - "1": ( - - ☀️ - - ), - "0": ( - - ☁️ - - ), - "-1": ( - - 🌧️ - - ) - }; - - // Return the appropriate sticker. - return stickerToEmoji[`${key}`]; -}; - -export default DemoStickers; diff --git a/src/components/hero/AboutProject.tsx b/src/components/hero/AboutProject.tsx new file mode 100644 index 0000000..08bffca --- /dev/null +++ b/src/components/hero/AboutProject.tsx @@ -0,0 +1,27 @@ +import { Button, Heading, Text, Link, VStack } from "@chakra-ui/react"; +import React from "react"; + +const AboutProject = (): JSX.Element => { + const description = `This project and website is a replacement for the current Lucid Creations Media Website. It is going to being designed to be faster, more user friendly, and better accessible compared to Wordpress. This platform is being built on React and Next.js`; + + return ( + + {"About This Website"} + {description} + + + + + ); +}; + +export default AboutProject; diff --git a/src/components/hero/WhatIMakeBanner.tsx b/src/components/hero/WhatIMakeBanner.tsx new file mode 100644 index 0000000..a4db451 --- /dev/null +++ b/src/components/hero/WhatIMakeBanner.tsx @@ -0,0 +1,82 @@ +import React from "react"; +import { Flex, HStack, Text, VStack } from "@chakra-ui/react"; +import BrandText from "../../theme/components/BrandText"; +import { Icon } from "@iconify/react"; + +const WhatIMakeBanner = (): JSX.Element => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default WhatIMakeBanner; diff --git a/src/components/hero/index.tsx b/src/components/hero/index.tsx new file mode 100644 index 0000000..2086484 --- /dev/null +++ b/src/components/hero/index.tsx @@ -0,0 +1,32 @@ +import { Heading, VStack } from "@chakra-ui/react"; +import React from "react"; +import WhatIMakeBanner from "./WhatIMakeBanner"; +import AboutProject from "./AboutProject"; + +const TempHero = (): JSX.Element => { + return ( + + + + + + {"Placeholder section"} + + + + ); +}; + +export default TempHero; diff --git a/src/components/tutorial/CalenderExample.tsx b/src/components/tutorial/CalenderExample.tsx deleted file mode 100644 index 3c8531d..0000000 --- a/src/components/tutorial/CalenderExample.tsx +++ /dev/null @@ -1,210 +0,0 @@ -import React, { useEffect } from "react"; -import { useAppDispatch, useAppSelector } from "../../redux/hooks"; -import { updateMonth } from "../../features/calender"; -import { Box, HStack, SimpleGrid, Text, VStack } from "@chakra-ui/react"; -import { format, isSameDay, isToday } from "date-fns"; -import Day from "../calender/Day"; -import { setCurrentWeek } from "../../features/tutorial"; - -interface CalenderExampleProps { - type: "add" | "edit"; - isLoading: boolean; -} - -const CalenderExample = ({ - type, - isLoading -}: CalenderExampleProps): JSX.Element => { - // TODO: Check if the current date is the start of the user's preferred start of the week and use the previous week for the edit example. - - const currDateStr: string = useAppSelector( - (state) => state.calender.currDate - ); - const currDateObj: Date = new Date(currDateStr); - - const dispatch = useAppDispatch(); - - // * Current Month * // - const selectedDate: SelectedDateInfo = useAppSelector( - (state) => state.calender.selectedDateInfo - ); - const { layout, date: currSelectedDateStr } = selectedDate; - - // * Stickers * // - const stickersMonth: StickerDays = useAppSelector( - (state) => state.stickers.stickersMonth - ); - - // Simulated user settings. - const userSettings = { - theme: "default", - startOfWeek: "Sunday" - }; - - // * Week Names * // - const currMonth: WeekLayout = - layout[`${userSettings.startOfWeek.toLowerCase()}`]; - const { month, weekdays } = currMonth; - - useEffect(() => { - const currDateObj: Date = new Date(currDateStr); - const currSelectedDateOj: Date = new Date(currSelectedDateStr); - - if (!isSameDay(currDateObj, currSelectedDateOj)) { - dispatch(updateMonth(currDateObj.toJSON())); - } - }, [currDateStr, currSelectedDateStr, dispatch]); - - // * The current week * // - const currWeek = useAppSelector((state) => state.tutorial.currWeek); - - useEffect(() => { - const getCurrentWeek = (): MonthDay[] => { - let foundWeek: MonthDay[]; - - for (const week in month) { - const currWeek = month[week]; - - currWeek.forEach((day: MonthDay) => { - const { date } = day; - - if (isToday(new Date(date))) { - foundWeek = currWeek; - } - }); - } - - return foundWeek || ([] as MonthDay[]); - }; - - if (currWeek === null) { - dispatch(setCurrentWeek(getCurrentWeek())); - } - }, [currWeek, dispatch, month]); - - return ( - - - - {weekdays.map((weekDay) => { - return ( - - - {weekDay} - - - {weekDay.substring(0, 3)} - - - {weekDay.substring(0, 2)} - - - ); - })} - - - {currWeek && - currWeek.map((day: MonthDay) => { - const { date, isOverflow, overflowDirection } = day; - - const toDateObj: Date = new Date(date); - - let sticker = null; - - let id = ""; - - stickersMonth.map((stickerDay) => { - const { date: stickerDate } = stickerDay; - - if (isSameDay(new Date(stickerDate), toDateObj)) { - sticker = stickerDay.sticker; - - id = stickerDay.id; - } - }); - - return ( - - ); - })} - - - {type === "edit" && ( - - - { - "Not being able to edit within this tutorial when the current date is the start of the week or month is a known bug." - } - - - {"This bug will be fixed in beta v2."} - - - {"You can skip the tutorial and try again tomorrow."} - - - )} - - ); -}; - -export default CalenderExample; diff --git a/src/components/tutorial/data/aboutApp.ts b/src/components/tutorial/data/aboutApp.ts deleted file mode 100644 index e6fcd35..0000000 --- a/src/components/tutorial/data/aboutApp.ts +++ /dev/null @@ -1,10 +0,0 @@ -type AboutApp = string[]; - -const aboutApp: AboutApp = [ - "The Potty Chart is an app that mimics a potty/star chart commonly used while potty training toddler or child.", - "The app can be used to track behavior, habits, diaper training, potty training (good luck), daily chores/tasks, or anything else you might want to track in a fun and visual way with colorful themes, stickers, and even receive encouraging messaged from your big/dom, followers, and friends.", - "The final app will have settings to disable any mentions and references of ABDL to allow a more general audience to use, such as for a master and pet relationship.", - "This is a beta build of the app. Some functionality may not work as intended, is not fully functional, and may be missing entirely." -]; - -export default aboutApp; diff --git a/src/components/tutorial/data/appFunctionality.ts b/src/components/tutorial/data/appFunctionality.ts deleted file mode 100644 index 9c62325..0000000 --- a/src/components/tutorial/data/appFunctionality.ts +++ /dev/null @@ -1,9 +0,0 @@ -type AppFunctionality = string[]; - -const appFunctionality: AppFunctionality = [ - "The app will generate stickers to display from the 1st of the month to the day before today. This is to simulate previous and continued use.", - "Ability to add a sticker to the current date.", - "Ability to add edit a sticker from a previous date with a confirmation prompt." -]; - -export default appFunctionality; diff --git a/src/components/tutorial/index.tsx b/src/components/tutorial/index.tsx deleted file mode 100644 index 3ad41b0..0000000 --- a/src/components/tutorial/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from "react"; -import { VStack } from "@chakra-ui/react"; -import TutorialCalender from "./sections/TutorialCalender"; -import TutorialLinks from "./sections/TutorialLinks"; -import TutorialHeading from "./sections/TutorialHeading"; -import TutorialAboutApp from "./sections/TutorialAboutApp"; -import TutorialSubmitButtons from "./sections/TutorialSubmitButtons"; -import TutorialAppFunctionality from "./sections/TutorialAppFunctionality"; - -interface TutorialProps { - isLoading: boolean; -} - -const Tutorial = ({ isLoading }: TutorialProps): JSX.Element => { - return ( - - - - - - - - - ); -}; - -export default Tutorial; diff --git a/src/components/tutorial/sections/TutorialAboutApp.tsx b/src/components/tutorial/sections/TutorialAboutApp.tsx deleted file mode 100644 index 5017de0..0000000 --- a/src/components/tutorial/sections/TutorialAboutApp.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from "react"; -import { VStack, Heading, Divider, Text } from "@chakra-ui/react"; -import aboutApp from "../data/aboutApp"; - -const TutorialAboutApp = (): JSX.Element => { - return ( - - - {"About the App"} - - - {aboutApp.map((string: string) => { - return {string}; - })} - - - - ); -}; - -export default TutorialAboutApp; diff --git a/src/components/tutorial/sections/TutorialAppFunctionality.tsx b/src/components/tutorial/sections/TutorialAppFunctionality.tsx deleted file mode 100644 index c4f5b1c..0000000 --- a/src/components/tutorial/sections/TutorialAppFunctionality.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from "react"; -import { VStack, Heading, Divider, Text } from "@chakra-ui/react"; -import appFunctionality from "../data/appFunctionality"; - -const TutorialAppFunctionality = (): JSX.Element => { - return ( - - - {"App Functionality"} - - - {appFunctionality.map((string: string) => { - return {string}; - })} - - - - ); -}; - -export default TutorialAppFunctionality; diff --git a/src/components/tutorial/sections/TutorialCalender.tsx b/src/components/tutorial/sections/TutorialCalender.tsx deleted file mode 100644 index 4a110e7..0000000 --- a/src/components/tutorial/sections/TutorialCalender.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import React from "react"; -import { Divider, Heading, HStack, Text, VStack } from "@chakra-ui/react"; -import CalenderExample from "../CalenderExample"; - -interface CalenderExampleProps { - isLoading: boolean; -} - -const TutorialCalender = ({ isLoading }: CalenderExampleProps): JSX.Element => { - return ( - - - {"How to Use The Calender"} - - - - {"Add a Sticker to Today's Date"} - - - {"Select the date with the"} - {" green "} - {"border."} - - - - - - {"Add a Sticker to Previous Dates"} - - - {"Select a date with a"} - {" green "} - {"border."} - - - - - - ); -}; - -export default TutorialCalender; diff --git a/src/components/tutorial/sections/TutorialHeading.tsx b/src/components/tutorial/sections/TutorialHeading.tsx deleted file mode 100644 index 852f065..0000000 --- a/src/components/tutorial/sections/TutorialHeading.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; -import { VStack, Heading, Divider } from "@chakra-ui/react"; - -const TutorialHeading = (): JSX.Element => { - return ( - - {"Welcome to Code Name: LCM Potty Chart"} - - {"A Lucid Creations Media Project"} - - - - ); -}; - -export default TutorialHeading; diff --git a/src/components/tutorial/sections/TutorialLinks.tsx b/src/components/tutorial/sections/TutorialLinks.tsx deleted file mode 100644 index a0cb1a0..0000000 --- a/src/components/tutorial/sections/TutorialLinks.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from "react"; -import { Divider, Heading, VStack } from "@chakra-ui/react"; -import Buttons from "../../buttons"; - -const TutorialLinks = (): JSX.Element => { - return ( - - - {"More Info"} - - - - - ); -}; - -export default TutorialLinks; diff --git a/src/components/tutorial/sections/TutorialSubmitButtons.tsx b/src/components/tutorial/sections/TutorialSubmitButtons.tsx deleted file mode 100644 index 4c619d4..0000000 --- a/src/components/tutorial/sections/TutorialSubmitButtons.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { HStack, Button, VStack, Checkbox } from "@chakra-ui/react"; -import React from "react"; -import { useAppDispatch, useAppSelector } from "../../../redux/hooks"; -import { - setTutorialCompleted, - setTempTutorialComplete, - toggleRememberCompleted -} from "../../../features/tutorial"; - -interface TutorialSubmitButtonsProps { - isLoading: boolean; -} - -const TutorialSubmitButtons = ({ - isLoading -}: TutorialSubmitButtonsProps): JSX.Element => { - const rememberComplete: boolean = useAppSelector( - (state) => state.tutorial.rememberCompleted - ); - const dispatch = useAppDispatch(); - - const handleComplete = (): void => { - if (rememberComplete) { - dispatch(setTutorialCompleted()); - } - - if (!rememberComplete) { - dispatch(setTempTutorialComplete()); - } - }; - - const handleSkip = (): void => { - dispatch(setTempTutorialComplete()); - }; - - const handleUpdateCheck = (): void => { - dispatch(toggleRememberCompleted()); - }; - - return ( - - - - - handleUpdateCheck()} - > - {"Remember completed?"} - - - - ); -}; - -export default TutorialSubmitButtons; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 2eed775..37894a9 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,3 +1,9 @@ +import "@fontsource/montserrat/500.css"; +import "@fontsource/tilt-neon/400.css"; +import "@fontsource/anonymous-pro/400.css"; +import "@fontsource/kalam/400.css"; +import "@fontsource/anybody/400.css"; + import type { AppProps } from "next/app"; import React from "react"; import { ChakraProvider } from "@chakra-ui/react"; @@ -13,7 +19,7 @@ function LCMPottyChart({ Component, pageProps }: AppProps): JSX.Element { - {"LCM Potty Chart"} + {"LCM Website"} - + - + - + - + - + - + - + - - - + + diff --git a/src/pages/calendar/[...date].tsx b/src/pages/calendar/[...date].tsx deleted file mode 100644 index a174e88..0000000 --- a/src/pages/calendar/[...date].tsx +++ /dev/null @@ -1,209 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { Provider } from "react-redux"; -import { store } from "../../redux/store"; -import { Box } from "@chakra-ui/react"; -import { useRouter } from "next/router"; -import { - endOfMonth, - getDate - // getMonth, - // getYear, - // isAfter, - // isBefore, - // isSameMonth -} from "date-fns"; -// import findValidDateRange from "../../lib/findValidDateRange"; -import ErrorPage from "next/error"; -import Calender from "../../components/calender"; - -const DateRoute: React.FC = () => { - const router = useRouter(); - const { date: slug } = router.query; - - const [date, setDate] = useState(null); - - const [error, setError] = useState(false); - - // const dateRange = useRef(findValidDateRange()); - // const validDateRange = Object.assign({}, dateRange.current); - - const validateDateInput = ( - dateArr: number[] - ): UpdateCalenderPropsDateLayout => { - if (!(dateArr.length >= 2) && !(dateArr.length <= 3)) { - return { - year: 0, - month: 0, - day: 0 - }; - } - - const date = { - year: 0, - month: 0, - day: 0 - }; - - if (/^(19|20)\d{2}$/.test(`${dateArr[0]}`)) { - date.year = dateArr[0]; - } - - if (dateArr[1] > 0 && dateArr[1] <= 12) { - date.month = dateArr[1]; - } - - if (date.month && date.year) { - const lastDay = getDate( - endOfMonth(new Date(date.year, date.month - 1, 1)) - ); - if (dateArr[2] && dateArr[2] > 0 && dateArr[2] <= lastDay) { - date.day = dateArr[2]; - } else if (!dateArr[2]) { - date.day = 1; - } - } - - return date; - }; - - /** - * ! This function does not work as is. It is causing infinite loops whe used within the useEffect. - */ - // const validateDateRange = ( - // slugDate: Date - // ): [Date, "after" | "before" | "valid"] => { - // const { start: validStart, end: validEnd } = validDateRange; - - // // Check if the slug date is beyond the valid end date. - // if (isAfter(slugDate, validEnd)) { - // // router.push("/calender/now"); - // console.warn( - // "Slug date is after the valid date range for this calendar!!!" - // ); - // return [validEnd, "after"]; - // // Check if the slug is before the valid start date. - // } else if (isBefore(slugDate, validStart)) { - // console.warn( - // "Slug date is before the valid date range for this calendar!!!" - // ); - // return [validStart, "before"]; - // // router.push(`/${getYear(validStart)}/${getMonth(validStart) + 1}`); - // } else { - // console.info( - // "Slug date is within the valid date range for this calendar." - // ); - // return [slugDate, "valid"]; - // } - // }; - - useEffect(() => { - // Checking if the slug exists and is an array. - if (slug && Array.isArray(slug)) { - console.log(slug); - // Grabbing the slug length - const length = slug.length; - - // Parsing the slug to convert it from strings to numbers. - const parsedSlug = slug.map((e) => { - return parseInt(e); - }); - - // Checking if the slug has 2 to 3 numbers within the array. year/month/day. - if (length >= 2 && length <= 3) { - // Validate that the date is valid. - const newDate = validateDateInput(parsedSlug); - - // If anything is invalid the year/day/month would be set to 0. This checks for the invalid condition. - if (newDate.year === 0 || newDate.month === 0 || newDate.day === 0) { - setError(true); - // Set the date to the valid date. - } else { - // TODO: Make sure the date is within the valid range using the validateDateRange function. - // const validDate = new Date( - // newDate.year, - // newDate.month - 1, - // newDate.day - // ); - - // const validDateWithinRange = validateDateRange(validDate)[0]; - - // setDate({ - // ...{ - // year: getYear(validDateWithinRange), - // month: getMonth(validDateWithinRange) + 1, - // day: getDate(validDateWithinRange) - // } - // }); - - setDate({ - ...newDate - }); - } - } else if (length === 1) { - // Checking if the slug is not "now". - // ! Update this to include a check for "today". - if (slug[0] !== "now") { - setError(true); - return console.warn("improper date input:", slug); - } - } - } - }, [slug]); - - /** - * ? Pushing into the router within the use effect does not create the infinite loop. - * ? The way the validate date range or the way it is being used within a useEffect is what is creating the infinite loop. - */ - - // useEffect(() => { - // // Check is slug and date are valid. - // if (slug && date && date !== null) { - // // Check if the slug is an array and has a length of 2. - // if (Array.isArray(slug) && slug.length === 2) { - // const dateState = new Date(date.year, date.month - 1, date.day); - - // const parsedSlug = slug.map((e) => { - // return parseInt(e); - // }); - // const slugDate = new Date(parsedSlug[0], parsedSlug[1] - 1, 1); - - // if (!isSameMonth(dateState, slugDate)) { - // const validDateWithinRange = validateDateRange(dateState); - - // if (validDateRange[1] === "after") { - // router.push("/now"); - // } else { - // router.push( - // `/${getYear(validDateWithinRange[0])}/${getMonth( - // validDateWithinRange[0] - // )}` - // ); - // } - // } - // } - // } - // }, [date]); - - if (router.isFallback) { - return ; - } - - /** - * TODO: Update to disallow navigation in the future and too far in the past. - * Update so that a date given in the future take the user to /now to today's date. - * Update so that a date given beyond the last valid date will bring the user to the - * last month that has stickers within it (When filter is enabled) or to the creation date of the chart.. - */ - - return error ? ( - - ) : ( - - - - - - ); -}; - -export default DateRoute; diff --git a/src/pages/calendar/index.tsx b/src/pages/calendar/index.tsx deleted file mode 100644 index ad0dc52..0000000 --- a/src/pages/calendar/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React, { useEffect } from "react"; -import { useRouter } from "next/router"; -import { Box, Heading } from "@chakra-ui/react"; - -const DateIndex = () => { - const router = useRouter(); - - useEffect(() => { - if (router) { - router.push("calendar/now"); - } - }, [router]); - - return ( - - - Loading - - - ); -}; - -export default DateIndex; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 4c5825e..0a6bbe6 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,130 +1,14 @@ -import React, { Fragment, useEffect, useRef } from "react"; +import React from "react"; import { Provider } from "react-redux"; import { store } from "../redux/store"; -import { useAppDispatch, useAppSelector } from "../redux/hooks"; -import { updateLoading } from "../features/calender"; -import { - clearTutorialCompleted, - getAndSetTutorial, - StorageState -} from "../features/tutorial"; import { Box } from "@chakra-ui/react"; -import { format, isAfter, isBefore, startOfDay } from "date-fns"; -import Calender from "../components/calender"; -import Tutorial from "../components/tutorial"; -import LoadingOverlay from "../components/loading/LoadingOverlay"; -import versionStringToNumber from "../../lib/versionStringToNumber"; +import TempHero from "../components/hero"; const IndexPage = (): JSX.Element => { - const currDateStr: string = useAppSelector( - (state) => state.calender.currDate - ); - const isLoading: boolean = useAppSelector( - (state) => state.calender.isLoading - ); - - const currDateObj: Date = new Date(currDateStr); - - // * Tutorial * // - const completedTutorial: boolean = useAppSelector( - (state) => state.tutorial.completedTutorial - ); - const tutorialCompletionInfo: StorageState = useAppSelector( - (state) => state.tutorial.storageState - ); - const dispatch = useAppDispatch(); - - // Get the completed tutorial cookie or have it set to false. - useEffect(() => { - if (completedTutorial === null && tutorialCompletionInfo === null) { - dispatch(getAndSetTutorial()); - } - - if (completedTutorial !== null) { - dispatch(updateLoading(false)); - } - }, [completedTutorial, dispatch, tutorialCompletionInfo]); - - // Checking the exp date of completed tutorial cookie and if the version completed is out of date. - useEffect(() => { - if (tutorialCompletionInfo !== null) { - const { exp, version } = tutorialCompletionInfo; - const currDateObj: Date = new Date(currDateStr); - - /** - * Checks if the completed tutorial cookie is expired. - * @param {Date} expDate the date when the completed tutorital cookie expires. - * @returns {boolean} true if the cookie is expired, false is otherwise. - */ - const expDateValidator = (expDate: Date): boolean => { - let flag = false; - - const startOfToday = startOfDay(currDateObj); - - if (isAfter(startOfToday, expDate)) { - flag = true; - } - - return flag; - }; - - /** - * Checks if the last time the completed tutorial is before an update to the tutorial. - * @param {number} lastVersionCompleted the version number the tutorial was last completed. - * @returns {boolean} true if the version given is before the changes to the tutorial, false otherwise. - */ - const versionValidator = (lastVersionCompleted: number): boolean => { - const lastVersionWithChangeStr: string = - process.env.NEXT_PUBLIC_NEW_TUTORIAL_VERSION; - const lastVersionWithChange: number = versionStringToNumber( - lastVersionWithChangeStr - ); - - const lastUpdatedDateStr: string = - process.env.NEXT_PUBLIC_LAST_UPDATE_DATE; - const lastUpdatedDate: Date = new Date(lastUpdatedDateStr); - - let flag = false; - - if ( - lastVersionCompleted < lastVersionWithChange || - (lastVersionCompleted === lastVersionWithChange && - isBefore(currDateObj, lastUpdatedDate)) - ) { - flag = true; - console.error("Completed cookie version is out of date."); - } - - return flag; - }; - - if (expDateValidator(new Date(exp)) || versionValidator(version)) { - console.warn("Version outdated or cookie expired."); - dispatch(clearTutorialCompleted()); - } - } - }, [currDateStr, dispatch, tutorialCompletionInfo]); - - // Current date - const currDate = useRef({ - year: parseInt(format(currDateObj, "y")), - month: parseInt(format(currDateObj, "M")), - day: parseInt(format(currDateObj, "d")) - }); - return ( - {isLoading === true ? ( - - - - - ) : completedTutorial ? ( - - ) : ( - - )} + ); diff --git a/src/theme/AppTheme.ts b/src/theme/AppTheme.ts index 2d2321f..ed7e54d 100644 --- a/src/theme/AppTheme.ts +++ b/src/theme/AppTheme.ts @@ -1,5 +1,10 @@ import { extendTheme, ThemeConfig } from "@chakra-ui/react"; // import { createBreakpoints } from "@chakra-ui/theme-tools"; +import "@fontsource/montserrat"; +import "@fontsource/tilt-neon"; +import "@fontsource/anonymous-pro"; +import "@fontsource/kalam"; +import "@fontsource/anybody"; import buttons from "./components/buttonStyles"; const config: ThemeConfig = { @@ -15,6 +20,14 @@ const config: ThemeConfig = { // "2xl": "100em", // }); +const fonts = { + heading: `'Tilt Neon', system-ui`, + body: `'Montserrat', sans-serif`, + mono: `'Anonymous Pro', monospace`, + brand: `'Kalam', cursive`, + LCM: `'Anybody', system-ui` +}; + const AppTheme = extendTheme({ config, colors: { @@ -22,6 +35,7 @@ const AppTheme = extendTheme({ main: "#3138dc", primary: "#0068ff", secondary: "#0086ff", + cosmic: "#314a9e", hover: "#00aec1", warning: "#ffbd48", danger: "#FC8181", @@ -29,8 +43,7 @@ const AppTheme = extendTheme({ footer: "#0097a7", footerText: "black", content: "#2d3748", - kofi: "#FF5E5B", - twitter: "#1da1f2" + kofi: "#FF5E5B" }, loading: { overlayBg: "#171923cb", @@ -47,8 +60,10 @@ const AppTheme = extendTheme({ }, components: { Button: buttons - } + }, + fonts // breakpoints, }); export default AppTheme; +export { fonts }; diff --git a/src/theme/components/BrandText.tsx b/src/theme/components/BrandText.tsx new file mode 100644 index 0000000..5eef939 --- /dev/null +++ b/src/theme/components/BrandText.tsx @@ -0,0 +1,29 @@ +import { Heading, Text } from "@chakra-ui/react"; +import React from "react"; +import { fonts } from "../AppTheme"; + +interface BrandTextProps { + type: "Heading" | "Text"; + text: string; + headerLevel?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6"; + size?: string; +} + +const BrandText = ({ + type, + text, + headerLevel, + size +}: BrandTextProps): JSX.Element => { + return type === "Heading" ? ( + + {text} + + ) : ( + + {text} + + ); +}; + +export default BrandText; diff --git a/src/theme/layout/DesktopNav.tsx b/src/theme/layout/DesktopNav.tsx index ddafe4c..7c6ef1f 100644 --- a/src/theme/layout/DesktopNav.tsx +++ b/src/theme/layout/DesktopNav.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Button, HStack, Link } from "@chakra-ui/react"; +import { Button, HStack, Link, Text } from "@chakra-ui/react"; import navItems, { NavItem } from "./navItems"; const DesktopNav = (): JSX.Element => { @@ -18,7 +18,9 @@ const DesktopNav = (): JSX.Element => { {navItems.map((navItem: NavItem) => { return ( - + ); })} diff --git a/src/theme/layout/Header.tsx b/src/theme/layout/Header.tsx index a204165..485d2c3 100644 --- a/src/theme/layout/Header.tsx +++ b/src/theme/layout/Header.tsx @@ -12,9 +12,10 @@ import { Icon } from "@iconify/react"; import DesktopNav from "./DesktopNav"; import MobileNav from "./MobileNav"; import appLogo from "../../../public/images/logo.svg"; +import { fonts } from "../AppTheme"; const Header = (): JSX.Element => { - const appName = "LCM Potty Chart"; + const appName = "Lucid Creations Media"; const appVersion = process.env.NEXT_PUBLIC_APP_VERSION_HEADER || ""; // Add transparency while not at the top of the page. @@ -117,7 +118,7 @@ const Header = (): JSX.Element => { > App Logo - + {appName} @@ -151,7 +152,12 @@ const Header = (): JSX.Element => { }} > App Logo - + {appName} diff --git a/src/theme/layout/MobileNav.tsx b/src/theme/layout/MobileNav.tsx index e0a604f..5016e2b 100644 --- a/src/theme/layout/MobileNav.tsx +++ b/src/theme/layout/MobileNav.tsx @@ -4,7 +4,8 @@ import { Link, MenuDivider, MenuItem, - MenuList + MenuList, + Text } from "@chakra-ui/react"; import navItems, { NavItem } from "./navItems"; @@ -42,7 +43,7 @@ const MobileNav: FC = ({ updateOpen }: MobileNavProps) => { updateOpen(false)} href={navItem[1]}> {index === 0 ? : } diff --git a/yarn.lock b/yarn.lock index d6866bc..df19b24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1316,15 +1316,6 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^0.8.2": - version: 0.8.8 - resolution: "@emotion/is-prop-valid@npm:0.8.8" - dependencies: - "@emotion/memoize": "npm:0.7.4" - checksum: 10/e85bdeb9d9d23de422f271e0f5311a0142b15055bb7e610440dbf250f0cdfd049df88af72a49e2c6081954481f1cbeca9172e2116ff536b38229397dfbed8082 - languageName: node - linkType: hard - "@emotion/is-prop-valid@npm:^1.2.1": version: 1.2.1 resolution: "@emotion/is-prop-valid@npm:1.2.1" @@ -1334,13 +1325,6 @@ __metadata: languageName: node linkType: hard -"@emotion/memoize@npm:0.7.4": - version: 0.7.4 - resolution: "@emotion/memoize@npm:0.7.4" - checksum: 10/4e3920d4ec95995657a37beb43d3f4b7d89fed6caa2b173a4c04d10482d089d5c3ea50bbc96618d918b020f26ed6e9c4026bbd45433566576c1f7b056c3271dc - languageName: node - linkType: hard - "@emotion/memoize@npm:^0.8.1": version: 0.8.1 resolution: "@emotion/memoize@npm:0.8.1" @@ -1348,9 +1332,9 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.11.3": - version: 11.11.3 - resolution: "@emotion/react@npm:11.11.3" +"@emotion/react@npm:^11.11.4": + version: 11.11.4 + resolution: "@emotion/react@npm:11.11.4" dependencies: "@babel/runtime": "npm:^7.18.3" "@emotion/babel-plugin": "npm:^11.11.0" @@ -1365,7 +1349,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10/f7b98557b7d5236296dda48c2fc8a6cde4af7399758496e9f710f85a80c7d66fee1830966caabd7b237601bfdaca4e1add8c681d1ae4cc3d497fe88958d541c4 + checksum: 10/e7da3a1ddc1d72a4179010bdfd17423c13b1a77bf83a8b18271e919fd382d08c62dc2313ed5347acfd1ef85bb1bae8932597647a986e8a1ea1462552716cd495 languageName: node linkType: hard @@ -1494,6 +1478,41 @@ __metadata: languageName: node linkType: hard +"@fontsource/anonymous-pro@npm:^5.0.12": + version: 5.0.12 + resolution: "@fontsource/anonymous-pro@npm:5.0.12" + checksum: 10/3604c041821d7b26664323a5d5a269ee096486e5f66168d37188093eadf57b95064cc2dde1c381134d9661125e911c00d4dee4a61c5441006aead8e0f80c81c2 + languageName: node + linkType: hard + +"@fontsource/anybody@npm:^5.0.19": + version: 5.0.19 + resolution: "@fontsource/anybody@npm:5.0.19" + checksum: 10/e39d4311232eb92e4189eb8e1e345b19414e6c0706d8d000ba0e3a4411feeb50c17897c57d22405e895a7f40fb04f22faf2ebc1716b96b305ed7803b56c6003d + languageName: node + linkType: hard + +"@fontsource/kalam@npm:^5.0.12": + version: 5.0.12 + resolution: "@fontsource/kalam@npm:5.0.12" + checksum: 10/dc4fbd2ff38593c233330dea4d82ec62fd585c05883155a3615c3bb7b78ba62c6ecc3fa4336ee57bd995c475e1921efb01c306a54afdf1d14cbcdb46df52de76 + languageName: node + linkType: hard + +"@fontsource/montserrat@npm:^5.0.17": + version: 5.0.17 + resolution: "@fontsource/montserrat@npm:5.0.17" + checksum: 10/8d91c3b94eaff379396403b3859f0e8a3b4ab2e44808f6a036c410c8d19d031b7442ee587d1cca38e7389b4f3587af358bf41bf70ec8c62dc4dcb2cb27637a43 + languageName: node + linkType: hard + +"@fontsource/tilt-neon@npm:^5.0.4": + version: 5.0.4 + resolution: "@fontsource/tilt-neon@npm:5.0.4" + checksum: 10/07b5fac6457b2b14792ba84403f9943b995608d7e3113f9647ffc1635422a2dcd9745585404251cf2cbd9017c35fbeeaa32e38c43551cb1e2a3af159c6564292 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -1712,10 +1731,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:14.1.0": - version: 14.1.0 - resolution: "@next/env@npm:14.1.0" - checksum: 10/8651faab7827026fe9df32f32f3dc743ca93707fabe6ec8e75ee60bd94781afee8093514e2108d2b2f03198d0a74fc6152d9e73ea01125e89402f068a8516915 +"@next/env@npm:14.1.3": + version: 14.1.3 + resolution: "@next/env@npm:14.1.3" + checksum: 10/b95c55530f5fb8cfb2a48a23485fd4cb584bff8620637785d7dd068c0d72d4dc0869023ed509f52fead558839f2efae4f7370a2c2fd87540201629fc39a421a5 languageName: node linkType: hard @@ -1728,65 +1747,65 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-darwin-arm64@npm:14.1.0" +"@next/swc-darwin-arm64@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-darwin-arm64@npm:14.1.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-darwin-x64@npm:14.1.0" +"@next/swc-darwin-x64@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-darwin-x64@npm:14.1.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-linux-arm64-gnu@npm:14.1.0" +"@next/swc-linux-arm64-gnu@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-linux-arm64-gnu@npm:14.1.3" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-linux-arm64-musl@npm:14.1.0" +"@next/swc-linux-arm64-musl@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-linux-arm64-musl@npm:14.1.3" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-linux-x64-gnu@npm:14.1.0" +"@next/swc-linux-x64-gnu@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-linux-x64-gnu@npm:14.1.3" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-linux-x64-musl@npm:14.1.0" +"@next/swc-linux-x64-musl@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-linux-x64-musl@npm:14.1.3" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-win32-arm64-msvc@npm:14.1.0" +"@next/swc-win32-arm64-msvc@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-win32-arm64-msvc@npm:14.1.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-win32-ia32-msvc@npm:14.1.0" +"@next/swc-win32-ia32-msvc@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-win32-ia32-msvc@npm:14.1.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:14.1.0": - version: 14.1.0 - resolution: "@next/swc-win32-x64-msvc@npm:14.1.0" +"@next/swc-win32-x64-msvc@npm:14.1.3": + version: 14.1.3 + resolution: "@next/swc-win32-x64-msvc@npm:14.1.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1901,12 +1920,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.11.20": - version: 20.11.20 - resolution: "@types/node@npm:20.11.20" +"@types/node@npm:^20.11.28": + version: 20.11.28 + resolution: "@types/node@npm:20.11.28" dependencies: undici-types: "npm:~5.26.4" - checksum: 10/ff449bdc94810dadb54e0f77dd587c6505ef79ffa5a208c16eb29b223365b188f4c935a3abaf0906a01d05257c3da1f72465594a841d35bcf7b6deac7a6938fb + checksum: 10/b03f69213ac6e7cd5f7efa86139f24e23ff70a12fed04adeac5413b62d6982343ce94906f74c401c5afefda48d36ae0efd6a575240996b15a5cf80b456ab4221 languageName: node linkType: hard @@ -1947,14 +1966,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.2.58": - version: 18.2.58 - resolution: "@types/react@npm:18.2.58" +"@types/react@npm:^18.2.66": + version: 18.2.66 + resolution: "@types/react@npm:18.2.66" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/ec5e1a7d8acc55551efec7a3d63441d24c7e94b66bf8039944541a8408048668e51b7b4b0b6e8303cdea271b7c6da242cdc7bb8ca501eedf822956edbdbfc67e + checksum: 10/8a82bda6c254681536fa8348dc15d52345d8203d5d322406feef865f74ebfe2475ebde0be4e2f9a18ffbb587dac946dfb5d0974b598779ff282259aff7e8209a languageName: node linkType: hard @@ -1979,15 +1998,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/eslint-plugin@npm:7.0.2" +"@typescript-eslint/eslint-plugin@npm:^7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/eslint-plugin@npm:7.2.0" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/type-utils": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.2.0" + "@typescript-eslint/type-utils": "npm:7.2.0" + "@typescript-eslint/utils": "npm:7.2.0" + "@typescript-eslint/visitor-keys": "npm:7.2.0" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -2000,7 +2019,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/430b2f7ca36ee73dc75c1d677088709f3c9d5bbb4fffa3cfbe1b7d63979ee397f7a4a2a1386e05a04991500fa0ab0dd5272e8603a2b20f42e4bf590603500858 + checksum: 10/c50366021d63dc0f31fbd4673679d41eeaf53e1d411330742ea6e36bc854d5d9d52531df9efe708078e5c798fb9a6fca45473a451c197f46ac04050d47c9a9d2 languageName: node linkType: hard @@ -2021,21 +2040,21 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/parser@npm:7.0.2" +"@typescript-eslint/parser@npm:^7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/parser@npm:7.2.0" dependencies: - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.2.0" + "@typescript-eslint/types": "npm:7.2.0" + "@typescript-eslint/typescript-estree": "npm:7.2.0" + "@typescript-eslint/visitor-keys": "npm:7.2.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/18d6e1bda64013f7d66164164c57a10390f7979db55b265062ae9337e11e0921bffca10870e252cd0bd198f79ffa2e87a652e57110e5b1b4cc738453154c205c + checksum: 10/2236acd9f794ccb34062309f3d6fa2a0e34ac6560262213807a11fb42592011cd13ff3290a2fdbdf441fb3d248cbe23383e6c7e6c744d1cacc916159d885204f languageName: node linkType: hard @@ -2049,22 +2068,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/scope-manager@npm:7.0.2" +"@typescript-eslint/scope-manager@npm:7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/scope-manager@npm:7.2.0" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" - checksum: 10/773ea6e61f741777e69a469641f3db0d3c2301c0102667825fb235ed5a65c95f6d6b31b19e734b9a215acc0c7c576c65497635b8d5928eeddb58653ceb13d2d5 + "@typescript-eslint/types": "npm:7.2.0" + "@typescript-eslint/visitor-keys": "npm:7.2.0" + checksum: 10/9b1d43c87b0fc269df1820ebcbdb08e1c5c8cc719a6af8298d87077ca78cf5ebbfa8caa6eb5141f4dfb4cbb3a641291c50c73a213faab90bc43d34abfc68a1fe languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/type-utils@npm:7.0.2" +"@typescript-eslint/type-utils@npm:7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/type-utils@npm:7.2.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" + "@typescript-eslint/typescript-estree": "npm:7.2.0" + "@typescript-eslint/utils": "npm:7.2.0" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -2072,7 +2091,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/63bf19c9f5bbcb0f3e127f509d85dc49be4e5e51781d78f58c96786089e7c909b25d35d0248a6a758e2f7d5b5223d2262c2d597ab71f226af6beb499ae950645 + checksum: 10/1c4efcd068987ed5bbf6f3dda1fed313eec84fc0840af6e00593338cc2605c96ab760bf83f868271a6b5fcde8a44d00e21b70a8607474a4df9d43d29775bb235 languageName: node linkType: hard @@ -2083,10 +2102,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/types@npm:7.0.2" - checksum: 10/2cba8a0355cc7357db142fa597d02cf39e1d1cb0ec87c80e91daaa2b87f2a794d2649def9d7b2aa435691c3810d2cbd4cdc21668b19b991863f0d54d4a22da82 +"@typescript-eslint/types@npm:7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/types@npm:7.2.0" + checksum: 10/d70cbd77f21caddbb1c3519bb523b5217a300d52682e9acfa9ff645d7250f7f07653f48930f531675216e848b5f83cb9b14cf63db76239cec1159550a989e16d languageName: node linkType: hard @@ -2108,12 +2127,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/typescript-estree@npm:7.0.2" +"@typescript-eslint/typescript-estree@npm:7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/typescript-estree@npm:7.2.0" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.2.0" + "@typescript-eslint/visitor-keys": "npm:7.2.0" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -2123,24 +2142,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/307080e29c22fc69f0ce7ab7101e1629e05f45a9e541c250e03d06b61336ab0ccb5f0a7354ee3da4e38d5cade4dd2fb7bb396cd7cbe74c2c4b3e29706a70abcc + checksum: 10/77a81dc903da1ccb302c96bf7f845f297d87ab7871849bfabdddee51583646a1147923fc23c550c6c783229bc7bda37a3ea147478fa08b3847d0440a34587198 languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/utils@npm:7.0.2" +"@typescript-eslint/utils@npm:7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/utils@npm:7.2.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.2.0" + "@typescript-eslint/types": "npm:7.2.0" + "@typescript-eslint/typescript-estree": "npm:7.2.0" semver: "npm:^7.5.4" peerDependencies: eslint: ^8.56.0 - checksum: 10/e68bac777419cd529371f7f29f534efaeca130c90ed9723bfc7aac451d61ca3fc4ebd310e2c015e29e8dc7be4734ae46258ca8755897d7f5e3bb502660d5372f + checksum: 10/4852d43f1e0ca7e4914fef6cb5984a472d77af6fafcfad18905c0ba2ac5539a7ba8e72a4b3f7cbff712733f9cf8e8af790b4875f944aae1006ca297f8e041d32 languageName: node linkType: hard @@ -2154,13 +2173,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/visitor-keys@npm:7.0.2" +"@typescript-eslint/visitor-keys@npm:7.2.0": + version: 7.2.0 + resolution: "@typescript-eslint/visitor-keys@npm:7.2.0" dependencies: - "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.2.0" eslint-visitor-keys: "npm:^3.4.1" - checksum: 10/da6c1b0729af99216cde3a65d4e91584a81fc6c9dff7ba291089f01bf7262de375f58c4c4246e5fbc29f51258db7725d9c830f82ccbd1cda812fd13c51480cda + checksum: 10/e0c9c7a9bb1ae93149e7a4816aed12651fd7374d0eb17e1f45348dbfddd8ee7014d3de35b40bc46b9df73cc1c9053aaf5d82b43270d93a0b551ed14e8afde37a languageName: node linkType: hard @@ -2284,6 +2303,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10/53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + "array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": version: 3.1.7 resolution: "array-includes@npm:3.1.7" @@ -2304,6 +2333,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlast@npm:^1.2.4": + version: 1.2.4 + resolution: "array.prototype.findlast@npm:1.2.4" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.3.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10/1711e48058cabbad24cb694fa3721b760e56004758142c439880a19b9b206e3584b94bbad41e5f68e0da8785db1d09250061a46769baa90a0d2e09c05987c82d + languageName: node + linkType: hard + "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.3 resolution: "array.prototype.findlastindex@npm:1.2.3" @@ -2341,6 +2383,18 @@ __metadata: languageName: node linkType: hard +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10/b4076d687ddc22c191863ce105d320cc4b0e1435bfda9ffeeff681682fe88fa6fe30e0d2ae94fa4b2d7fad901e1954ea4f75c1cab217db4848da84a2b5889192 + languageName: node + linkType: hard + "array.prototype.tosorted@npm:^1.1.1": version: 1.1.2 resolution: "array.prototype.tosorted@npm:1.1.2" @@ -2354,6 +2408,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.3 + resolution: "array.prototype.tosorted@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.1.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10/9a5b7909a9ddd02a5f5489911766c314a11fb40f8f5106bdbedf6c21898763faeb78ba3af53f7038f288de9161d2605ad10d8b720e07f71a7ed1de49f39c0897 + languageName: node + linkType: hard + "arraybuffer.prototype.slice@npm:^1.0.2": version: 1.0.2 resolution: "arraybuffer.prototype.slice@npm:1.0.2" @@ -2369,6 +2436,22 @@ __metadata: languageName: node linkType: hard +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" + is-shared-array-buffer: "npm:^1.0.2" + checksum: 10/0221f16c1e3ec7b67da870ee0e1f12b825b5f9189835392b59a22990f715827561a4f4cd5330dc7507de272d8df821be6cd4b0cb569babf5ea4be70e365a2f3d + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.8": version: 0.0.8 resolution: "ast-types-flow@npm:0.0.8" @@ -2392,6 +2475,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10/6c9da3a66caddd83c875010a1ca8ef11eac02ba15fb592dc9418b2b5e7b77b645fa7729380a92d9835c2f05f2ca1b6251f39b993e0feb3f1517c74fa1af02cab + languageName: node + linkType: hard + "axe-core@npm:=4.7.0": version: 4.7.0 resolution: "axe-core@npm:4.7.0" @@ -2474,6 +2566,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2652,10 +2757,43 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^3.3.1": - version: 3.3.1 - resolution: "date-fns@npm:3.3.1" - checksum: 10/98231936765dfb6fc6897676319b500a06a39f051b2c3ecbdd541a07ce9b1344b770277b8bfb1049fb7a2f70bf365ac8e6f1e2bb452b10e1a8101d518ca7f95d +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10/5919a39a18ee919573336158fd162fdf8ada1bc23a139f28543fd45fac48e0ea4a3ad3bfde91de124d4106e65c4a7525f6a84c20ba0797ec890a77a96d13a82a + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.0": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10/f33c65e58d8d0432ad79761f2e8a579818d724b5dc6dc4e700489b762d963ab30873c0f1c37d8f2ed12ef51c706d1195f64422856d25f067457aeec50cc40aac + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10/96f34f151bf02affb7b9f98762fb7aca1dd5f4553cb57b80bce750ca609c15d33ca659568ef1d422f7e35680736cbccb893a3d4b012760c758c1446bbdc4c6db + languageName: node + linkType: hard + +"date-fns@npm:^3.5.0": + version: 3.5.0 + resolution: "date-fns@npm:3.5.0" + checksum: 10/d37eff45f97e6c6745072ff2733c63fffa89e91d4bf407c368641b83c05eaa5222f3f1ba2d7f88862c4fc26fbcf4ad2ffac4526ae6a6414c10fcaea411ab71c3 languageName: node linkType: hard @@ -2705,6 +2843,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae + languageName: node + linkType: hard + "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" @@ -2837,6 +2986,75 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0": + version: 1.23.0 + resolution: "es-abstract@npm:1.23.0" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.0" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.3" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.1" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.1" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.2" + safe-array-concat: "npm:^1.1.0" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.8" + string.prototype.trimend: "npm:^1.0.7" + string.prototype.trimstart: "npm:^1.0.7" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.5" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.14" + checksum: 10/b66cec32fcb896c7a3bbb7cb717f3f6bbbb73efe1c6003f0d7a899aecc358feed38ec2cad55e2a1d71a4a95ec7e7cc1dbbca34368deb0b98e36fe02cc5559b31 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 + languageName: node + linkType: hard + "es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": version: 1.0.15 resolution: "es-iterator-helpers@npm:1.0.15" @@ -2859,6 +3077,28 @@ __metadata: languageName: node linkType: hard +"es-iterator-helpers@npm:^1.0.17": + version: 1.0.18 + resolution: "es-iterator-helpers@npm:1.0.18" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.3" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + globalthis: "npm:^1.0.3" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + internal-slot: "npm:^1.0.7" + iterator.prototype: "npm:^1.1.2" + safe-array-concat: "npm:^1.1.2" + checksum: 10/a4fd067e148736fbe6a9883f449e0de88be14a4dff9065c457572ede10ba02a4a15c4ae18b9b7baa5c868860d2be9a6764906c3308135e57ec5bfd386bbd2836 + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.2 resolution: "es-set-tostringtag@npm:2.0.2" @@ -2870,7 +3110,18 @@ __metadata: languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10/7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": version: 1.0.2 resolution: "es-shim-unscopables@npm:1.0.2" dependencies: @@ -3041,7 +3292,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.31.7, eslint-plugin-react@npm:^7.33.2": +"eslint-plugin-react@npm:^7.31.7": version: 7.33.2 resolution: "eslint-plugin-react@npm:7.33.2" dependencies: @@ -3067,6 +3318,34 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react@npm:^7.34.1": + version: 7.34.1 + resolution: "eslint-plugin-react@npm:7.34.1" + dependencies: + array-includes: "npm:^3.1.7" + array.prototype.findlast: "npm:^1.2.4" + array.prototype.flatmap: "npm:^1.3.2" + array.prototype.toreversed: "npm:^1.1.2" + array.prototype.tosorted: "npm:^1.1.3" + doctrine: "npm:^2.1.0" + es-iterator-helpers: "npm:^1.0.17" + estraverse: "npm:^5.3.0" + jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" + minimatch: "npm:^3.1.2" + object.entries: "npm:^1.1.7" + object.fromentries: "npm:^2.0.7" + object.hasown: "npm:^1.1.3" + object.values: "npm:^1.1.7" + prop-types: "npm:^15.8.1" + resolve: "npm:^2.0.0-next.5" + semver: "npm:^6.3.1" + string.prototype.matchall: "npm:^4.0.10" + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 10/ee059971065ea7e73ab5d8728774235c7dbf7a5e9f937c3b47e97f8fa9a5a96ab511d2ae6d5ec76a7e705ca666673d454f1e75a94033720819d041827f50f9c8 + languageName: node + linkType: hard + "eslint-scope@npm:^7.2.2": version: 7.2.2 resolution: "eslint-scope@npm:7.2.2" @@ -3307,24 +3586,23 @@ __metadata: languageName: node linkType: hard -"framer-motion@npm:^11.0.6": - version: 11.0.6 - resolution: "framer-motion@npm:11.0.6" +"framer-motion@npm:^11.0.14": + version: 11.0.14 + resolution: "framer-motion@npm:11.0.14" dependencies: - "@emotion/is-prop-valid": "npm:^0.8.2" tslib: "npm:^2.4.0" peerDependencies: + "@emotion/is-prop-valid": "*" react: ^18.0.0 react-dom: ^18.0.0 - dependenciesMeta: + peerDependenciesMeta: "@emotion/is-prop-valid": optional: true - peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 10/f18f5d40045029238b9d05e646ff950856bc7d0b0d9210fca59e8419c7e42eabf96e4481f8a753c13a13f306626515d8bf746e456d8d246df2060b02ab320926 + checksum: 10/5f23b3d6465f05245b476972270dc8a4a8754d1e5ebf90820b832842d97f92ebe7ee0cae7b03eda3175b5781f38ad6217d3868e9ad3216f2f859517e6cf80efb languageName: node linkType: hard @@ -3382,6 +3660,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d + languageName: node + linkType: hard + "get-nonce@npm:^1.0.0": version: 1.0.1 resolution: "get-nonce@npm:1.0.1" @@ -3399,6 +3690,17 @@ __metadata: languageName: node linkType: hard +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10/e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + languageName: node + linkType: hard + "get-tsconfig@npm:^4.5.0": version: 4.7.2 resolution: "get-tsconfig@npm:4.7.2" @@ -3539,6 +3841,15 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 + languageName: node + linkType: hard + "has-proto@npm:^1.0.1": version: 1.0.1 resolution: "has-proto@npm:1.0.1" @@ -3546,6 +3857,13 @@ __metadata: languageName: node linkType: hard +"has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10/0b67c2c94e3bea37db3e412e3c41f79d59259875e636ba471e94c009cdfb1fa82bf045deeffafc7dbb9c148e36cae6b467055aaa5d9fad4316e11b41e3ba551a + languageName: node + linkType: hard + "has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" @@ -3562,6 +3880,15 @@ __metadata: languageName: node linkType: hard +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10/c74c5f5ceee3c8a5b8bc37719840dc3749f5b0306d818974141dda2471a1a2ca6c8e46b9d6ac222c5345df7a901c9b6f350b1e6d62763fec877e26609a401bfe + languageName: node + linkType: hard + "hasown@npm:^2.0.0": version: 2.0.0 resolution: "hasown@npm:2.0.0" @@ -3571,6 +3898,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.1": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10/7898a9c1788b2862cf0f9c345a6bec77ba4a0c0983c7f19d610c382343d4f98fa260686b225dfb1f88393a66679d2ec58ee310c1d6868c081eda7918f32cc70a + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -3639,6 +3975,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" + side-channel: "npm:^1.0.4" + checksum: 10/3e66720508831153ecf37d13def9f6856f9f2960989ec8a0a0476c98f887fca9eff0163127466485cb825c900c2d6fc601aa9117b7783b90ffce23a71ea5d053 + languageName: node + linkType: hard + "invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -3659,6 +4006,16 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.1" + checksum: 10/34a26213d981d58b30724ef37a1e0682f4040d580fa9ff58fdfdd3cefcb2287921718c63971c1c404951e7b747c50fdc7caf6e867e951353fa71b369c04c969b + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -3717,6 +4074,15 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: 10/4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -3774,6 +4140,13 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10/8fe5cffd8d4fb2ec7b49d657e1691889778d037494c6f40f4d1a524cadd658b4b53ad7b6b73a59bcb4b143ae9a3d15829af864b2c0f9d65ac1e678c4c80f17e5 + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" @@ -3823,6 +4196,15 @@ __metadata: languageName: node linkType: hard +"is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + checksum: 10/bc5402900dc62b96ebb2548bf5b0a0bcfacc2db122236fe3ab3b3e3c884293a0d5eb777e73f059bcbf8dc8563bb65eae972fee0fb97e38a9ae27c8678f62bcfe + languageName: node + linkType: hard + "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -3850,6 +4232,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10/f850ba08286358b9a11aee6d93d371a45e3c59b5953549ee1c1a9a55ba5c1dd1bd9952488ae194ad8f32a9cf5e79c8fa5f0cc4d78c00720aa0bbcf238b38062d + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.1": version: 2.0.1 resolution: "is-weakmap@npm:2.0.1" @@ -4076,31 +4467,36 @@ __metadata: resolution: "lucid-creations-website@workspace:." dependencies: "@chakra-ui/react": "npm:^2.8.2" - "@emotion/react": "npm:^11.11.3" + "@emotion/react": "npm:^11.11.4" "@emotion/styled": "npm:^11.11.0" + "@fontsource/anonymous-pro": "npm:^5.0.12" + "@fontsource/anybody": "npm:^5.0.19" + "@fontsource/kalam": "npm:^5.0.12" + "@fontsource/montserrat": "npm:^5.0.17" + "@fontsource/tilt-neon": "npm:^5.0.4" "@iconify/react": "npm:^4.1.1" "@reduxjs/toolkit": "npm:^2.2.1" - "@types/node": "npm:^20.11.20" - "@types/react": "npm:^18.2.58" + "@types/node": "npm:^20.11.28" + "@types/react": "npm:^18.2.66" "@types/react-redux": "npm:^7.1.33" - "@typescript-eslint/eslint-plugin": "npm:^7.0.2" - "@typescript-eslint/parser": "npm:^7.0.2" - date-fns: "npm:^3.3.1" + "@typescript-eslint/eslint-plugin": "npm:^7.2.0" + "@typescript-eslint/parser": "npm:^7.2.0" + date-fns: "npm:^3.5.0" eslint: "npm:^8.57.0" eslint-config-next: "npm:<13.4.9" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-jsx-a11y: "npm:^6.8.0" - eslint-plugin-react: "npm:^7.33.2" + eslint-plugin-react: "npm:^7.34.1" eslint-plugin-react-hooks: "npm:^4.6.0" formik: "npm:^2.4.5" - framer-motion: "npm:^11.0.6" - next: "npm:14.1.0" + framer-motion: "npm:^11.0.14" + next: "npm:14.1.3" prettier: "npm:^3.2.5" react: "npm:^18.2.0" react-dom: "npm:^18.2.0" react-redux: "npm:^9.1.0" sharp: "npm:^0.33.2" - typescript: "npm:^5.3.3" + typescript: "npm:^5.4.2" languageName: unknown linkType: soft @@ -4176,20 +4572,20 @@ __metadata: languageName: node linkType: hard -"next@npm:14.1.0": - version: 14.1.0 - resolution: "next@npm:14.1.0" +"next@npm:14.1.3": + version: 14.1.3 + resolution: "next@npm:14.1.3" dependencies: - "@next/env": "npm:14.1.0" - "@next/swc-darwin-arm64": "npm:14.1.0" - "@next/swc-darwin-x64": "npm:14.1.0" - "@next/swc-linux-arm64-gnu": "npm:14.1.0" - "@next/swc-linux-arm64-musl": "npm:14.1.0" - "@next/swc-linux-x64-gnu": "npm:14.1.0" - "@next/swc-linux-x64-musl": "npm:14.1.0" - "@next/swc-win32-arm64-msvc": "npm:14.1.0" - "@next/swc-win32-ia32-msvc": "npm:14.1.0" - "@next/swc-win32-x64-msvc": "npm:14.1.0" + "@next/env": "npm:14.1.3" + "@next/swc-darwin-arm64": "npm:14.1.3" + "@next/swc-darwin-x64": "npm:14.1.3" + "@next/swc-linux-arm64-gnu": "npm:14.1.3" + "@next/swc-linux-arm64-musl": "npm:14.1.3" + "@next/swc-linux-x64-gnu": "npm:14.1.3" + "@next/swc-linux-x64-musl": "npm:14.1.3" + "@next/swc-win32-arm64-msvc": "npm:14.1.3" + "@next/swc-win32-ia32-msvc": "npm:14.1.3" + "@next/swc-win32-x64-msvc": "npm:14.1.3" "@swc/helpers": "npm:0.5.2" busboy: "npm:1.6.0" caniuse-lite: "npm:^1.0.30001579" @@ -4227,7 +4623,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10/1db512c5c82f7ea423a2651a28950d398f49f03df6213630aefdf083d5260edeeed8d995b90c3c8742c0a2346025e748d28078a6261d316fcdade4c5c788e986 + checksum: 10/6e77d5d35161b1e9337112ce7864527029f5c8e25ddd29e07e8a730c83f7241dd241e7eb0bdcd006e813b610274e960e0af18c167ab8a2deeeb7776121a7d770 languageName: node linkType: hard @@ -4264,6 +4660,18 @@ __metadata: languageName: node linkType: hard +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 10/dbb22da4cda82e1658349ea62b80815f587b47131b3dd7a4ab7f84190ab31d206bbd8fe7e26ae3220c55b65725ac4529825f6142154211220302aa6b1518045d + languageName: node + linkType: hard + "object.entries@npm:^1.1.6, object.entries@npm:^1.1.7": version: 1.1.7 resolution: "object.entries@npm:1.1.7" @@ -4298,7 +4706,7 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.2": +"object.hasown@npm:^1.1.2, object.hasown@npm:^1.1.3": version: 1.1.3 resolution: "object.hasown@npm:1.1.3" dependencies: @@ -4430,6 +4838,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10/8ed3e96dfeea1c5880c1f4c9cb707e5fb26e8be22f14f82ef92df20fd2004e635c62ba47fbe8f2bb63bfd80dac1474be2fb39798da8c2feba2815435d1f749af + languageName: node + linkType: hard + "postcss@npm:8.4.31": version: 8.4.31 resolution: "postcss@npm:8.4.31" @@ -4686,6 +5101,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: "npm:^1.0.6" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.1" + checksum: 10/9fffc01da9c4e12670ff95bc5204364615fcc12d86fc30642765af908675678ebb0780883c874b2dbd184505fb52fa603d80073ecf69f461ce7f56b15d10be9c + languageName: node + linkType: hard + "reselect@npm:^5.0.1": version: 5.1.0 resolution: "reselect@npm:5.1.0" @@ -4720,7 +5147,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4": +"resolve@npm:^2.0.0-next.4, resolve@npm:^2.0.0-next.5": version: 2.0.0-next.5 resolution: "resolve@npm:2.0.0-next.5" dependencies: @@ -4746,7 +5173,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin": +"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin, resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": version: 2.0.0-next.5 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" dependencies: @@ -4798,6 +5225,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.0, safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" + has-symbols: "npm:^1.0.3" + isarray: "npm:^2.0.5" + checksum: 10/a54f8040d7cb696a1ee38d19cc71ab3cfb654b9b81bae00c6459618cfad8214ece7e6666592f9c925aafef43d0a20c5e6fbb3413a2b618e1ce9d516a2e6dcfc5 + languageName: node + linkType: hard + "safe-regex-test@npm:^1.0.0": version: 1.0.0 resolution: "safe-regex-test@npm:1.0.0" @@ -4809,6 +5248,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.1.4" + checksum: 10/b04de61114b10274d92e25b6de7ccb5de07f11ea15637ff636de4b5190c0f5cd8823fe586dde718504cf78055437d70fd8804976894df502fcf5a210c970afb3 + languageName: node + linkType: hard + "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" @@ -4850,6 +5300,20 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d + languageName: node + linkType: hard + "set-function-name@npm:^2.0.0, set-function-name@npm:^2.0.1": version: 2.0.1 resolution: "set-function-name@npm:2.0.1" @@ -4994,7 +5458,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.8": +"string.prototype.matchall@npm:^4.0.10, string.prototype.matchall@npm:^4.0.8": version: 4.0.10 resolution: "string.prototype.matchall@npm:4.0.10" dependencies: @@ -5246,6 +5710,17 @@ __metadata: languageName: node linkType: hard +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10/02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + "typed-array-byte-length@npm:^1.0.0": version: 1.0.0 resolution: "typed-array-byte-length@npm:1.0.0" @@ -5258,6 +5733,19 @@ __metadata: languageName: node linkType: hard +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10/e4a38329736fe6a73b52a09222d4a9e8de14caaa4ff6ad8e55217f6705b017d9815b7284c85065b3b8a7704e226ccff1372a72b78c2a5b6b71b7bf662308c903 + languageName: node + linkType: hard + "typed-array-byte-offset@npm:^1.0.0": version: 1.0.0 resolution: "typed-array-byte-offset@npm:1.0.0" @@ -5271,6 +5759,20 @@ __metadata: languageName: node linkType: hard +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10/ac26d720ebb2aacbc45e231347c359e6649f52e0cfe0e76e62005912f8030d68e4cb7b725b1754e8fdd48e433cb68df5a8620a3e420ad1457d666e8b29bf9150 + languageName: node + linkType: hard + "typed-array-length@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-length@npm:1.0.4" @@ -5282,23 +5784,37 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.3.3": - version: 5.3.3 - resolution: "typescript@npm:5.3.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 +"typed-array-length@npm:^1.0.5": + version: 1.0.5 + resolution: "typed-array-length@npm:1.0.5" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10/f9a0da99c41880b44e2c5e5d0d01515c2a6e0f54b10c594151804f013272d837df3b67ea84d7304ecfbab2c10d99c3372168bf3a4bd295abf13ac5a72f93054a languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": - version: 5.3.3 - resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" +"typescript@npm:^5.4.2": + version: 5.4.2 + resolution: "typescript@npm:5.4.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d + checksum: 10/f8cfdc630ab1672f004e9561eb2916935b2d267792d07ce93e97fc601c7a65191af32033d5e9c0169b7dc37da7db9bf320f7432bc84527cb7697effaa4e4559d + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.4.2#optional!builtin": + version: 5.4.2 + resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin::version=5.4.2&hash=d69c25" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/ef4fc2994cc0219dc9ada94c92106ba8d44cbfd7a0328ed6f8d730311caf66e114cdfa07fbc6f369bfc0fc182d9493851b3bf1644c06fc5818690b19ee960d72 languageName: node linkType: hard @@ -5428,6 +5944,19 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.14": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10/c3b6a99beadc971baa53c3ee5b749f2b9bdfa3b3b9a70650dd8511a48b61d877288b498d424712e9991d16019633086bd8b5923369460d93463c5825fa36c448 + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2"