diff --git a/.gitignore b/.gitignore index 8ef90936..7d46bf4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,83 @@ +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + + # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies @@ -10,7 +90,6 @@ coverage # next.js .next/ -out/ build # misc @@ -32,6 +111,4 @@ yarn-error.log* # turbo .turbo -.idea - dist diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..b58b603f --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..ae4df6be --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,62 @@ + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..03d9549e --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 00000000..d23208fb --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 00000000..8004cebd --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 703546d9..ec41a063 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ Checkout [more options here](https://github.com/raineorshine/npm-check-updates#o - Update navbar - dropdown for homepage links - add blog - - make configurable -- Authentication +- Add social links in footer when sm screen +- Hide Sign in button on homepage - Projects - Groups/Permissions - Embed GitHub commit snippet @@ -52,6 +52,7 @@ Checkout [more options here](https://github.com/raineorshine/npm-check-updates#o - API: https://api.github.com/repos/yusanshi/emgithub/commits/7879e517c6b1d6f7b539a7770aba9feb46ff4672 - Fetch commit information and store in Dynammo db - API rate limiting for storing commit information + - https://docs.github.com/en/developers/apps/building-github-apps/rate-limits-for-github-apps - Getting commit info: https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#get-a-commit - Prism diff highlighter: https://prismjs.com/plugins/diff-highlight/ - Diff 2 html CLI: https://github.com/rtfpessoa/diff2html-cli diff --git a/apps/vighnesh153.com/.env.production b/apps/vighnesh153.com/.env.production new file mode 100644 index 00000000..9688f506 --- /dev/null +++ b/apps/vighnesh153.com/.env.production @@ -0,0 +1,4 @@ +GOOGLE_CLIENT_ID=... +GOOGLE_CLIENT_SECRET=... +NEXTAUTH_URL=https://vighnesh153.com +NEXTAUTH_SECRET="Charizard is the best and coolest pokemon ever ❤️" diff --git a/apps/vighnesh153.com/package.json b/apps/vighnesh153.com/package.json index 098a7fef..552b9ca6 100644 --- a/apps/vighnesh153.com/package.json +++ b/apps/vighnesh153.com/package.json @@ -19,6 +19,7 @@ "@vighnesh153/utils": "*", "eslint-config-vighnesh153": "*", "next": "^13.1.1", + "next-auth": "^4.18.8", "next-transpile-modules": "^10.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/apps/vighnesh153.com/src/modules/common/components/auth-box.tsx b/apps/vighnesh153.com/src/modules/common/components/auth-box.tsx new file mode 100644 index 00000000..dfcc78f7 --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/auth-box.tsx @@ -0,0 +1,25 @@ +import { useSession, signIn } from 'next-auth/react'; +import { CircularProgress, Box } from '@mui/material'; +import { not } from '@vighnesh153/utils'; +import { ProfileBox } from './profile-box'; +import { SignInButton } from './sign-in-button'; + +export function AuthBox() { + const { data: session, status } = useSession(); + const isLoading = status === 'loading'; + const user = session?.user; + + if (isLoading) { + return ( + + + + ); + } + + if (not(session) || not(session?.user)) { + return signIn('google')} />; + } + + return ; +} diff --git a/apps/vighnesh153.com/src/modules/common/components/index.ts b/apps/vighnesh153.com/src/modules/common/components/index.ts index 852e1cf6..e3114fc3 100644 --- a/apps/vighnesh153.com/src/modules/common/components/index.ts +++ b/apps/vighnesh153.com/src/modules/common/components/index.ts @@ -1,10 +1,12 @@ export * from './404-page'; export * from './aside-email-address'; export * from './aside-social-links'; +export * from './auth-box'; export * from './border-corner-animation-link'; export * from './focus-dashed-outline'; export * from './head'; export * from './navbar'; export * from './next-link'; +export * from './sign-in-button'; export * from './skip-to-main-content'; export * from './underlined-animation-link'; diff --git a/apps/vighnesh153.com/src/modules/common/components/navbar.tsx b/apps/vighnesh153.com/src/modules/common/components/navbar.tsx deleted file mode 100644 index 47169b59..00000000 --- a/apps/vighnesh153.com/src/modules/common/components/navbar.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import { RVLogoIcon } from '@vighnesh153/ui'; -import { Menu as MenuIcon } from '@mui/icons-material'; -import { - AppBar, - Box, - SwipeableDrawer, - IconButton, - List, - ListItem, - Toolbar, - Slide, - Typography, - useTheme, - useScrollTrigger, - alpha, -} from '@mui/material'; -import React, { useState } from 'react'; -import { useIsIOS, useWindowScrollAmount } from '@vighnesh153/react-hooks'; -import { not } from '@vighnesh153/utils'; -import { commonConstants } from '../constants'; -import { FocusDashedOutline } from './focus-dashed-outline'; -import { MuiNextLink } from './next-link'; - -interface NavItem { - label: string; - href: string; -} - -const drawerWidth = 320; -const navItems: NavItem[] = [ - { label: 'About', href: commonConstants.pageLinks.homePage.aboutSection }, - { - label: 'Experience', - href: commonConstants.pageLinks.homePage.experienceSection, - }, - { - label: 'Projects', - href: commonConstants.pageLinks.homePage.projectsSection, - }, - { - label: 'Contact', - href: commonConstants.pageLinks.homePage.contactMeSection, - }, - { label: 'Resume', href: commonConstants.resumeLink }, -]; - -function HideOnScroll(props: { children: React.ReactElement }) { - const trigger = useScrollTrigger(); - - return ( - - {props.children} - - ); -} - -function NavDrawer({ isOpen, updateIsOpen }: { isOpen: boolean; updateIsOpen: (newIsOpen: boolean) => void }) { - const theme = useTheme(); - const isIOS = useIsIOS(); - - const container = (() => { - try { - return window.document.body; - } catch (e) { - return undefined; - } - })(); - - const toggleDrawer = (newIsOpen = !isOpen) => updateIsOpen(newIsOpen); - - const drawer = ( - - - {navItems.map((item) => ( - - - toggleDrawer()} - href={item.href} - sx={{ - color: theme.palette.text.primary, - '&:is(:hover,:focus)': { - color: theme.palette.secondary.main, - }, - }} - > - - {item.label} - - - - - ))} - - - ); - - return ( - toggleDrawer(true)} - onClose={() => toggleDrawer()} - anchor="right" - disableBackdropTransition={not(isIOS)} - disableDiscovery={not(isIOS)} - ModalProps={{ - keepMounted: true, // Better open performance on mobile. - }} - sx={{ - display: { xs: 'block', md: 'none' }, - '& .MuiDrawer-paper': { - width: drawerWidth, - }, - }} - > - {drawer} - - ); -} - -export function Navbar() { - const theme = useTheme(); - const { scrollAmount: windowScrollAmount } = useWindowScrollAmount(); - const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false); - - const handleDrawerToggle = () => { - setMobileDrawerOpen((prevState) => !prevState); - }; - - const getAppBarBoxShadow = () => { - if (windowScrollAmount.scrollY < 70) { - return 'none'; - } - return `0 10px 30px -10px ${alpha(theme.palette.primary.dark, 0.7)}`; - }; - - return ( - - - - - - - - - - - - {navItems.map((item) => ( - - - {item.label} - - - ))} - - - - - - - - - - setMobileDrawerOpen(newIsOpen)} /> - - - ); -} diff --git a/apps/vighnesh153.com/src/modules/common/components/navbar/common.tsx b/apps/vighnesh153.com/src/modules/common/components/navbar/common.tsx new file mode 100644 index 00000000..3d4ad00e --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/navbar/common.tsx @@ -0,0 +1,65 @@ +import React, { ReactElement } from 'react'; +import { Slide, useScrollTrigger } from '@mui/material'; +import { not } from '@vighnesh153/utils'; +import { commonConstants } from '../../constants'; +import { AuthBox } from '../auth-box'; + +export function HideOnScroll(props: { children: React.ReactElement }) { + const trigger = useScrollTrigger(); + + return ( + + {props.children} + + ); +} + +export type NavItem = ({ label: string; href: string; type: 'link' } | { element: ReactElement; type: 'custom' }) & { + id: string; +}; + +export const drawerWidth = 320; +export const profileAndSignInId = 'profile-and-sign-in'; +export const navItems: NavItem[] = [ + { + id: 'about', + label: 'About', + href: commonConstants.pageLinks.homePage.aboutSection, + type: 'link', + }, + { + id: 'blog', + label: 'Blog', + href: commonConstants.pageLinks.homePage.blogsSection, + type: 'link', + }, + { + id: 'projects', + label: 'Projects', + href: commonConstants.pageLinks.homePage.projectsSection, + type: 'link', + }, + { + id: 'experience', + label: 'Experience', + href: commonConstants.pageLinks.homePage.experienceSection, + type: 'link', + }, + { + id: 'contact', + label: 'Contact', + href: commonConstants.pageLinks.homePage.contactMeSection, + type: 'link', + }, + { + id: 'resume', + label: 'Resume', + href: commonConstants.resumeLink, + type: 'link', + }, + { + id: profileAndSignInId, + element: , + type: 'custom', + }, +]; diff --git a/apps/vighnesh153.com/src/modules/common/components/navbar/index.ts b/apps/vighnesh153.com/src/modules/common/components/navbar/index.ts new file mode 100644 index 00000000..b2e1759c --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/navbar/index.ts @@ -0,0 +1 @@ +export * from './nav-row'; diff --git a/apps/vighnesh153.com/src/modules/common/components/navbar/nav-drawer.tsx b/apps/vighnesh153.com/src/modules/common/components/navbar/nav-drawer.tsx new file mode 100644 index 00000000..4fde99de --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/navbar/nav-drawer.tsx @@ -0,0 +1,106 @@ +import React from 'react'; +import { Box, List, ListItem, SwipeableDrawer, Typography, useTheme } from '@mui/material'; +import { useIsIOS } from '@vighnesh153/react-hooks'; +import { not } from '@vighnesh153/utils'; +import { FocusDashedOutline } from '../focus-dashed-outline'; +import { MuiNextLink } from '../next-link'; +import { drawerWidth, navItems, profileAndSignInId } from './common'; + +export interface NavDrawerProps { + isOpen: boolean; + updateIsOpen: (newIsOpen: boolean) => void; + showProfileAndSignInButton: boolean; +} + +export function NavDrawer({ isOpen, updateIsOpen, showProfileAndSignInButton }: NavDrawerProps) { + const theme = useTheme(); + const isIOS = useIsIOS(); + + const removeIds: string[] = []; + if (not(showProfileAndSignInButton)) { + removeIds.push(profileAndSignInId); + } + + const container = (() => { + try { + return window.document.body; + } catch (e) { + return undefined; + } + })(); + + const toggleDrawer = (newIsOpen = !isOpen) => updateIsOpen(newIsOpen); + + const drawer = ( + + + {navItems + .filter((item) => not(removeIds.includes(item.id))) + .map((item) => ( + + + {item.type === 'link' ? ( + toggleDrawer()} + href={item.href} + sx={{ + color: theme.palette.text.primary, + '&:is(:hover,:focus)': { + color: theme.palette.secondary.main, + }, + }} + > + + {item.label} + + + ) : ( + item.element + )} + + + ))} + + + ); + + return ( + toggleDrawer(true)} + onClose={() => toggleDrawer()} + anchor="right" + disableBackdropTransition={not(isIOS)} + disableDiscovery={not(isIOS)} + ModalProps={{ + keepMounted: true, // Better open performance on mobile. + }} + sx={{ + display: { xs: 'block', md: 'none' }, + '& .MuiDrawer-paper': { + width: drawerWidth, + }, + }} + > + {drawer} + + ); +} diff --git a/apps/vighnesh153.com/src/modules/common/components/navbar/nav-row.tsx b/apps/vighnesh153.com/src/modules/common/components/navbar/nav-row.tsx new file mode 100644 index 00000000..62443dcf --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/navbar/nav-row.tsx @@ -0,0 +1,114 @@ +import React, { useState } from 'react'; +import { alpha, AppBar, Box, IconButton, Toolbar, Typography, useTheme } from '@mui/material'; +import { Menu as MenuIcon } from '@mui/icons-material'; +import { RVLogoIcon } from '@vighnesh153/ui'; +import { useWindowScrollAmount } from '@vighnesh153/react-hooks'; +import { not } from '@vighnesh153/utils'; +import { FocusDashedOutline } from '../focus-dashed-outline'; +import { MuiNextLink } from '../next-link'; +import { HideOnScroll, navItems, profileAndSignInId } from './common'; +import { NavDrawer } from './nav-drawer'; + +export interface NavbarProps { + showProfileAndSignInButton?: boolean; +} + +export function Navbar({ showProfileAndSignInButton = true }: NavbarProps) { + const theme = useTheme(); + const { scrollAmount: windowScrollAmount } = useWindowScrollAmount(); + const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false); + + const removeIds: string[] = []; + if (not(showProfileAndSignInButton)) { + removeIds.push(profileAndSignInId); + } + + const handleDrawerToggle = () => { + setMobileDrawerOpen((prevState) => !prevState); + }; + + const getAppBarBoxShadow = () => { + if (windowScrollAmount.scrollY < 70) { + return 'none'; + } + return `0 10px 30px -10px ${alpha(theme.palette.primary.dark, 0.7)}`; + }; + + return ( + + + + + + + + + + + + {navItems + .filter((item) => not(removeIds.includes(item.id))) + .map((item) => + item.type === 'link' ? ( + + + {item.label} + + + ) : ( + {item.element} + ) + )} + + + + + + + + + + setMobileDrawerOpen(newIsOpen)} + showProfileAndSignInButton={showProfileAndSignInButton} + /> + + + ); +} diff --git a/apps/vighnesh153.com/src/modules/common/components/profile-box.tsx b/apps/vighnesh153.com/src/modules/common/components/profile-box.tsx new file mode 100644 index 00000000..a0730f30 --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/profile-box.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { signOut } from 'next-auth/react'; +import { IconButton, Avatar, Box, useTheme, Menu, MenuItem } from '@mui/material'; + +export interface ProfileBoxProps { + user?: { + name?: string | null; + image?: string | null; + email?: string | null; + }; +} + +export function ProfileBox({ user }: ProfileBoxProps) { + const theme = useTheme(); + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const handleLogout = () => { + handleClose(); + void signOut(); + }; + + return ( + + + + + + Logout + + + ); +} diff --git a/apps/vighnesh153.com/src/modules/common/components/sign-in-button.tsx b/apps/vighnesh153.com/src/modules/common/components/sign-in-button.tsx new file mode 100644 index 00000000..c6a5b553 --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/components/sign-in-button.tsx @@ -0,0 +1,10 @@ +import { Button, ButtonProps } from '@mui/material'; +import { CgProfile } from 'react-icons/cg'; + +export function SignInButton(props: ButtonProps) { + return ( + + ); +} diff --git a/apps/vighnesh153.com/src/modules/common/config/server-config.ts b/apps/vighnesh153.com/src/modules/common/config/server-config.ts new file mode 100644 index 00000000..8ac914eb --- /dev/null +++ b/apps/vighnesh153.com/src/modules/common/config/server-config.ts @@ -0,0 +1,19 @@ +/// +/// Do not import this file in client side code. No security risk, but it will +/// just throw "notFound" error. +/// + +function envVarNotFound(name: string): string { + throw new Error(`"${name}" isn't provided in environment variables.`); +} + +export const serverConfig = { + oauth: { + providers: { + google: { + clientId: process.env.GOOGLE_CLIENT_ID ?? envVarNotFound('GOOGLE_CLIENT_ID'), + clientSecret: process.env.GOOGLE_CLIENT_SECRET ?? envVarNotFound('GOOGLE_CLIENT_SECRET'), + }, + }, + }, +}; diff --git a/apps/vighnesh153.com/src/modules/common/constants/index.tsx b/apps/vighnesh153.com/src/modules/common/constants/index.tsx index 53a848bb..83c0e4f7 100644 --- a/apps/vighnesh153.com/src/modules/common/constants/index.tsx +++ b/apps/vighnesh153.com/src/modules/common/constants/index.tsx @@ -48,7 +48,8 @@ export const commonConstants = { homePage: { aboutSection: '/#about', experienceSection: '/#experience', - projectsSection: '/#projects', + blogsSection: '/blogs', + projectsSection: '/projects', contactMeSection: '/#contact', }, }, diff --git a/apps/vighnesh153.com/src/modules/common/icons/index.ts b/apps/vighnesh153.com/src/modules/common/icons/index.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/vighnesh153.com/src/pages/_app.tsx b/apps/vighnesh153.com/src/pages/_app.tsx index 67ec2ce0..aa0f8be5 100644 --- a/apps/vighnesh153.com/src/pages/_app.tsx +++ b/apps/vighnesh153.com/src/pages/_app.tsx @@ -3,21 +3,24 @@ import '@vighnesh153/ui/src/imports'; import { VighneshThemeProvider } from '@vighnesh153/ui'; import type { AppProps } from 'next/app'; +import { SessionProvider } from 'next-auth/react'; import { alpha, Box } from '@mui/material'; -export default function App({ Component, pageProps }: AppProps) { +export default function App({ Component, pageProps: { session, ...pageProps } }: AppProps) { return ( - - alpha(theme.palette.primary.light, 0.9), - color: (theme) => theme.palette.secondary.main, - }, - }} - > - - - + + + alpha(theme.palette.primary.light, 0.9), + color: (theme) => theme.palette.secondary.main, + }, + }} + > + + + + ); } diff --git a/apps/vighnesh153.com/src/pages/api/auth/[...nextauth].ts b/apps/vighnesh153.com/src/pages/api/auth/[...nextauth].ts new file mode 100644 index 00000000..24b2aa5b --- /dev/null +++ b/apps/vighnesh153.com/src/pages/api/auth/[...nextauth].ts @@ -0,0 +1,30 @@ +import NextAuth, { AuthOptions } from 'next-auth'; +import GoogleProvider, { GoogleProfile } from 'next-auth/providers/google'; +import { serverConfig } from '@modules/common/config/server-config'; + +export const authOptions: AuthOptions = { + providers: [ + GoogleProvider({ + clientId: serverConfig.oauth.providers.google.clientId, + clientSecret: serverConfig.oauth.providers.google.clientSecret, + authorization: { + params: { + prompt: 'consent', + access_type: 'offline', + response_type: 'code', + }, + }, + }), + ], + callbacks: { + async signIn({ account, profile }) { + if (account?.provider === 'google') { + const googleProfile = profile as GoogleProfile; + return googleProfile.email_verified; + } + return false; + }, + }, +}; + +export default NextAuth(authOptions); diff --git a/package-lock.json b/package-lock.json index 8819769d..ec717ff2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,7 @@ "@vighnesh153/utils": "*", "eslint-config-vighnesh153": "*", "next": "^13.1.1", + "next-auth": "^4.18.8", "next-transpile-modules": "^10.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -1794,6 +1795,79 @@ } } }, + "node_modules/@mui/lab": { + "version": "5.0.0-alpha.115", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.115.tgz", + "integrity": "sha512-3u9gRiTboC1tj1Vf8Fse1EaIaJaBwE5M/9NTr4Yp/7seFpIFgL5t/2auM+r9mohqzHT6wP6HWvPAB+OZ9q0/yg==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@mui/base": "5.0.0-alpha.113", + "@mui/system": "^5.11.4", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/lab/node_modules/@mui/base": { + "version": "5.0.0-alpha.113", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.113.tgz", + "integrity": "sha512-XSjvyQWATM8uk+EJZvYna8D21kOXC42lwb3q4K70btuGieKlCIQLaHTTDV2OfD4+JfT4o3NJy3I4Td2co31RZA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/material": { "version": "5.11.3", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.3.tgz", @@ -1896,9 +1970,9 @@ } }, "node_modules/@mui/system": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.2.tgz", - "integrity": "sha512-PPkYhrcP2MkhscX6SauIl0wPgra0w1LGPtll+hIKc2Z2JbGRSrUCFif93kxejB7I1cAoCay9jWW4mnNhsOqF/g==", + "version": "5.11.4", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.4.tgz", + "integrity": "sha512-fE2Ts33V5zh7ouciwXgMm/a6sLvjIj9OMeojuHNYY7BStTxparC/Fp9CNUZNJwt76U6ZJC59aYScFSRQKbW08g==", "dependencies": { "@babel/runtime": "^7.20.7", "@mui/private-theming": "^5.11.2", @@ -2406,6 +2480,14 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@panva/hkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz", + "integrity": "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/@pkgr/utils": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", @@ -4126,6 +4208,14 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/core-js-pure": { "version": "3.27.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", @@ -7468,6 +7558,14 @@ "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, + "node_modules/jose": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.11.2.tgz", + "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-sdsl": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", @@ -8754,6 +8852,36 @@ } } }, + "node_modules/next-auth": { + "version": "4.18.8", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.18.8.tgz", + "integrity": "sha512-USP8ihmvB7iCGtkS0+toe2QPrzdbZfkydQZX56JOI9Ft5n/BardOXh3D4wQ2An+vpq/jDKojGlgfv21wVElW7A==", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@panva/hkdf": "^1.0.1", + "cookie": "^0.5.0", + "jose": "^4.9.3", + "oauth": "^0.9.15", + "openid-client": "^5.1.0", + "preact": "^10.6.3", + "preact-render-to-string": "^5.1.19", + "uuid": "^8.3.2" + }, + "engines": { + "node": "^12.19.0 || ^14.15.0 || ^16.13.0 || ^18.12.0" + }, + "peerDependencies": { + "next": "^12.2.5 || ^13", + "nodemailer": "^6.6.5", + "react": "^17.0.2 || ^18", + "react-dom": "^17.0.2 || ^18" + }, + "peerDependenciesMeta": { + "nodemailer": { + "optional": true + } + } + }, "node_modules/next-transpile-modules": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-10.0.0.tgz", @@ -9356,6 +9484,11 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9364,6 +9497,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -9454,6 +9595,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/oidc-token-hash": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz", + "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9493,6 +9642,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openid-client": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.3.1.tgz", + "integrity": "sha512-RLfehQiHch9N6tRWNx68cicf3b1WR0x74bJWHRc25uYIbSRwjxYcTFaRnzbbpls5jroLAaB/bFIodTgA5LJMvw==", + "dependencies": { + "jose": "^4.10.0", + "lru-cache": "^6.0.0", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -9829,6 +9992,31 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/preact": { + "version": "10.11.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", + "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", + "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", + "dependencies": { + "pretty-format": "^3.8.0" + }, + "peerDependencies": { + "preact": ">=10" + } + }, + "node_modules/preact-render-to-string/node_modules/pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -11923,6 +12111,14 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -12345,6 +12541,7 @@ "@emotion/styled": "^11.10.5", "@fontsource/roboto": "^4.5.8", "@mui/icons-material": "^5.11.0", + "@mui/lab": "^5.0.0-alpha.115", "@mui/material": "^5.11.3", "@mui/utils": "^5.11.2", "clsx": "^1.2.1", @@ -13711,6 +13908,38 @@ "@babel/runtime": "^7.20.6" } }, + "@mui/lab": { + "version": "5.0.0-alpha.115", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.115.tgz", + "integrity": "sha512-3u9gRiTboC1tj1Vf8Fse1EaIaJaBwE5M/9NTr4Yp/7seFpIFgL5t/2auM+r9mohqzHT6wP6HWvPAB+OZ9q0/yg==", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/base": "5.0.0-alpha.113", + "@mui/system": "^5.11.4", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "@mui/base": { + "version": "5.0.0-alpha.113", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.113.tgz", + "integrity": "sha512-XSjvyQWATM8uk+EJZvYna8D21kOXC42lwb3q4K70btuGieKlCIQLaHTTDV2OfD4+JfT4o3NJy3I4Td2co31RZA==", + "requires": { + "@babel/runtime": "^7.20.7", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + } + } + }, "@mui/material": { "version": "5.11.3", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.3.tgz", @@ -13752,9 +13981,9 @@ } }, "@mui/system": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.2.tgz", - "integrity": "sha512-PPkYhrcP2MkhscX6SauIl0wPgra0w1LGPtll+hIKc2Z2JbGRSrUCFif93kxejB7I1cAoCay9jWW4mnNhsOqF/g==", + "version": "5.11.4", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.4.tgz", + "integrity": "sha512-fE2Ts33V5zh7ouciwXgMm/a6sLvjIj9OMeojuHNYY7BStTxparC/Fp9CNUZNJwt76U6ZJC59aYScFSRQKbW08g==", "requires": { "@babel/runtime": "^7.20.7", "@mui/private-theming": "^5.11.2", @@ -14048,6 +14277,11 @@ } } }, + "@panva/hkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz", + "integrity": "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==" + }, "@pkgr/utils": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", @@ -14501,6 +14735,7 @@ "@emotion/styled": "^11.10.5", "@fontsource/roboto": "^4.5.8", "@mui/icons-material": "^5.11.0", + "@mui/lab": "^5.0.0-alpha.115", "@mui/material": "^5.11.3", "@mui/utils": "^5.11.2", "@types/node": "^18.11.18", @@ -15378,6 +15613,11 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, "core-js-pure": { "version": "3.27.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", @@ -17840,6 +18080,11 @@ "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true }, + "jose": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.11.2.tgz", + "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==" + }, "js-sdsl": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", @@ -18806,6 +19051,22 @@ "styled-jsx": "5.1.1" } }, + "next-auth": { + "version": "4.18.8", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.18.8.tgz", + "integrity": "sha512-USP8ihmvB7iCGtkS0+toe2QPrzdbZfkydQZX56JOI9Ft5n/BardOXh3D4wQ2An+vpq/jDKojGlgfv21wVElW7A==", + "requires": { + "@babel/runtime": "^7.16.3", + "@panva/hkdf": "^1.0.1", + "cookie": "^0.5.0", + "jose": "^4.9.3", + "oauth": "^0.9.15", + "openid-client": "^5.1.0", + "preact": "^10.6.3", + "preact-render-to-string": "^5.1.19", + "uuid": "^8.3.2" + } + }, "next-transpile-modules": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-10.0.0.tgz", @@ -19274,11 +19535,21 @@ "set-blocking": "^2.0.0" } }, + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -19339,6 +19610,11 @@ "es-abstract": "^1.20.4" } }, + "oidc-token-hash": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz", + "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -19366,6 +19642,17 @@ "is-wsl": "^2.2.0" } }, + "openid-client": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.3.1.tgz", + "integrity": "sha512-RLfehQiHch9N6tRWNx68cicf3b1WR0x74bJWHRc25uYIbSRwjxYcTFaRnzbbpls5jroLAaB/bFIodTgA5LJMvw==", + "requires": { + "jose": "^4.10.0", + "lru-cache": "^6.0.0", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + } + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -19589,6 +19876,26 @@ "source-map-js": "^1.0.2" } }, + "preact": { + "version": "10.11.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", + "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==" + }, + "preact-render-to-string": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", + "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", + "requires": { + "pretty-format": "^3.8.0" + }, + "dependencies": { + "pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" + } + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -21095,6 +21402,11 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -21155,6 +21467,7 @@ "@vighnesh153/utils": "*", "eslint-config-vighnesh153": "*", "next": "^13.1.1", + "next-auth": "^4.18.8", "next-transpile-modules": "^10.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/eslint-config-vighnesh153/ts-base.eslintrc.js b/packages/eslint-config-vighnesh153/ts-base.eslintrc.js index 629eff2c..ccebf5b7 100644 --- a/packages/eslint-config-vighnesh153/ts-base.eslintrc.js +++ b/packages/eslint-config-vighnesh153/ts-base.eslintrc.js @@ -66,6 +66,7 @@ module.exports = { 'no-unused-vars': 'error', 'no-use-before-define': 'error', 'no-useless-constructor': 'error', + 'no-void': 'off', 'object-curly-newline': [ 'error', { diff --git a/packages/ui/package.json b/packages/ui/package.json index 3db1794b..ff5b95c6 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -26,6 +26,7 @@ "@emotion/styled": "^11.10.5", "@fontsource/roboto": "^4.5.8", "@mui/icons-material": "^5.11.0", + "@mui/lab": "^5.0.0-alpha.115", "@mui/material": "^5.11.3", "@mui/utils": "^5.11.2", "clsx": "^1.2.1", diff --git a/turbo.json b/turbo.json index 7750f17b..7c5ad257 100644 --- a/turbo.json +++ b/turbo.json @@ -6,6 +6,12 @@ "test", "^build" ], + "env": [ + "GOOGLE_CLIENT_ID", + "GOOGLE_CLIENT_SECRET", + "NEXTAUTH_SECRET", + "NEXTAUTH_URL" + ], "outputs": [ "dist/**", ".next/**"