diff --git a/README.md b/README.md index e34628529..013ecea64 100644 --- a/README.md +++ b/README.md @@ -25,14 +25,19 @@ Or click fork & run on Vercel 🚨 **We added cool new features to the app!** (bare-bones was [466a36](https://github.com/enricoros/nextjs-chatgpt-app/tree/466a3667a48060d406d60943af01fe26366563fb)) +- [x] 🎉 **NEW** Typing Avatars +

New Typing Avatars

+- [x] 🎉 **NEW** Publish & share chats 📥 +

Export chats

- [x] Chat with GPT-4 and 3.5 Turbo 🧠💨 - [x] **Private**: user-owned API keys 🔑 and localStorage 🛡️ - [x] **System presets** - including Code, Science, Corporate, and Chat 🎭 -

System presets

+

System presets

- [x] **Syntax highlighting** - for multiple languages 🌈 - [x] **Context** - Drag and drop files to add them to the prompt 📁 -

Drag and drop

-- [x] 🎉 **NEW** Stop generation 🛑 (fredliubojin) - Voice input 🎙️ (koganei) +

Drag and drop

+- [x] **Stop generation** 🛑 (fredliubojin) +- [x] **Voice input** 🎙️ (koganei) - [x] Real-time streaming of AI responses ⚡ - [x] Switch API hosts to track quality, including [Helicone](https://www.helicone.ai/) 📈 - [x] Dark mode 🌙 - Wide mode ⛶ diff --git a/components/ApplicationBar.tsx b/components/ApplicationBar.tsx index 6708cf1a4..97692f800 100644 --- a/components/ApplicationBar.tsx +++ b/components/ApplicationBar.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { IconButton, ListDivider, ListItem, ListItemDecorator, Menu, MenuItem, Option, Select, Sheet, Stack, Switch, Typography, useColorScheme, useTheme } from '@mui/joy'; +import { Badge, IconButton, ListDivider, ListItem, ListItemDecorator, Menu, MenuItem, Option, Select, Sheet, Stack, Switch, Typography, useColorScheme, useTheme } from '@mui/joy'; import { SxProps } from '@mui/joy/styles/types'; import AddIcon from '@mui/icons-material/Add'; import DarkModeIcon from '@mui/icons-material/DarkMode'; @@ -259,8 +259,12 @@ export function ApplicationBar({ onClearConversation, onExportConversation, onSh - - Export to Paste.gg + + + + + + Share via paste.gg handleActionClearConversation(e, null)}> diff --git a/components/Chat.tsx b/components/Chat.tsx index 402145ed8..c484367a8 100644 --- a/components/Chat.tsx +++ b/components/Chat.tsx @@ -11,6 +11,7 @@ import { Composer } from '@/components/Composer'; import { ConfirmationDialog } from '@/components/util/ConfirmationDialog'; import { DMessage, useActiveConfiguration, useChatStore } from '@/lib/store-chats'; import { ExportResultDialog } from '@/components/util/ExportResultDialog'; +import { Link } from '@/components/util/Link'; import { SystemPurposes } from '@/lib/data'; import { exportConversation } from '@/lib/export-conversation'; import { useSettingsStore } from '@/lib/store'; @@ -177,9 +178,9 @@ export function Chat(props: { onShowSettings: () => void, sx?: SxProps }) { const handleConfirmedExportConversation = async () => { if (exportConfirmationId) { const conversation = findConversation(exportConfirmationId); + setExportConfirmationId(null); if (conversation) setExportResponse(await exportConversation('paste.gg', conversation)); - setExportConfirmationId(null); } }; @@ -235,10 +236,11 @@ export function Chat(props: { onShowSettings: () => void, sx?: SxProps }) { {/* Confirmation for Export */} setExportConfirmationId(null)} onPositive={handleConfirmedExportConversation} - confirmationText={ - 'This will post the conversation publicly to \'paste.gg\'. The URL will be unlisted and expiring ' + - 'in 30 days, but you may not be able to delete it. Are you sure you want to proceed?' - } positiveActionText={'Understood, Export to paste.gg'} + confirmationText={<> + Share your conversation anonymously on paste.gg? + It will be unlisted and available to share and read for 30 days. Keep in mind, deletion may not be possible. + Are you sure you want to proceed? + } positiveActionText={'Understood, Export to paste.gg'} /> {/* Confirmation for Delete */} diff --git a/components/util/ConfirmationDialog.tsx b/components/util/ConfirmationDialog.tsx index eb8d2246a..966f89bd3 100644 --- a/components/util/ConfirmationDialog.tsx +++ b/components/util/ConfirmationDialog.tsx @@ -8,7 +8,7 @@ import WarningRoundedIcon from '@mui/icons-material/WarningRounded'; * A confirmation dialog (Joy Modal) * Pass the question and the positive answer, and get called when it's time to close the dialog, or when the positive action is taken */ -export function ConfirmationDialog(props: { open: boolean, onClose: () => void, onPositive: () => void, confirmationText: string, positiveActionText: string }) { +export function ConfirmationDialog(props: { open: boolean, onClose: () => void, onPositive: () => void, confirmationText: string | JSX.Element, positiveActionText: string }) { return ( diff --git a/docs/recording_0401.gif b/docs/recording_0401.gif new file mode 100644 index 000000000..e88d71ff1 Binary files /dev/null and b/docs/recording_0401.gif differ diff --git a/docs/screenshot_export_example1.png b/docs/screenshot_export_example1.png new file mode 100644 index 000000000..c42e04983 Binary files /dev/null and b/docs/screenshot_export_example1.png differ