浏览代码

refac: share chat modal styling update

Timothy J. Baek 1 年之前
父节点
当前提交
5faa05a117

+ 66 - 31
src/lib/components/chat/ShareChatModal.svelte

@@ -1,6 +1,7 @@
 <script lang="ts">
 <script lang="ts">
 	import { getContext } from 'svelte';
 	import { getContext } from 'svelte';
 	import Modal from '../common/Modal.svelte';
 	import Modal from '../common/Modal.svelte';
+	import Link from '../icons/Link.svelte';
 
 
 	const i18n = getContext('i18n');
 	const i18n = getContext('i18n');
 
 
@@ -11,43 +12,77 @@
 	export let show = false;
 	export let show = false;
 </script>
 </script>
 
 
-<Modal bind:show size="xs">
-	<div class="px-4 pt-4 pb-5 w-full flex flex-col justify-center">
-		<button
-			class=" self-center px-8 py-1.5 w-full rounded-full text-sm font-medium bg-blue-600 hover:bg-blue-500 text-white"
-			type="button"
-			on:click={() => {
-				shareChat();
-				show = false;
-			}}
-		>
-			{$i18n.t('Share to OpenWebUI Community')}
-		</button>
-
-		<button
-			class=" self-center px-8 py-1.5 w-full rounded-full text-sm font-medium bg-blue-600 hover:bg-blue-500 text-white mt-1.5"
-			type="button"
-			on:click={() => {
-				shareLocalChat();
-				show = false;
-			}}
-		>
-			{$i18n.t('Create local share link')}
-		</button>
-
-		<div class="flex justify-center space-x-1 mt-1.5">
-			<div class=" self-center text-gray-400 text-xs font-medium">{$i18n.t('or')}</div>
-
+<Modal bind:show size="sm">
+	<div>
+		<div class=" flex justify-between dark:text-gray-300 px-5 py-4">
+			<div class=" text-lg font-medium self-center">{$i18n.t('Share Chat')}</div>
 			<button
 			<button
-				class=" self-center rounded-full text-xs font-medium text-gray-700 dark:text-gray-500 underline"
-				type="button"
+				class="self-center"
 				on:click={() => {
 				on:click={() => {
-					downloadChat();
 					show = false;
 					show = false;
 				}}
 				}}
 			>
 			>
-				{$i18n.t('Download as a File')}
+				<svg
+					xmlns="http://www.w3.org/2000/svg"
+					viewBox="0 0 20 20"
+					fill="currentColor"
+					class="w-5 h-5"
+				>
+					<path
+						d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
+					/>
+				</svg>
 			</button>
 			</button>
 		</div>
 		</div>
+		<hr class=" dark:border-gray-800" />
+
+		<div class="px-4 pt-4 pb-5 w-full flex flex-col justify-center">
+			<div class=" text-sm dark:text-gray-300 mb-1">
+				Messages you send after creating your link won't be shared. Anyone with the URL will be able
+				to view the shared chat.
+			</div>
+
+			<div class="flex justify-end">
+				<div class="flex flex-col items-end space-x-1 mt-1.5">
+					<div class="flex gap-1">
+						<button
+							class=" self-center px-3.5 py-2 rounded-xl text-sm font-medium bg-gray-100 hover:bg-gray-200 text-gray-800 dark:bg-gray-850 dark:hover:bg-gray-800 dark:text-white"
+							type="button"
+							on:click={() => {
+								shareChat();
+								show = false;
+							}}
+						>
+							{$i18n.t('Share to OpenWebUI Community')}
+						</button>
+
+						<button
+							class=" self-center flex items-center gap-1 px-3.5 py-2 rounded-xl text-sm font-medium bg-emerald-600 hover:bg-emerald-500 text-white"
+							type="button"
+							on:click={() => {
+								shareLocalChat();
+								show = false;
+							}}
+						>
+							<Link />
+							{$i18n.t('Copy Link')}
+						</button>
+					</div>
+					<div class="flex gap-1 mt-1.5">
+						<div class=" self-center text-gray-400 text-xs font-medium">{$i18n.t('or')}</div>
+						<button
+							class=" text-right rounded-full text-xs font-medium text-gray-700 dark:text-gray-500 underline"
+							type="button"
+							on:click={() => {
+								downloadChat();
+								show = false;
+							}}
+						>
+							{$i18n.t('Download as a File')}
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
 	</div>
 	</div>
 </Modal>
 </Modal>

+ 16 - 0
src/lib/components/icons/Link.svelte

@@ -0,0 +1,16 @@
+<script lang="ts">
+	export let className = 'w-4 h-4';
+</script>
+
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class={className}>
+	<path
+		fill-rule="evenodd"
+		d="M8.914 6.025a.75.75 0 0 1 1.06 0 3.5 3.5 0 0 1 0 4.95l-2 2a3.5 3.5 0 0 1-5.396-4.402.75.75 0 0 1 1.251.827 2 2 0 0 0 3.085 2.514l2-2a2 2 0 0 0 0-2.828.75.75 0 0 1 0-1.06Z"
+		clip-rule="evenodd"
+	/>
+	<path
+		fill-rule="evenodd"
+		d="M7.086 9.975a.75.75 0 0 1-1.06 0 3.5 3.5 0 0 1 0-4.95l2-2a3.5 3.5 0 0 1 5.396 4.402.75.75 0 0 1-1.251-.827 2 2 0 0 0-3.085-2.514l-2 2a2 2 0 0 0 0 2.828.75.75 0 0 1 0 1.06Z"
+		clip-rule="evenodd"
+	/>
+</svg>

+ 4 - 2
src/lib/components/layout/Navbar.svelte

@@ -70,14 +70,16 @@
 		console.log('shareLocal', chat);
 		console.log('shareLocal', chat);
 		if (chat.share_id) {
 		if (chat.share_id) {
 			const shareUrl = `${window.location.origin}/s/${chat.share_id}`;
 			const shareUrl = `${window.location.origin}/s/${chat.share_id}`;
-			toast.info(
+			toast.success(
 				$i18n.t('Chat is already shared at {{shareUrl}}, copied to clipboard', { shareUrl })
 				$i18n.t('Chat is already shared at {{shareUrl}}, copied to clipboard', { shareUrl })
 			);
 			);
 			copyToClipboard(shareUrl);
 			copyToClipboard(shareUrl);
 		} else {
 		} else {
 			const sharedChat = await shareChatById(localStorage.token, $chatId);
 			const sharedChat = await shareChatById(localStorage.token, $chatId);
 			const shareUrl = `${window.location.origin}/s/${sharedChat.id}`;
 			const shareUrl = `${window.location.origin}/s/${sharedChat.id}`;
-			toast.info($i18n.t('Chat is now shared at {{shareUrl}}, copied to clipboard', { shareUrl }));
+			toast.success(
+				$i18n.t('Chat is now shared at {{shareUrl}}, copied to clipboard', { shareUrl })
+			);
 			copyToClipboard(shareUrl);
 			copyToClipboard(shareUrl);
 		}
 		}
 	};
 	};