diff --git a/src/frontend/apps/conversations/src/assets/icons/conversation.svg b/src/frontend/apps/conversations/src/assets/icons/conversation.svg
new file mode 100644
index 0000000..c011fbd
--- /dev/null
+++ b/src/frontend/apps/conversations/src/assets/icons/conversation.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/frontend/apps/conversations/src/assets/icons/left-panel-bold.svg b/src/frontend/apps/conversations/src/assets/icons/left-panel-bold.svg
new file mode 100644
index 0000000..fab0e9a
--- /dev/null
+++ b/src/frontend/apps/conversations/src/assets/icons/left-panel-bold.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/frontend/apps/conversations/src/assets/icons/search.svg b/src/frontend/apps/conversations/src/assets/icons/search.svg
new file mode 100644
index 0000000..37100c1
--- /dev/null
+++ b/src/frontend/apps/conversations/src/assets/icons/search.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/frontend/apps/conversations/src/assets/logo/assistant.svg b/src/frontend/apps/conversations/src/assets/logo/assistant.svg
new file mode 100644
index 0000000..d002d01
--- /dev/null
+++ b/src/frontend/apps/conversations/src/assets/logo/assistant.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/frontend/apps/conversations/src/assets/logo/logo-assistant.svg b/src/frontend/apps/conversations/src/assets/logo/logo-assistant.svg
new file mode 100644
index 0000000..c8d8049
--- /dev/null
+++ b/src/frontend/apps/conversations/src/assets/logo/logo-assistant.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/frontend/apps/conversations/src/components/SideModal.tsx b/src/frontend/apps/conversations/src/components/SideModal.tsx
index d844304..db6f417 100644
--- a/src/frontend/apps/conversations/src/components/SideModal.tsx
+++ b/src/frontend/apps/conversations/src/components/SideModal.tsx
@@ -20,8 +20,6 @@ const SideModalStyle = createGlobalStyle`
}
& .c__modal{
- animation: slidein 0.7s;
-
width: ${({ width }) => width};
${({ side }) => side === 'right' && 'left: auto;'};
diff --git a/src/frontend/apps/conversations/src/cunningham/cunningham-tokens.ts b/src/frontend/apps/conversations/src/cunningham/cunningham-tokens.ts
index a547d65..d733685 100644
--- a/src/frontend/apps/conversations/src/cunningham/cunningham-tokens.ts
+++ b/src/frontend/apps/conversations/src/cunningham/cunningham-tokens.ts
@@ -221,7 +221,7 @@ export const tokens = {
'border-radius': '4px',
'small-height': '26px',
primary: {
- 'background--color': '#000091',
+ 'background--color': '#3E5DE7',
'background--color-hover': '#1212ff',
'background--color-active': '#2323ff',
'background--color-disabled': '#eee',
@@ -232,13 +232,13 @@ export const tokens = {
disabled: '#7C7C7C',
},
'primary-text': {
- 'background--color': '#000091',
+ 'background--color': '#3E5DE7',
'background--color-hover': '#eee',
'background--color-active': '#ECECFE',
'background--color-focus-visible': '#fff',
'background--color-disabled': '#fff',
- color: '#000091',
- 'color-hover': '#000091',
+ color: '#3E5DE7',
+ 'color-hover': '#3E5DE7',
disabled: '#929292',
},
secondary: {
@@ -381,7 +381,7 @@ export const tokens = {
'greyscale-200': '#303C4B',
'greyscale-300': '#555F6B',
'greyscale-400': '#79818A',
- 'greyscale-500': '#9EA3AA',
+ 'greyscale-500': '#6D778C',
'greyscale-600': '#C2C6CA',
'greyscale-700': '#E7E8EA',
'greyscale-800': '#F3F4F4',
diff --git a/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchItem.tsx b/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchItem.tsx
index a10a8f6..bf9a782 100644
--- a/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchItem.tsx
+++ b/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchItem.tsx
@@ -1,7 +1,12 @@
-import { Box, Icon } from '@/components';
+import { DateTime } from 'luxon';
+import { useTranslation } from 'react-i18next';
+import { css } from 'styled-components';
+
+import BubbleIcon from '@/assets/icons/conversation.svg';
+import { Box, Icon, Text } from '@/components';
import { QuickSearchItemContent } from '@/components/quick-search/';
+import { useCunninghamTheme } from '@/cunningham';
import { ChatConversation } from '@/features/chat/types';
-import { SimpleConversationItem } from '@/features/left-panel/components/SimpleConversationItem';
import { useResponsiveStore } from '@/stores';
type ConversationSearchItemProps = {
@@ -12,6 +17,9 @@ export const ConversationSearchItem = ({
conversation,
}: ConversationSearchItemProps) => {
const { isDesktop } = useResponsiveStore();
+ const { spacingsTokens, colorsTokens } = useCunninghamTheme();
+ const { t, i18n } = useTranslation();
+
return (
-
-
+
+
+
+
+
+
+ {conversation.title || t('Untitled conversation')}
+
+
+ {conversation.updated_at
+ ? DateTime.fromISO(conversation.updated_at).toRelative({
+ locale: i18n.language,
+ })
+ : ''}
+
+
}
diff --git a/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchModal.tsx b/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchModal.tsx
index 11b6117..9c7b37c 100644
--- a/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchModal.tsx
+++ b/src/frontend/apps/conversations/src/features/chat-search/components/ConversationSearchModal.tsx
@@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next';
import { InView } from 'react-intersection-observer';
import { useDebouncedCallback } from 'use-debounce';
-import { Box } from '@/components';
+import { Box, Text } from '@/components';
import {
QuickSearch,
QuickSearchData,
@@ -55,7 +55,7 @@ export const ConversationSearchModal = ({
const conversations = data?.pages.flatMap((page) => page.results) || [];
return {
- groupName: conversations.length > 0 ? t('Select a conversation') : '',
+ groupName: conversations.length > 0 ? t('Select a chat') : '',
elements: search ? conversations : [],
emptyString: t('No conversation found'),
endActions: hasNextPage
@@ -76,8 +76,15 @@ export const ConversationSearchModal = ({
$justify="space-between"
className="--docs--doc-search-modal"
>
+
+ {t('Search for a chat')}
+
diff --git a/src/frontend/apps/conversations/src/features/chat/components/Chat.tsx b/src/frontend/apps/conversations/src/features/chat/components/Chat.tsx
index 4177945..1c1c6be 100644
--- a/src/frontend/apps/conversations/src/features/chat/components/Chat.tsx
+++ b/src/frontend/apps/conversations/src/features/chat/components/Chat.tsx
@@ -10,12 +10,11 @@ import rehypeKatex from 'rehype-katex';
import remarkGfm from 'remark-gfm';
import remarkMath from 'remark-math';
-import { Box, BoxButton, Icon, Text } from '@/components';
-import { DropdownMenu } from '@/components/DropdownMenu';
-import { useAuth } from '@/features/auth';
+import { Box, Text } from '@/components';
import { useChat } from '@/features/chat/api/useChat';
import { getConversation } from '@/features/chat/api/useConversation';
import { useCreateChatConversation } from '@/features/chat/api/useCreateConversation';
+import { InputChat } from '@/features/chat/components/InputChat';
import { usePendingChatStore } from '../stores/usePendingChatStore';
@@ -37,10 +36,9 @@ export const Chat = ({
const apiUrl = `chats/${initialConversationId}/conversation/?protocol=${streamProtocol}`;
const router = useRouter();
- const { user } = useAuth();
const [files, setFiles] = useState(null);
+
const fileInputRef = useRef(null);
- const [isDragActive, setIsDragActive] = useState(false);
const [conversationId, setConversationId] = useState(initialConversationId);
const [initialConversationMessages, setInitialConversationMessages] =
useState(undefined);
@@ -198,87 +196,97 @@ export const Chat = ({
return (
- {messages.map((message) => (
-
-
- {`${message.role === 'user' ? user?.full_name : message.role}:`}
-
-
- {message.content && (
- (
-
- ),
- }}
+ {messages.length > 0 && (
+
+ {messages.map((message) => (
+
+
- {message.content}
-
- )}
-
- {message.parts
- ?.filter((part) => part.type === 'tool-invocation')
- .map((part: ToolInvocationUIPart) => (
- ,
+ }}
>
- {`${part.toolInvocation.toolName}(${JSON.stringify(part.toolInvocation.args, null, 2)})`}
-
- ))}
- {/* Show attachments if present */}
- {message.experimental_attachments?.map(
- (attachment: Attachment, index: number) =>
- attachment.contentType?.includes('image/') ? (
-
- ) : attachment.contentType?.includes('text/') ? (
-
- {attachment.url}
-
- ) : null,
- )}
+ {message.content}
+
+ )}
+
+ {message.parts
+ ?.filter((part) => part.type === 'tool-invocation')
+ .map((part: ToolInvocationUIPart) => (
+
+ {`${part.toolInvocation.toolName}(${JSON.stringify(part.toolInvocation.args, null, 2)})`}
+
+ ))}
+ {/* Show attachments if present */}
+ {message.experimental_attachments?.map(
+ (attachment: Attachment, index: number) =>
+ attachment.contentType?.includes('image/') ? (
+
+ ) : attachment.contentType?.includes('text/') ? (
+
+ {attachment.url}
+
+ ) : null,
+ )}
+
+
-
+ ))}
- ))}
+ )}
{(status === 'streaming' || status === 'submitted') && (
{t('Generating...')}
)}
+
-
- {messages.length === 0 && (
-
-
- {t('Welcome to your assistant!')}
-
-
- {t('Start a conversation by typing a message below.')}
-
-
- )}
-
- {/* File preview */}
- {files && files.length > 0 && (
-
- {Array.from(files).map((file, idx) => {
- const { type, name } = file;
- const removeFile = () => {
- if (!files) {
- return;
- }
- const dt = new DataTransfer();
- Array.from(files).forEach((f, i) => {
- if (i !== idx) {
- dt.items.add(f);
- }
- });
- setFiles(dt.files.length > 0 ? dt.files : null);
- };
- if (type.startsWith('image/')) {
- return (
-
-
-
- {name}
-
-
-
-
-
- );
- } else if (type.startsWith('text/')) {
- return (
-
-
-
- {name}
-
-
-
-
-
- );
- }
- return null;
- })}
-
- )}
-
-
);
};
diff --git a/src/frontend/apps/conversations/src/features/chat/components/InputChat.tsx b/src/frontend/apps/conversations/src/features/chat/components/InputChat.tsx
new file mode 100644
index 0000000..c21c076
--- /dev/null
+++ b/src/frontend/apps/conversations/src/features/chat/components/InputChat.tsx
@@ -0,0 +1,337 @@
+import { Button } from '@openfun/cunningham-react';
+import React, { useRef, useState } from 'react';
+import { useTranslation } from 'react-i18next';
+
+import { Box, BoxButton, Icon, Text } from '@/components';
+import { useResponsiveStore } from '@/stores';
+
+interface InputChatProps {
+ messagesLength: number;
+ input: string | null;
+ handleInputChange: (e: React.ChangeEvent) => void;
+ handleSubmit: (e: React.FormEvent) => void;
+ status: string | null;
+ files: FileList | null;
+ setFiles: React.Dispatch>;
+}
+
+export const InputChat = ({
+ messagesLength,
+ input,
+ handleInputChange,
+ handleSubmit,
+ status,
+ files,
+ setFiles,
+}: InputChatProps) => {
+ const { t } = useTranslation();
+ const fileInputRef = useRef(null);
+ const [isDragActive, setIsDragActive] = useState(false);
+ const { isDesktop } = useResponsiveStore();
+
+ return (
+
+ {/* Message de bienvenue */}
+ {messagesLength === 0 && (
+
+
+ {t('What is on your mind?')}
+
+
+ )}
+
+ {/* Formulaire d'envoi */}
+
+
+
+ /* fileInputRef.current?.click(),
+ },
+ ]}
+ >
+
+ */
+ );
+};
diff --git a/src/frontend/apps/conversations/src/features/header/components/ButtonToggleLeftPanel.tsx b/src/frontend/apps/conversations/src/features/header/components/ButtonToggleLeftPanel.tsx
new file mode 100644
index 0000000..722c696
--- /dev/null
+++ b/src/frontend/apps/conversations/src/features/header/components/ButtonToggleLeftPanel.tsx
@@ -0,0 +1,21 @@
+import { Button } from '@openfun/cunningham-react';
+import { useTranslation } from 'react-i18next';
+
+import LeftPanelIcon from '@/assets/icons/left-panel-bold.svg';
+import { useLeftPanelStore } from '@/features/left-panel';
+
+export const ButtonToggleLeftPanel = () => {
+ const { t } = useTranslation();
+ const { isPanelOpen: _isPanelOpen, togglePanel } = useLeftPanelStore();
+
+ return (
+
)}
- {!isMobile && (
-
- )}
+ {!isMobile && }
-
+ {/*
-
+ */}
);
}
diff --git a/src/frontend/apps/conversations/src/features/home/components/HomeBottom.tsx b/src/frontend/apps/conversations/src/features/home/components/HomeBottom.tsx
index 487c55f..b72c291 100644
--- a/src/frontend/apps/conversations/src/features/home/components/HomeBottom.tsx
+++ b/src/frontend/apps/conversations/src/features/home/components/HomeBottom.tsx
@@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next';
-import IconDocs from '@/assets/icons/icon-docs.svg';
+import IconAssistant from '@/assets/logo/assistant.svg';
import { Box, Text } from '@/components';
import { productName } from '@/core';
import { useCunninghamTheme } from '@/cunningham';
@@ -45,7 +45,7 @@ function HomeProConnect() {
$height="fit-content"
$css="zoom: 1.9;"
>
-
- {t('Conversations is already available, log in to use it now.')}
+ {t('Assistant is already available, log in to use it now.')}
diff --git a/src/frontend/apps/conversations/src/features/home/components/HomeContent.tsx b/src/frontend/apps/conversations/src/features/home/components/HomeContent.tsx
index 01b1874..3032820 100644
--- a/src/frontend/apps/conversations/src/features/home/components/HomeContent.tsx
+++ b/src/frontend/apps/conversations/src/features/home/components/HomeContent.tsx
@@ -1,26 +1,25 @@
-import { Button } from '@openfun/cunningham-react';
-import { Trans, useTranslation } from 'react-i18next';
+import { useTranslation } from 'react-i18next';
import { css } from 'styled-components';
-import { Box, Text } from '@/components';
-import { productName } from '@/core';
+import { Box } from '@/components';
+import { productName as _productName } from '@/core';
import { useCunninghamTheme } from '@/cunningham';
import { Footer } from '@/features/footer';
import { LeftPanel } from '@/features/left-panel';
import { useResponsiveStore } from '@/stores';
-import SC5 from '../assets/SC5.png';
-import GithubIcon from '../assets/github.svg';
-
import HomeBanner from './HomeBanner';
-import { HomeBottom } from './HomeBottom';
import { HomeHeader, getHeaderHeight } from './HomeHeader';
-import { HomeSection } from './HomeSection';
+// import { HomeSection } from './HomeSection';
export function HomeContent() {
- const { t } = useTranslation();
- const { colorsTokens } = useCunninghamTheme();
- const { isMobile, isSmallMobile, isTablet } = useResponsiveStore();
+ const { t: _t } = useTranslation();
+ const { colorsTokens: _colorsTokens } = useCunninghamTheme();
+ const {
+ isMobile: _isMobile,
+ isSmallMobile,
+ isTablet: _isTablet,
+ } = useResponsiveStore();
return (
@@ -45,7 +44,7 @@ export function HomeContent() {
$margin="auto"
>
-
}
/>
-
-
-
+ */}
+ {/*
+ */}
diff --git a/src/frontend/apps/conversations/src/features/home/components/HomeHeader.tsx b/src/frontend/apps/conversations/src/features/home/components/HomeHeader.tsx
index 54798c8..b48e7a0 100644
--- a/src/frontend/apps/conversations/src/features/home/components/HomeHeader.tsx
+++ b/src/frontend/apps/conversations/src/features/home/components/HomeHeader.tsx
@@ -1,7 +1,7 @@
import Image from 'next/image';
import { useTranslation } from 'react-i18next';
-import IconDocs from '@/assets/icons/icon-docs.svg';
+import IconAssistant from '@/assets/logo/assistant.svg';
import { Box } from '@/components';
import { productName } from '@/core';
import { useCunninghamTheme } from '@/cunningham';
@@ -62,7 +62,7 @@ export const HomeHeader = () => {
$position="relative"
$height="fit-content"
>
-
+
+
+
+
+
diff --git a/src/frontend/apps/conversations/src/features/left-panel/assets/bubble-notif-bold.svg b/src/frontend/apps/conversations/src/features/left-panel/assets/bubble-notif-bold.svg
new file mode 100644
index 0000000..21d7c43
--- /dev/null
+++ b/src/frontend/apps/conversations/src/features/left-panel/assets/bubble-notif-bold.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/frontend/apps/conversations/src/features/left-panel/assets/simple-document.svg b/src/frontend/apps/conversations/src/features/left-panel/assets/simple-document.svg
deleted file mode 100644
index ee656f0..0000000
--- a/src/frontend/apps/conversations/src/features/left-panel/assets/simple-document.svg
+++ /dev/null
@@ -1,117 +0,0 @@
-
diff --git a/src/frontend/apps/conversations/src/features/left-panel/components/ConversationItemActions.tsx b/src/frontend/apps/conversations/src/features/left-panel/components/ConversationItemActions.tsx
index 4d781ee..fdd9e55 100644
--- a/src/frontend/apps/conversations/src/features/left-panel/components/ConversationItemActions.tsx
+++ b/src/frontend/apps/conversations/src/features/left-panel/components/ConversationItemActions.tsx
@@ -1,4 +1,4 @@
-import { useModal } from '@openfun/cunningham-react';
+import { Button, useModal } from '@openfun/cunningham-react';
import { useTranslation } from 'react-i18next';
import { DropdownMenu, DropdownMenuOption, Icon } from '@/components';
@@ -19,7 +19,7 @@ export const ConversationItemActions = ({
const options: DropdownMenuOption[] = [
{
- label: t('Remove'),
+ label: t('Delete chat'),
icon: 'delete',
callback: () => deleteModal.open(),
disabled: false,
@@ -30,12 +30,19 @@ export const ConversationItemActions = ({
return (
<>
-
+
+ }
+ >
{deleteModal.isOpen && (
diff --git a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanel.tsx b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanel.tsx
index f877e84..4ca57c7 100644
--- a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanel.tsx
+++ b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanel.tsx
@@ -5,7 +5,6 @@ import { createGlobalStyle, css } from 'styled-components';
import { Box, SeparatedSection } from '@/components';
import { useCunninghamTheme } from '@/cunningham';
import { ButtonLogin } from '@/features/auth';
-import { HEADER_HEIGHT } from '@/features/header/conf';
import { LanguagePicker } from '@/features/language';
import { useResponsiveStore } from '@/stores';
@@ -38,7 +37,7 @@ export const LeftPanel = () => {
{
$hasTransition
$css={css`
z-index: 999;
- width: 100dvw;
+ overflow: hidden;
+ width: ${isPanelOpen ? '100%' : '200px'};
height: calc(100dvh - 52px);
border-right: 1px solid var(--c--theme--colors--greyscale-200);
position: fixed;
- transform: translateX(${isPanelOpen ? '0' : '-100dvw'});
+ top: 52px;
+ left: ${isPanelOpen ? '0' : '-300px'};
background-color: var(--c--theme--colors--greyscale-000);
`}
className="--docs--left-panel-mobile"
diff --git a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversationItem.tsx b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversationItem.tsx
index 7aba104..9dd4d19 100644
--- a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversationItem.tsx
+++ b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversationItem.tsx
@@ -1,7 +1,6 @@
import { css } from 'styled-components';
import { Box, StyledLink } from '@/components';
-import { useCunninghamTheme } from '@/cunningham';
import { ChatConversation } from '@/features/chat/types';
import { ConversationItemActions } from '@/features/left-panel/components/ConversationItemActions';
import { SimpleConversationItem } from '@/features/left-panel/components/SimpleConversationItem';
@@ -9,40 +8,47 @@ import { useResponsiveStore } from '@/stores';
type LeftPanelConversationItemProps = {
conversation: ChatConversation;
+ isCurrentConversation: boolean;
};
export const LeftPanelConversationItem = ({
conversation,
+ isCurrentConversation,
}: LeftPanelConversationItemProps) => {
- const { spacingsTokens } = useCunninghamTheme();
const { isDesktop } = useResponsiveStore();
+ // const { togglePanel } = useLeftPanelStore();
return (
-
+
+ {/*To do : close panel onClick*/}
+
diff --git a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversations.tsx b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversations.tsx
index f37b16c..a405bd3 100644
--- a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversations.tsx
+++ b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelConversations.tsx
@@ -1,3 +1,4 @@
+import { useRouter } from 'next/router';
import { useTranslation } from 'react-i18next';
import { Box, InfiniteScroll, Text } from '@/components';
@@ -7,6 +8,8 @@ import { LeftPanelConversationItem } from '@/features/left-panel/components/Left
export const LeftPanelConversations = () => {
const { t } = useTranslation();
+ const router = useRouter();
+ const { id } = router.query;
const { spacingsTokens } = useCunninghamTheme();
@@ -34,10 +37,10 @@ export const LeftPanelConversations = () => {
- {t('Recent conversations')}
+ {t('History')}
{
{favoriteConversations.map((conversation) => (
))}
diff --git a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelHeader.tsx b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelHeader.tsx
index 74eb004..bb3137e 100644
--- a/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelHeader.tsx
+++ b/src/frontend/apps/conversations/src/features/left-panel/components/LeftPanelHeader.tsx
@@ -7,6 +7,7 @@ import { Box, Icon, SeparatedSection } from '@/components';
import { useAuth } from '@/features/auth';
import { ConversationSearchModal } from '@/features/chat-search';
import { useCmdK } from '@/hook/useCmdK';
+import { useResponsiveStore } from '@/stores';
import { useLeftPanelStore } from '../stores';
@@ -14,6 +15,7 @@ export const LeftPanelHeader = ({ children }: PropsWithChildren) => {
const router = useRouter();
const { authenticated } = useAuth();
const [isSearchModalOpen, setIsSearchModalOpen] = useState(false);
+ const { isDesktop } = useResponsiveStore();
const openSearchModal = useCallback(() => {
const isEditorToolbarOpen =
@@ -34,47 +36,45 @@ export const LeftPanelHeader = ({ children }: PropsWithChildren) => {
const goToHome = () => {
router.push('/');
- togglePanel();
+ if (!isDesktop) {
+ togglePanel();
+ }
};
return (
<>
-
-
-
-
+ {authenticated && (
+
+
+
+
+ }
+ onClick={goToHome}
+ >
+ {t('New chat')}
+
+
+
}
/>
- {authenticated && (
-
- }
- />
- )}
- {authenticated && (
-
- )}
-
-
- {children}
-
+
+ {children}
+
+ )}
{isSearchModalOpen && (
{
const { t } = useTranslation();
const { spacingsTokens, colorsTokens } = useCunninghamTheme();
- const { isDesktop } = useResponsiveStore();
+ const { isDesktop: _isDesktop } = useResponsiveStore();
return (
-
@@ -59,23 +58,10 @@ export const SimpleConversationItem = ({
aria-label={conversation.title || t('Untitled conversation')}
$size="sm"
$variation="1000"
- $weight="500"
$css={ItemTextCss}
>
{conversation.title || t('Untitled conversation')}
- {(!isDesktop || showAccesses) && (
-
-
- {DateTime.fromISO(conversation.updated_at).toRelative()}
-
-
- )}
);
diff --git a/src/frontend/apps/conversations/src/layouts/MainLayout.tsx b/src/frontend/apps/conversations/src/layouts/MainLayout.tsx
index 3f089c8..7c3dde4 100644
--- a/src/frontend/apps/conversations/src/layouts/MainLayout.tsx
+++ b/src/frontend/apps/conversations/src/layouts/MainLayout.tsx
@@ -6,6 +6,7 @@ import { useCunninghamTheme } from '@/cunningham';
import { Header } from '@/features/header';
import { HEADER_HEIGHT } from '@/features/header/conf';
import { LeftPanel } from '@/features/left-panel';
+import { useLeftPanelStore } from '@/features/left-panel/stores';
import { MAIN_LAYOUT_ID } from '@/layouts/conf';
import { useResponsiveStore } from '@/stores';
@@ -15,42 +16,52 @@ type MainLayoutProps = {
export function MainLayout({
children,
- backgroundColor = 'white',
+ backgroundColor: _backgroundColor = 'white',
}: PropsWithChildren) {
const { isDesktop } = useResponsiveStore();
const { colorsTokens } = useCunninghamTheme();
- const currentBackgroundColor = !isDesktop ? 'white' : backgroundColor;
+ const { togglePanel: _togglePanel, isPanelOpen } = useLeftPanelStore();
return (
-
-
- {children}
+
+
+
+
+
+ {children}
+
diff --git a/src/frontend/apps/conversations/src/pages/chat/[id]/index.tsx b/src/frontend/apps/conversations/src/pages/chat/[id]/index.tsx
index 5335453..bb2edf0 100644
--- a/src/frontend/apps/conversations/src/pages/chat/[id]/index.tsx
+++ b/src/frontend/apps/conversations/src/pages/chat/[id]/index.tsx
@@ -13,7 +13,7 @@ const Page: NextPageWithLayout = () => {
};
Page.getLayout = function getLayout(page: ReactElement) {
- return {page};
+ return {page};
};
export default Page;
diff --git a/src/frontend/apps/conversations/src/pages/chat/index.tsx b/src/frontend/apps/conversations/src/pages/chat/index.tsx
index e6b2e13..bebff37 100644
--- a/src/frontend/apps/conversations/src/pages/chat/index.tsx
+++ b/src/frontend/apps/conversations/src/pages/chat/index.tsx
@@ -9,7 +9,7 @@ const Page: NextPageWithLayout = () => {
};
Page.getLayout = function getLayout(page: ReactElement) {
- return {page};
+ return {page};
};
export default Page;
diff --git a/src/frontend/apps/conversations/src/pages/globals.css b/src/frontend/apps/conversations/src/pages/globals.css
index c6bb8ac..ca6dcf7 100644
--- a/src/frontend/apps/conversations/src/pages/globals.css
+++ b/src/frontend/apps/conversations/src/pages/globals.css
@@ -76,3 +76,7 @@ main ::-webkit-scrollbar-thumb:hover,
nextjs-portal {
display: none;
}
+
+.c__modal {
+ box-shadow: 0 6px 18px 0 rgb(0 0 0 / 16%);
+}
diff --git a/src/frontend/apps/e2e/__tests__/app-conversations/home.spec.ts b/src/frontend/apps/e2e/__tests__/app-conversations/home.spec.ts
index be94eda..8589235 100644
--- a/src/frontend/apps/e2e/__tests__/app-conversations/home.spec.ts
+++ b/src/frontend/apps/e2e/__tests__/app-conversations/home.spec.ts
@@ -27,9 +27,8 @@ test.describe('Home page', () => {
// Check the titles
const h2 = page.locator('h2');
- await expect(h2.getByText('Govs ❤️ Open Source.')).toBeVisible();
await expect(
- h2.getByText('Conversation with AI, simplified.'),
+ h2.getByText('Your digital assistant'),
).toBeVisible();
await expect(
page.getByRole('button', { name: 'Start conversation' }),
@@ -76,13 +75,11 @@ test.describe('Home page', () => {
header.getByRole('img', { name: 'Assistant logo' }),
).toBeVisible();
await expect(
- header.getByRole('heading', { name: 'Assistant' }),
+ header.getByRole('img', { name: 'Assistant logo' }),
).toBeVisible();
- await expect(header.getByText('BETA')).toBeVisible();
// Check the titles
const h2 = page.locator('h2');
- await expect(h2.getByText('Govs ❤️ Open Source.')).toBeVisible();
await expect(
h2.getByText('Conversation with AI, simplified.'),
).toBeVisible();