Run prettier

This commit is contained in:
Jared Palmer 2023-06-02 15:33:48 -04:00
parent aa83a871dd
commit 417f69e0f1
34 changed files with 530 additions and 523 deletions

View file

@ -1,36 +1,36 @@
import * as React from "react";
import { VariantProps, cva } from "class-variance-authority";
import * as React from 'react'
import { VariantProps, cva } from 'class-variance-authority'
import { cn } from "@/lib/utils";
import { cn } from '@/lib/utils'
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background",
'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background',
{
variants: {
variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90",
default: 'bg-primary text-primary-foreground hover:bg-primary/90',
destructive:
"bg-destructive text-destructive-foreground hover:bg-destructive/90",
'bg-destructive text-destructive-foreground hover:bg-destructive/90',
outline:
"border border-input hover:bg-accent hover:text-accent-foreground",
'border border-input hover:bg-accent hover:text-accent-foreground',
secondary:
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
link: "underline-offset-4 hover:underline text-primary",
'bg-secondary text-secondary-foreground hover:bg-secondary/80',
ghost: 'hover:bg-accent hover:text-accent-foreground',
link: 'underline-offset-4 hover:underline text-primary'
},
size: {
default: "h-10 py-2 px-4",
sm: "h-9 px-3 rounded-md",
lg: "h-11 px-8 rounded-md",
xs: "h-6 px-3 rounded-md",
},
default: 'h-10 py-2 px-4',
sm: 'h-9 px-3 rounded-md',
lg: 'h-11 px-8 rounded-md',
xs: 'h-6 px-3 rounded-md'
}
},
defaultVariants: {
variant: "default",
size: "default",
},
variant: 'default',
size: 'default'
}
}
);
)
export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
@ -44,9 +44,9 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
ref={ref}
{...props}
/>
);
)
}
);
Button.displayName = "Button";
)
Button.displayName = 'Button'
export { Button, buttonVariants };
export { Button, buttonVariants }

View file

@ -1,83 +1,83 @@
"use client";
import { useCopyToClipboard } from "@/lib/hooks/use-copy-to-cliipboard";
import { Check, Clipboard, Download } from "lucide-react";
import { FC, memo } from "react";
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
import { coldarkDark } from "react-syntax-highlighter/dist/cjs/styles/prism";
'use client'
import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-cliipboard'
import { Check, Clipboard, Download } from 'lucide-react'
import { FC, memo } from 'react'
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
import { coldarkDark } from 'react-syntax-highlighter/dist/cjs/styles/prism'
interface Props {
language: string;
value: string;
language: string
value: string
}
interface languageMap {
[key: string]: string | undefined;
[key: string]: string | undefined
}
export const programmingLanguages: languageMap = {
javascript: ".js",
python: ".py",
java: ".java",
c: ".c",
cpp: ".cpp",
"c++": ".cpp",
"c#": ".cs",
ruby: ".rb",
php: ".php",
swift: ".swift",
"objective-c": ".m",
kotlin: ".kt",
typescript: ".ts",
go: ".go",
perl: ".pl",
rust: ".rs",
scala: ".scala",
haskell: ".hs",
lua: ".lua",
shell: ".sh",
sql: ".sql",
html: ".html",
css: ".css",
javascript: '.js',
python: '.py',
java: '.java',
c: '.c',
cpp: '.cpp',
'c++': '.cpp',
'c#': '.cs',
ruby: '.rb',
php: '.php',
swift: '.swift',
'objective-c': '.m',
kotlin: '.kt',
typescript: '.ts',
go: '.go',
perl: '.pl',
rust: '.rs',
scala: '.scala',
haskell: '.hs',
lua: '.lua',
shell: '.sh',
sql: '.sql',
html: '.html',
css: '.css'
// add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component
};
}
export const generateRandomString = (length: number, lowercase = false) => {
const chars = "ABCDEFGHJKLMNPQRSTUVWXY3456789"; // excluding similar looking characters like Z, 2, I, 1, O, 0
let result = "";
const chars = 'ABCDEFGHJKLMNPQRSTUVWXY3456789' // excluding similar looking characters like Z, 2, I, 1, O, 0
let result = ''
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
result += chars.charAt(Math.floor(Math.random() * chars.length))
}
return lowercase ? result.toLowerCase() : result;
};
return lowercase ? result.toLowerCase() : result
}
const CodeBlock: FC<Props> = memo(({ language, value }) => {
const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 });
const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 })
const downloadAsFile = () => {
if (typeof window === "undefined") {
return;
if (typeof window === 'undefined') {
return
}
const fileExtension = programmingLanguages[language] || ".file";
const fileExtension = programmingLanguages[language] || '.file'
const suggestedFileName = `file-${generateRandomString(
3,
true
)}${fileExtension}`;
const fileName = window.prompt("Enter file name" || "", suggestedFileName);
)}${fileExtension}`
const fileName = window.prompt('Enter file name' || '', suggestedFileName)
if (!fileName) {
// user pressed cancel on prompt
return;
return
}
const blob = new Blob([value], { type: "text/plain" });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.download = fileName;
link.href = url;
link.style.display = "none";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
};
const blob = new Blob([value], { type: 'text/plain' })
const url = URL.createObjectURL(blob)
const link = document.createElement('a')
link.download = fileName
link.href = url
link.style.display = 'none'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
URL.revokeObjectURL(url)
}
return (
<div className="codeblock relative w-full font-sans text-[16px]">
<div className="flex w-full items-center justify-between px-4 py-1.5">
@ -90,7 +90,7 @@ const CodeBlock: FC<Props> = memo(({ language, value }) => {
onClick={() => copyToClipboard(value)}
>
{isCopied ? <Check size={18} /> : <Clipboard size={18} />}
{isCopied ? "Copied!" : "Copy code"}
{isCopied ? 'Copied!' : 'Copy code'}
</button>
<button
type="button"
@ -107,21 +107,21 @@ const CodeBlock: FC<Props> = memo(({ language, value }) => {
style={coldarkDark}
customStyle={{
margin: 0,
width: "100%",
background: "transparent",
width: '100%',
background: 'transparent'
}}
codeTagProps={{
style: {
fontSize: "0.9rem",
fontFamily: "var(--font-mono)",
},
fontSize: '0.9rem',
fontFamily: 'var(--font-mono)'
}
}}
>
{value}
</SyntaxHighlighter>
</div>
);
});
CodeBlock.displayName = "CodeBlock";
)
})
CodeBlock.displayName = 'CodeBlock'
export default CodeBlock;
export default CodeBlock

View file

@ -1,15 +1,15 @@
"use client";
'use client'
import { useRouter } from "next/navigation";
import { useRouter } from 'next/navigation'
export function Login() {
const router = useRouter();
const router = useRouter()
return (
<button
className="inline-flex w-full items-center justify-center rounded border border-zinc-800 bg-white h-8 px-4 -my-1.5 text-sm leading-6 tracking-tight text-zinc-900 transition-colors ease-in-out hover:bg-zinc-100 disabled:cursor-not-allowed disabled:opacity-50"
onClick={() => router.push("/api/auth/signin")}
onClick={() => router.push('/api/auth/signin')}
>
<span className="font-medium">Login</span>
</button>
);
)
}

View file

@ -1,9 +1,9 @@
import { useId } from "react";
import { useId } from 'react'
export function NextChatLogo(
props: JSX.IntrinsicElements["svg"] & { inverted?: boolean }
props: JSX.IntrinsicElements['svg'] & { inverted?: boolean }
) {
const id = useId();
const id = useId()
return (
<svg
width={17}
@ -22,10 +22,10 @@ export function NextChatLogo(
y2="14.2667"
gradientUnits="userSpaceOnUse"
>
<stop stopColor={props.inverted ? "white" : "black"} />
<stop stopColor={props.inverted ? 'white' : 'black'} />
<stop
offset={1}
stopColor={props.inverted ? "white" : "black"}
stopColor={props.inverted ? 'white' : 'black'}
stopOpacity={0}
/>
</linearGradient>
@ -37,35 +37,35 @@ export function NextChatLogo(
y2="9.50002"
gradientUnits="userSpaceOnUse"
>
<stop stopColor={props.inverted ? "white" : "black"} />
<stop stopColor={props.inverted ? 'white' : 'black'} />
<stop
offset={1}
stopColor={props.inverted ? "white" : "black"}
stopColor={props.inverted ? 'white' : 'black'}
stopOpacity={0}
/>
</linearGradient>
</defs>
<path
d="M1 16L2.58314 11.2506C1.83084 9.74642 1.63835 8.02363 2.04013 6.39052C2.4419 4.75741 3.41171 3.32057 4.776 2.33712C6.1403 1.35367 7.81003 0.887808 9.4864 1.02289C11.1628 1.15798 12.7364 1.8852 13.9256 3.07442C15.1148 4.26363 15.842 5.83723 15.9771 7.5136C16.1122 9.18997 15.6463 10.8597 14.6629 12.224C13.6794 13.5883 12.2426 14.5581 10.6095 14.9599C8.97637 15.3616 7.25358 15.1692 5.74942 14.4169L1 16Z"
fill={props.inverted ? "black" : "white"}
stroke={props.inverted ? "black" : "white"}
fill={props.inverted ? 'black' : 'white'}
stroke={props.inverted ? 'black' : 'white'}
strokeWidth={2}
strokeLinecap="round"
strokeLinejoin="round"
/>
<mask
id="mask0_91_2047"
style={{ maskType: "alpha" }}
style={{ maskType: 'alpha' }}
maskUnits="userSpaceOnUse"
x={1}
y={0}
width={16}
height={16}
>
<circle cx={9} cy={8} r={8} fill={props.inverted ? "black" : "white"} />
<circle cx={9} cy={8} r={8} fill={props.inverted ? 'black' : 'white'} />
</mask>
<g mask="url(#mask0_91_2047)">
<circle cx={9} cy={8} r={8} fill={props.inverted ? "black" : "white"} />
<circle cx={9} cy={8} r={8} fill={props.inverted ? 'black' : 'white'} />
<path
d="M14.2896 14.0018L7.146 4.8H5.80005V11.1973H6.87681V6.16743L13.4444 14.6529C13.7407 14.4545 14.0231 14.2369 14.2896 14.0018Z"
fill={`url(#gradient-${id}-1)`}
@ -79,7 +79,7 @@ export function NextChatLogo(
/>
</g>
</svg>
);
)
}
NextChatLogo.displayName = "DevGPT-logo";
NextChatLogo.displayName = 'DevGPT-logo'

View file

@ -1,17 +1,17 @@
"use client";
import { ThemeToggle } from "@/components/theme-toggle";
import { type Session } from "@auth/nextjs/types";
import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
import Image from "next/image";
import { useRouter } from "next/navigation";
'use client'
import { ThemeToggle } from '@/components/theme-toggle'
import { type Session } from '@auth/nextjs/types'
import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
import { signIn } from '@auth/nextjs/client'
import Image from 'next/image'
import { useRouter } from 'next/navigation'
export interface UserMenuProps {
session: Session;
session: Session
}
export function UserMenu({ session }: UserMenuProps) {
const router = useRouter();
const router = useRouter()
return (
<div className="flex items-center justify-between">
<DropdownMenu.Root>
@ -22,8 +22,8 @@ export function UserMenu({ session }: UserMenuProps) {
width={24}
height={24}
className="h-6 w-6 rounded-full select-none ring-zinc-100/10 ring-1 hover:opacity-80 transition-opacity duration-300"
src={session.user?.image ? `${session.user.image}&s=60` : ""}
alt={session.user.name ?? "Avatar"}
src={session.user?.image ? `${session.user.image}&s=60` : ''}
alt={session.user.name ?? 'Avatar'}
/>
) : (
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-gradient-to-r from-cyan-500 to-blue-500 p-2 select-none">
@ -84,7 +84,7 @@ export function UserMenu({ session }: UserMenuProps) {
</DropdownMenu.Item>
<DropdownMenu.Item
className="py-2 px-3 hover:bg-zinc-200 dark:hover:bg-zinc-800 transition-colors duration-200 cursor-pointer text-xs focus:outline-none"
onClick={() => router.push("/api/auth/signout")}
onClick={() => router.push('/api/auth/signout')}
>
Log Out
</DropdownMenu.Item>
@ -92,7 +92,7 @@ export function UserMenu({ session }: UserMenuProps) {
</DropdownMenu.Portal>
</DropdownMenu.Root>
</div>
);
)
}
UserMenu.displayName = "UserMenu";
UserMenu.displayName = 'UserMenu'

View file

@ -1,4 +1,4 @@
import { cn } from "@/lib/utils";
import { cn } from '@/lib/utils'
export const VercelLogo = ({ className }: { className?: string }) => (
<svg
@ -7,8 +7,8 @@ export const VercelLogo = ({ className }: { className?: string }) => (
fill="none"
xmlns="http://www.w3.org/2000/svg"
aria-label="Vercel Logo"
className={cn(className, "dark:fill-white fill-black")}
className={cn(className, 'dark:fill-white fill-black')}
>
<path d="M117.082 0L234.164 202.794H0L117.082 0Z" fill="currentColor" />
</svg>
);
)