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
+
+- [x] 🎉 **NEW** Publish & share 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 🎭
-
+
- [x] **Syntax highlighting** - for multiple languages 🌈
- [x] **Context** - Drag and drop files to add them to the prompt 📁
-
-- [x] 🎉 **NEW** Stop generation 🛑 (fredliubojin) - Voice input 🎙️ (koganei)
+
+- [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