From 331f6633caee7ea08433a5f27fc0ef9919e5e514 Mon Sep 17 00:00:00 2001 From: annie Date: Fri, 28 Jun 2024 16:06:33 -0700 Subject: [PATCH] init --- .env | 3 + .eslintignore | 20 ++ .eslintrc.json | 92 +++++++ .gitignore | 35 +++ .npmrc | 1 + .vscode/settings.json | 3 + README.md | 53 ++++ app/api/chat/route.ts | 16 ++ app/api/get-access-token/route.ts | 30 +++ app/error.tsx | 31 +++ app/layout.tsx | 59 +++++ app/page.tsx | 37 +++ app/providers.tsx | 22 ++ components/Icons.tsx | 81 ++++++ components/NavBar.tsx | 46 ++++ components/StreamingAvatar.tsx | 332 ++++++++++++++++++++++++ components/StreamingAvatarCode.tsx | 98 +++++++ components/StreamingAvatarTextInput.tsx | 67 +++++ components/ThemeSwitch.tsx | 80 ++++++ next.config.js | 4 + package.json | 64 +++++ postcss.config.js | 6 + public/favicon.ico | Bin 0 -> 25931 bytes public/heygen-logo.png | Bin 0 -> 72840 bytes public/next.svg | 1 + public/vercel.svg | 1 + styles/globals.css | 9 + tailwind.config.js | 20 ++ tsconfig.json | 28 ++ 29 files changed, 1239 insertions(+) create mode 100644 .env create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 app/api/chat/route.ts create mode 100644 app/api/get-access-token/route.ts create mode 100644 app/error.tsx create mode 100644 app/layout.tsx create mode 100644 app/page.tsx create mode 100644 app/providers.tsx create mode 100644 components/Icons.tsx create mode 100644 components/NavBar.tsx create mode 100644 components/StreamingAvatar.tsx create mode 100644 components/StreamingAvatarCode.tsx create mode 100644 components/StreamingAvatarTextInput.tsx create mode 100644 components/ThemeSwitch.tsx create mode 100644 next.config.js create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/favicon.ico create mode 100644 public/heygen-logo.png create mode 100644 public/next.svg create mode 100644 public/vercel.svg create mode 100644 styles/globals.css create mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.env b/.env new file mode 100644 index 0000000..cb4caa2 --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +HEYGEN_API_KEY=your Heygen API key +OPENAI_API_KEY=your OpenAI API key +NEXT_PUBLIC_OPENAI_API_KEY=your OpenAI API key \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..af6ab76 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,20 @@ +.now/* +*.css +.changeset +dist +esm/* +public/* +tests/* +scripts/* +*.config.js +.DS_Store +node_modules +coverage +.next +build +!.commitlintrc.cjs +!.lintstagedrc.cjs +!jest.config.js +!plopfile.js +!react-shim.js +!tsup.config.ts \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..d3067d4 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,92 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc.json", + "env": { + "browser": false, + "es2021": true, + "node": true + }, + "extends": [ + "plugin:react/recommended", + "plugin:prettier/recommended", + "plugin:react-hooks/recommended", + "plugin:jsx-a11y/recommended" + ], + "plugins": ["react", "unused-imports", "import", "@typescript-eslint", "jsx-a11y", "prettier"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 12, + "sourceType": "module" + }, + "settings": { + "react": { + "version": "detect" + } + }, + "rules": { + "no-console": "warn", + "react/prop-types": "off", + "react/jsx-uses-react": "off", + "react/react-in-jsx-scope": "off", + "react-hooks/exhaustive-deps": "off", + "jsx-a11y/click-events-have-key-events": "warn", + "jsx-a11y/interactive-supports-focus": "warn", + "prettier/prettier": "warn", + "no-unused-vars": "off", + "unused-imports/no-unused-vars": "off", + "unused-imports/no-unused-imports": "warn", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "after-used", + "ignoreRestSiblings": false, + "argsIgnorePattern": "^_.*?$" + } + ], + "import/order": [ + "warn", + { + "groups": [ + "type", + "builtin", + "object", + "external", + "internal", + "parent", + "sibling", + "index" + ], + "pathGroups": [ + { + "pattern": "~/**", + "group": "external", + "position": "after" + } + ], + "newlines-between": "always" + } + ], + "react/self-closing-comp": "warn", + "react/jsx-sort-props": [ + "warn", + { + "callbacksLast": true, + "shorthandFirst": true, + "noSortAlphabetically": false, + "reservedFirst": true + } + ], + "padding-line-between-statements": [ + "warn", + {"blankLine": "always", "prev": "*", "next": "return"}, + {"blankLine": "always", "prev": ["const", "let", "var"], "next": "*"}, + { + "blankLine": "any", + "prev": ["const", "let", "var"], + "next": ["const", "let", "var"] + } + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f322f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3662b37 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..08df0a9 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Next.js & NextUI Template + +This is a template for creating applications using Next.js 14 (app directory) and NextUI (v2). + +[Try it on CodeSandbox](https://githubbox.com/nextui-org/next-app-template) + +## Technologies Used + +- [Next.js 14](https://nextjs.org/docs/getting-started) +- [NextUI v2](https://nextui.org/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Tailwind Variants](https://tailwind-variants.org) +- [TypeScript](https://www.typescriptlang.org/) +- [Framer Motion](https://www.framer.com/motion/) +- [next-themes](https://github.com/pacocoursey/next-themes) + +## How to Use + +### Use the template with create-next-app + +To create a new project based on this template using `create-next-app`, run the following command: + +```bash +npx create-next-app -e https://github.com/nextui-org/next-app-template +``` + +### Install dependencies + +You can use one of them `npm`, `yarn`, `pnpm`, `bun`, Example using `npm`: + +```bash +npm install +``` + +### Run the development server + +```bash +npm run dev +``` + +### Setup pnpm (optional) + +If you are using `pnpm`, you need to add the following code to your `.npmrc` file: + +```bash +public-hoist-pattern[]=*@nextui-org/* +``` + +After modifying the `.npmrc` file, you need to run `pnpm install` again to ensure that the dependencies are installed correctly. + +## License + +Licensed under the [MIT license](https://github.com/nextui-org/next-app-template/blob/main/LICENSE). diff --git a/app/api/chat/route.ts b/app/api/chat/route.ts new file mode 100644 index 0000000..a085638 --- /dev/null +++ b/app/api/chat/route.ts @@ -0,0 +1,16 @@ +import { openai } from "@ai-sdk/openai"; +import { streamText } from "ai"; + +// Allow streaming responses up to 30 seconds +export const maxDuration = 30; + +export async function POST(req: Request) { + const { messages } = await req.json(); + + const result = await streamText({ + model: openai("gpt-4-turbo"), + messages, + }); + + return result.toAIStreamResponse(); +} diff --git a/app/api/get-access-token/route.ts b/app/api/get-access-token/route.ts new file mode 100644 index 0000000..7d5ba94 --- /dev/null +++ b/app/api/get-access-token/route.ts @@ -0,0 +1,30 @@ +const HEYGEN_API_KEY = process.env.HEYGEN_API_KEY; + +export async function POST() { + try { + if (!HEYGEN_API_KEY) { + throw new Error("API key is missing from .env"); + } + + const res = await fetch( + "https://api.heygen.com/v1/streaming.create_token", + { + method: "POST", + headers: { + "x-api-key": HEYGEN_API_KEY, + }, + } + ); + const data = await res.json(); + + return new Response(data.data.token, { + status: 200, + }); + } catch (error) { + console.error("Error retrieving access token:", error); + + return new Response("Failed to retrieve access token", { + status: 500, + }); + } +} diff --git a/app/error.tsx b/app/error.tsx new file mode 100644 index 0000000..9ed5104 --- /dev/null +++ b/app/error.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { useEffect } from "react"; + +export default function Error({ + error, + reset, +}: { + error: Error; + reset: () => void; +}) { + useEffect(() => { + // Log the error to an error reporting service + /* eslint-disable no-console */ + console.error(error); + }, [error]); + + return ( +
+

Something went wrong!

+ +
+ ); +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..f1b1472 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,59 @@ +import "@/styles/globals.css"; +import clsx from "clsx"; +import { Metadata, Viewport } from "next"; + +import { Providers } from "./providers"; + +import { Fira_Code as FontMono, Inter as FontSans } from "next/font/google"; +import NavBar from "@/components/NavBar"; + +const fontSans = FontSans({ + subsets: ["latin"], + variable: "--font-sans", +}); + +const fontMono = FontMono({ + subsets: ["latin"], + variable: "--font-geist-mono", +}); + +export const metadata: Metadata = { + title: { + default: "HeyGen Streaming Avatar SDK Demo", + template: `%s - HeyGen Streaming Avatar SDK Demo`, + }, + icons: { + icon: "/heygen-logo.png", + }, +}; + +export const viewport: Viewport = { + themeColor: [ + { media: "(prefers-color-scheme: light)", color: "white" }, + { media: "(prefers-color-scheme: dark)", color: "black" }, + ], +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + +
+ + {children} +
+
+ + + ); +} diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..6934227 --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,37 @@ +"use client"; + +import NavBar from "@/components/NavBar"; +import StreamingAvatar from "@/components/StreamingAvatar"; +import StreamingAvatarCode from "@/components/StreamingAvatarCode"; +import { Tab, Tabs } from "@nextui-org/react"; + +export default function App() { + const tabs = [ + { + id: "demo", + label: "Demo", + content: , + }, + { + id: "code", + label: "Code", + content: , + }, + ]; + + return ( +
+
+
+ + {(items) => ( + + {items.content} + + )} + +
+
+
+ ); +} diff --git a/app/providers.tsx b/app/providers.tsx new file mode 100644 index 0000000..9a1ac92 --- /dev/null +++ b/app/providers.tsx @@ -0,0 +1,22 @@ +"use client"; + +import * as React from "react"; +import { NextUIProvider } from "@nextui-org/system"; +import { useRouter } from "next/navigation"; +import { ThemeProvider as NextThemesProvider } from "next-themes"; +import { ThemeProviderProps } from "next-themes/dist/types"; + +export interface ProvidersProps { + children: React.ReactNode; + themeProps?: ThemeProviderProps; +} + +export function Providers({ children, themeProps }: ProvidersProps) { + const router = useRouter(); + + return ( + + {children} + + ); +} diff --git a/components/Icons.tsx b/components/Icons.tsx new file mode 100644 index 0000000..0e0d8d8 --- /dev/null +++ b/components/Icons.tsx @@ -0,0 +1,81 @@ +export function HeyGenLogo() { + return HeyGen Logo; +} + +type IconSvgProps = { + size?: number; + width?: number; + height?: number; + className?: string; +}; + +export function GithubIcon({ + size = 24, + width, + height, + ...props +}: IconSvgProps) { + return ( + + + + ); +} + +export function MoonFilledIcon({ + size = 24, + width, + height, + ...props +}: IconSvgProps) { + return ( + + ); +} + +export function SunFilledIcon({ + size = 24, + width, + height, + ...props +}: IconSvgProps) { + return ( + + ); +} diff --git a/components/NavBar.tsx b/components/NavBar.tsx new file mode 100644 index 0000000..f066a95 --- /dev/null +++ b/components/NavBar.tsx @@ -0,0 +1,46 @@ +import { + Link, + Navbar, + NavbarBrand, + NavbarContent, + NavbarItem, +} from "@nextui-org/react"; +import { GithubIcon, HeyGenLogo } from "./Icons"; +import { ThemeSwitch } from "./ThemeSwitch"; + +export default function NavBar() { + return ( + + + + + +
+

+ HeyGen Streaming Avatar SDK NextJS Demo +

+
+
+ + + + API Docs + + + + SDK Github + + + + +
+ ); +} diff --git a/components/StreamingAvatar.tsx b/components/StreamingAvatar.tsx new file mode 100644 index 0000000..83b6084 --- /dev/null +++ b/components/StreamingAvatar.tsx @@ -0,0 +1,332 @@ +import { + Configuration, + NewSessionData, + StreamingAvatarApi, +} from "@heygen/streaming-avatar"; +import { + Button, + Card, + CardBody, + CardFooter, + Divider, + Input, + Spinner, + Tooltip, +} from "@nextui-org/react"; +import { useChat } from "ai/react"; +import OpenAI from "openai"; +import { useEffect, useRef, useState } from "react"; +import StreamingAvatarTextInput from "./StreamingAvatarTextInput"; +import { + Camera, + Microphone, + MicrophoneSlash, + MicrophoneStage, + Record, +} from "@phosphor-icons/react"; +import clsx from "clsx"; + +const openai = new OpenAI({ + apiKey: process.env.NEXT_PUBLIC_OPENAI_API_KEY, + dangerouslyAllowBrowser: true, +}); + +export default function StreamingAvatar() { + const [loading, setLoading] = useState(false); + const [stream, setStream] = useState(); + const [debug, setDebug] = useState(); + const [avatarId, setAvatarId] = useState(""); + const [voiceId, setVoiceId] = useState(""); + const [data, setData] = useState(); + const [text, setText] = useState(""); + const [initialized, setInitialized] = useState(false); // Track initialization + const [recording, setRecording] = useState(false); // Track recording state + const mediaStream = useRef(null); + const avatar = useRef(null); + const mediaRecorder = useRef(null); + const audioChunks = useRef([]); + const { input, setInput, isLoading, handleSubmit } = useChat({ + onFinish: async (message) => { + console.log("ChatGPT Response:", message); + + if (!initialized || !avatar.current) { + setDebug("Avatar API not initialized"); + return; + } + + //send the ChatGPT response to the Streaming Avatar + await avatar.current + .speak({ + taskRequest: { text: message.content, sessionId: data?.sessionId }, + }) + .catch((e) => { + setDebug(e.message); + }); + }, + }); + + async function fetchAccessToken() { + try { + const response = await fetch("/api/get-access-token", { + method: "POST", + }); + const token = await response.text(); + console.log("Access Token:", token); // Log the token to verify + return token; + } catch (error) { + console.error("Error fetching access token:", error); + return ""; + } + } + + async function start() { + setLoading(true); + await updateToken(); + if (!avatar.current) { + setDebug("Avatar API is not initialized"); + return; + } + try { + const res = await avatar.current.createStartAvatar( + { + newSessionRequest: { + quality: "low", + avatarName: avatarId, + voice: { voiceId: voiceId }, + }, + }, + setDebug + ); + setData(res); + setStream(avatar.current.mediaStream); + setLoading(false); + } catch (error) { + console.error("Error starting avatar session:", error); + } + } + + async function updateToken() { + const newToken = await fetchAccessToken(); + console.log("Updating Access Token:", newToken); // Log token for debugging + avatar.current = new StreamingAvatarApi( + new Configuration({ accessToken: newToken }) + ); + + const startTalkCallback = (e: any) => { + console.log("Avatar started talking", e); + }; + + const stopTalkCallback = (e: any) => { + console.log("Avatar stopped talking", e); + }; + + console.log("Adding event handlers:", avatar.current); + avatar.current.addEventHandler("avatar_start_talking", startTalkCallback); + avatar.current.addEventHandler("avatar_stop_talking", stopTalkCallback); + + setInitialized(true); + } + + async function stop() { + if (!initialized || !avatar.current) { + setDebug("Avatar API not initialized"); + return; + } + await avatar.current.stopAvatar( + { stopSessionRequest: { sessionId: data?.sessionId } }, + setDebug + ); + } + + async function handleSpeak() { + if (!initialized || !avatar.current) { + setDebug("Avatar API not initialized"); + return; + } + await avatar.current + .speak({ taskRequest: { text: text, sessionId: data?.sessionId } }) + .catch((e) => { + setDebug(e.message); + }); + } + + useEffect(() => { + async function init() { + const newToken = await fetchAccessToken(); + console.log("Initializing with Access Token:", newToken); // Log token for debugging + avatar.current = new StreamingAvatarApi( + new Configuration({ accessToken: newToken, jitterBuffer: 200 }) + ); + setInitialized(true); // Set initialized to true + } + init(); + + return () => { + stop(); + }; + }, []); + + useEffect(() => { + if (stream && mediaStream.current) { + mediaStream.current.srcObject = stream; + mediaStream.current.onloadedmetadata = () => { + mediaStream.current!.play(); + setDebug("Playing"); + }; + } + }, [mediaStream, stream]); + + function startRecording() { + navigator.mediaDevices + .getUserMedia({ audio: true }) + .then((stream) => { + mediaRecorder.current = new MediaRecorder(stream); + mediaRecorder.current.ondataavailable = (event) => { + audioChunks.current.push(event.data); + }; + mediaRecorder.current.onstop = () => { + const audioBlob = new Blob(audioChunks.current, { + type: "audio/wav", + }); + audioChunks.current = []; + transcribeAudio(audioBlob); + }; + mediaRecorder.current.start(); + setRecording(true); + }) + .catch((error) => { + console.error("Error accessing microphone:", error); + }); + } + + function stopRecording() { + if (mediaRecorder.current) { + mediaRecorder.current.stop(); + setRecording(false); + } + } + + async function transcribeAudio(audioBlob: Blob) { + try { + // Convert Blob to File + const audioFile = new File([audioBlob], "recording.wav", { + type: "audio/wav", + }); + const response = await openai.audio.transcriptions.create({ + model: "whisper-1", + file: audioFile, + }); + const transcription = response.text; + console.log("Transcription: ", transcription); + setInput(transcription); + } catch (error) { + console.error("Error transcribing audio:", error); + } + } + + return ( +
+ + + {stream ? ( +
+ +
+ ) : !loading ? ( +
+ setAvatarId(e.target.value)} + placeholder="Custom Avatar ID (optional)" + /> + setVoiceId(e.target.value)} + placeholder="Custom Voice ID (optional)" + /> + +
+ ) : ( + + )} +
+ + + + { + if (!input) { + setDebug("Please enter text to send to ChatGPT"); + return; + } + handleSubmit(); + }} + setInput={setInput} + endContent={ + + + + } + disabled={!stream} + /> + +
+

+ Console: +
+ {debug} +

+
+ ); +} diff --git a/components/StreamingAvatarCode.tsx b/components/StreamingAvatarCode.tsx new file mode 100644 index 0000000..addbd47 --- /dev/null +++ b/components/StreamingAvatarCode.tsx @@ -0,0 +1,98 @@ +import { Card, CardBody } from "@nextui-org/react"; +import { langs } from "@uiw/codemirror-extensions-langs"; +import ReactCodeMirror from "@uiw/react-codemirror"; + +export default function StreamingAvatarCode() { + return ( +
+

This SDK supports the following behavior:

+
    +
  • +
    +

    Start:

    Start the + streaming avatar session +
    +
  • +
  • +
    +

    Close:

    Close the + streaming avatar session +
    +
  • +
  • +
    +

    Speak:

    Repeat the + input +
    +
  • +
+ + + + + +
+ ); +} + +const TEXT = ` + export default function App() { + // Media stream used by the video player to display the avatar + const [stream, setStream] = useState (); + const mediaStream = useRef(null); + + // Instantiate the streaming avatar api using your access token + const avatar = useRef(new StreamingAvatarApi( + new Configuration({accessToken: ''}) + )); + + // State holding streaming avatar session data + const [sessionData, setSessionData] = useState(); + + // Function to start the streaming avatar session + async function start(){ + const res = await avatar.current.createStartAvatar( + { newSessionRequest: + + // Define the session variables during creation + { quality: "medium", // low, medium, high + avatarName: , + voice:{voiceId: } + } + + }); + setSessionData(res); + } + + // Function to stop the streaming avatar session + async function stop(){ + await avatar.current.stopAvatar({stopSessionRequest: {sessionId: sessionData?.sessionId}}); + } + + // Function which passes in text to the avatar to repeat + async function handleSpeak(){ + await avatar.current.speak({taskRequest: {text: , sessionId: sessionData?.sessionId}}).catch((e) => { + }); + } + + useEffect(()=>{ + // Handles the display of the streaming avatar + if(stream && mediaStream.current){ + mediaStream.current.srcObject = stream; + mediaStream.current.onloadedmetadata = () => { + mediaStream.current!.play(); + } + } + }, [mediaStream, stream]) + + return ( +
+
+ }`; diff --git a/components/StreamingAvatarTextInput.tsx b/components/StreamingAvatarTextInput.tsx new file mode 100644 index 0000000..56b0395 --- /dev/null +++ b/components/StreamingAvatarTextInput.tsx @@ -0,0 +1,67 @@ +import { Input, Tooltip } from "@nextui-org/react"; +import { Airplane, ArrowRight, PaperPlaneRight } from "@phosphor-icons/react"; +import clsx from "clsx"; + +interface StreamingAvatarTextInputProps { + label: string; + placeholder: string; + input: string; + onSubmit: () => void; + setInput: (value: string) => void; + endContent?: React.ReactNode; + disabled?: boolean; +} + +export default function StreamingAvatarTextInput({ + label, + placeholder, + input, + onSubmit, + setInput, + endContent, + disabled = false, +}: StreamingAvatarTextInputProps) { + function handleSubmit() { + if (input.trim() === "") { + return; + } + onSubmit(); + setInput(""); + } + + return ( + + {endContent} + + + + + } + label={label} + placeholder={placeholder} + size="sm" + value={input} + onKeyDown={(e) => { + if (e.key === "Enter") { + handleSubmit(); + } + }} + onValueChange={setInput} + isDisabled={disabled} + /> + ); +} diff --git a/components/ThemeSwitch.tsx b/components/ThemeSwitch.tsx new file mode 100644 index 0000000..3bbd529 --- /dev/null +++ b/components/ThemeSwitch.tsx @@ -0,0 +1,80 @@ +"use client"; + +import { FC } from "react"; +import { VisuallyHidden } from "@react-aria/visually-hidden"; +import { SwitchProps, useSwitch } from "@nextui-org/switch"; +import { useTheme } from "next-themes"; +import { useIsSSR } from "@react-aria/ssr"; +import clsx from "clsx"; +import { MoonFilledIcon, SunFilledIcon } from "./Icons"; + +export interface ThemeSwitchProps { + className?: string; + classNames?: SwitchProps["classNames"]; +} + +export const ThemeSwitch: FC = ({ + className, + classNames, +}) => { + const { theme, setTheme } = useTheme(); + const isSSR = useIsSSR(); + + const onChange = () => { + theme === "light" ? setTheme("dark") : setTheme("light"); + }; + + const { + Component, + slots, + isSelected, + getBaseProps, + getInputProps, + getWrapperProps, + } = useSwitch({ + isSelected: theme === "light" || isSSR, + "aria-label": `Switch to ${theme === "light" || isSSR ? "dark" : "light"} mode`, + onChange, + }); + + return ( + + + + +
+ {!isSelected || isSSR ? ( + + ) : ( + + )} +
+
+ ); +}; diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..767719f --- /dev/null +++ b/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {} + +module.exports = nextConfig diff --git a/package.json b/package.json new file mode 100644 index 0000000..5836935 --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "next-app-template", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "next dev -p 3234", + "build": "next build", + "start": "next start", + "lint": "eslint . --ext .ts,.tsx -c .eslintrc.json --fix" + }, + "dependencies": { + "@ai-sdk/openai": "^0.0.34", + "@heygen/streaming-avatar": "^1.0.10", + "@nextui-org/button": "2.0.34", + "@nextui-org/code": "2.0.29", + "@nextui-org/input": "2.2.2", + "@nextui-org/kbd": "2.0.30", + "@nextui-org/link": "2.0.32", + "@nextui-org/listbox": "2.1.21", + "@nextui-org/navbar": "2.0.33", + "@nextui-org/react": "^2.4.2", + "@nextui-org/snippet": "2.0.38", + "@nextui-org/switch": "2.0.31", + "@nextui-org/system": "2.2.1", + "@nextui-org/theme": "2.2.5", + "@phosphor-icons/react": "^2.1.5", + "@react-aria/ssr": "3.9.4", + "@react-aria/visually-hidden": "3.8.12", + "@uiw/codemirror-extensions-langs": "^4.22.1", + "@uiw/react-codemirror": "^4.22.1", + "ai": "^3.2.15", + "clsx": "2.1.1", + "framer-motion": "~11.1.1", + "intl-messageformat": "^10.5.0", + "next": "14.2.4", + "next-themes": "^0.2.1", + "openai": "^4.52.1", + "react": "18.3.1", + "react-dom": "18.3.1", + "zod": "^3.23.8" + }, + "devDependencies": { + "@types/node": "20.5.7", + "@types/react": "18.3.3", + "@types/react-dom": "18.3.0", + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", + "autoprefixer": "10.4.19", + "eslint": "^8.57.0", + "eslint-config-next": "14.2.1", + "eslint-config-prettier": "^8.2.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.23.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-unused-imports": "^3.2.0", + "postcss": "8.4.38", + "tailwind-variants": "0.1.20", + "tailwindcss": "3.4.3", + "typescript": "5.0.4" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/public/heygen-logo.png b/public/heygen-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c1496b636b6d798674183cb9929fd4cef0b9ca GIT binary patch literal 72840 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 UhkO6cWC38av9hy#XYLmHKRJsq@&Et; literal 0 HcmV?d00001 diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..d2f8422 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..1f78d2b --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,9 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +li { + list-style-type: square; + margin-left: 30px; + padding: 2px; +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..03a4e22 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,20 @@ +import {nextui} from '@nextui-org/theme' + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './components/**/*.{js,ts,jsx,tsx,mdx}', + './app/**/*.{js,ts,jsx,tsx,mdx}', + './node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}' + ], + theme: { + extend: { + fontFamily: { + sans: ["var(--font-sans)"], + mono: ["var(--font-geist-mono)"], + }, + }, + }, + darkMode: "class", + plugins: [nextui()], +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e06a445 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +}