Merge pull request #2795 from arc53/ui-scan

UI refinements
This commit is contained in:
Alex authored and GitHub committed 2026-09-17 15:16:04 +01:00
commit 24bcbd938e
19 files changed
+36 -28

No files matched your search

@@ -1587,7 +1587,7 @@ function WorkflowBuilderInner() {
size="icon-sm" size="icon-sm"
onClick={() => setShowWorkflowSettings(!showWorkflowSettings)} onClick={() => setShowWorkflowSettings(!showWorkflowSettings)}
className="text-muted-foreground hover:bg-accent hover:text-foreground size-auto p-1" className="text-muted-foreground hover:bg-accent hover:text-foreground size-auto p-1"
aria-label="Workflow settings" aria-label="Edit workflow details"
title={ title={
workflowDescription workflowDescription
? `${workflowName || 'New Workflow'} — ${workflowDescription}` ? `${workflowName || 'New Workflow'} — ${workflowDescription}`
+2 -6
View File
@@ -1,4 +1,4 @@
import { ExternalLink, Plus } from 'lucide-react'; import { Plus, Share } from 'lucide-react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import { ShareConversationModal } from '../modals/ShareConversationModal'; import { ShareConversationModal } from '../modals/ShareConversationModal';
@@ -73,11 +73,7 @@ export default function ActionButtons({
onClick={() => setShareModalState(true)} onClick={() => setShareModalState(true)}
className="text-muted-foreground hover:text-foreground rounded-full" className="text-muted-foreground hover:text-foreground rounded-full"
> >
<ExternalLink <Share className="size-5" strokeWidth={1.75} aria-label="share" />
className="size-5"
strokeWidth={1.75}
aria-label="share"
/>
</Button> </Button>
{isShareModalOpen && ( {isShareModalOpen && (
<ShareConversationModal <ShareConversationModal
@@ -22,7 +22,7 @@ export default function AttachFileButton({ onChange }: AttachFileButtonProps) {
<img <img
src={ClipIcon} src={ClipIcon}
alt="Attach" alt="Attach"
className="mr-1 h-3.5 w-3.5 sm:mr-1.5 sm:h-4 sm:w-4" className="mr-1 h-3.5 w-3.5 sm:mr-1.5 sm:h-4 sm:w-4 dark:invert"
/> />
<span className="xs:text-xs dark:text-foreground text-muted-foreground text-xs font-medium sm:text-sm"> <span className="xs:text-xs dark:text-foreground text-muted-foreground text-xs font-medium sm:text-sm">
{t('conversation.attachments.attach')} {t('conversation.attachments.attach')}
@@ -61,7 +61,7 @@ export default function SourcesTrigger({
<img <img
src={SourceIcon} src={SourceIcon}
alt="Sources" alt="Sources"
className="mr-1 h-3.5 w-3.5 shrink-0 sm:mr-1.5 sm:h-4" className="mr-1 h-3.5 w-3.5 shrink-0 sm:mr-1.5 sm:h-4 sm:w-4 dark:invert"
/> />
<span className="xs:text-xs dark:text-foreground text-muted-foreground truncate overflow-hidden text-xs font-medium sm:text-sm"> <span className="xs:text-xs dark:text-foreground text-muted-foreground truncate overflow-hidden text-xs font-medium sm:text-sm">
{selectedDocs && selectedDocs.length > 0 {selectedDocs && selectedDocs.length > 0
@@ -62,7 +62,7 @@ export default function ToolsTrigger({
<img <img
src={ToolIcon} src={ToolIcon}
alt="Tools" alt="Tools"
className="mr-1 h-3.5 w-3.5 shrink-0 sm:mr-1.5 sm:h-4 sm:w-4" className="mr-1 h-3.5 w-3.5 shrink-0 sm:mr-1.5 sm:h-4 sm:w-4 dark:invert"
/> />
<span className="xs:text-xs dark:text-foreground text-muted-foreground truncate overflow-hidden text-xs font-medium sm:text-sm"> <span className="xs:text-xs dark:text-foreground text-muted-foreground truncate overflow-hidden text-xs font-medium sm:text-sm">
{t('settings.tools.label')} {t('settings.tools.label')}
+14 -9
View File
@@ -1,4 +1,4 @@
import { ExternalLink, X } from 'lucide-react'; import { Share, X } from 'lucide-react';
import { import {
SyntheticEvent, SyntheticEvent,
useCallback, useCallback,
@@ -135,7 +135,7 @@ export default function ConversationTile({
const menuOptions: ConversationMenuOption[] = [ const menuOptions: ConversationMenuOption[] = [
{ {
icon: <ExternalLink className="size-3.5" strokeWidth={1.75} />, icon: <Share className="size-4" strokeWidth={1.75} />,
label: t('convTile.share'), label: t('convTile.share'),
onClick: (event: SyntheticEvent) => { onClick: (event: SyntheticEvent) => {
event.stopPropagation(); event.stopPropagation();
@@ -216,11 +216,13 @@ export default function ConversationTile({
<div className="dark:text-muted-foreground flex text-white"> <div className="dark:text-muted-foreground flex text-white">
{isEdit ? ( {isEdit ? (
<div className="flex gap-1"> <div className="flex gap-1">
<img <Button
src={CheckMark2} type="button"
alt="Edit" variant="ghost"
className="mr-2 h-4 w-4 cursor-pointer text-white hover:opacity-50" size="icon-sm"
id={`img-${conversation.id}`} aria-label={t('convTile.save')}
title={t('convTile.save')}
className="mr-2 h-auto w-auto bg-transparent p-0 hover:bg-transparent hover:opacity-50"
onClick={(event: SyntheticEvent) => { onClick={(event: SyntheticEvent) => {
event.stopPropagation(); event.stopPropagation();
handleSaveConversation({ handleSaveConversation({
@@ -228,12 +230,15 @@ export default function ConversationTile({
name: conversationName, name: conversationName,
}); });
}} }}
/> >
<img src={CheckMark2} alt="" className="h-4 w-4" />
</Button>
<Button <Button
type="button" type="button"
variant="ghost" variant="ghost"
size="icon-sm" size="icon-sm"
aria-label="Exit" aria-label={t('cancel')}
title={t('cancel')}
id={`img-${conversation.id}`} id={`img-${conversation.id}`}
className="mt-px mr-4 h-auto w-auto bg-transparent p-0 hover:bg-transparent hover:opacity-50" className="mt-px mr-4 h-auto w-auto bg-transparent p-0 hover:bg-transparent hover:opacity-50"
onClick={(event: SyntheticEvent) => { onClick={(event: SyntheticEvent) => {
+1
View File
@@ -1063,6 +1063,7 @@
"share": "Teilen", "share": "Teilen",
"delete": "Löschen", "delete": "Löschen",
"rename": "Umbenennen", "rename": "Umbenennen",
"save": "Speichern",
"deleteWarning": "Bist du sicher, dass du diese Konversation löschen möchtest?" "deleteWarning": "Bist du sicher, dass du diese Konversation löschen möchtest?"
}, },
"pagination": { "pagination": {
+1
View File
@@ -1068,6 +1068,7 @@
"share": "Share", "share": "Share",
"delete": "Delete", "delete": "Delete",
"rename": "Rename", "rename": "Rename",
"save": "Save",
"deleteWarning": "Are you sure you want to delete this conversation?" "deleteWarning": "Are you sure you want to delete this conversation?"
}, },
"pagination": { "pagination": {
+1
View File
@@ -1063,6 +1063,7 @@
"share": "Compartir", "share": "Compartir",
"delete": "Eliminar", "delete": "Eliminar",
"rename": "Renombrar", "rename": "Renombrar",
"save": "Guardar",
"deleteWarning": "¿Está seguro de que desea eliminar esta conversación?" "deleteWarning": "¿Está seguro de que desea eliminar esta conversación?"
}, },
"pagination": { "pagination": {
+1
View File
@@ -1063,6 +1063,7 @@
"share": "共有", "share": "共有",
"delete": "削除", "delete": "削除",
"rename": "名前変更", "rename": "名前変更",
"save": "保存",
"deleteWarning": "この会話を削除してもよろしいですか?" "deleteWarning": "この会話を削除してもよろしいですか?"
}, },
"pagination": { "pagination": {
+1
View File
@@ -1063,6 +1063,7 @@
"share": "Поделиться", "share": "Поделиться",
"delete": "Удалить", "delete": "Удалить",
"rename": "Переименовать", "rename": "Переименовать",
"save": "Сохранить",
"deleteWarning": "Вы уверены, что хотите удалить этот разговор?" "deleteWarning": "Вы уверены, что хотите удалить этот разговор?"
}, },
"pagination": { "pagination": {
+1
View File
@@ -1063,6 +1063,7 @@
"share": "分享", "share": "分享",
"delete": "刪除", "delete": "刪除",
"rename": "重新命名", "rename": "重新命名",
"save": "儲存",
"deleteWarning": "您確定要刪除這個對話嗎?" "deleteWarning": "您確定要刪除這個對話嗎?"
}, },
"pagination": { "pagination": {
+1
View File
@@ -1063,6 +1063,7 @@
"share": "分享", "share": "分享",
"delete": "删除", "delete": "删除",
"rename": "重命名", "rename": "重命名",
"save": "保存",
"deleteWarning": "您确定要删除此对话吗?" "deleteWarning": "您确定要删除此对话吗?"
}, },
"pagination": { "pagination": {
+1 -1
View File
@@ -269,7 +269,7 @@ export default function MoveToFolderModal({
<img <img
src={ChevronRight} src={ChevronRight}
alt="expand" alt="expand"
className={`h-3 w-3 ${selectedFolderId === folder.id ? 'brightness-0 invert' : ''}`} className={`h-3 w-3 ${selectedFolderId === folder.id ? 'brightness-0 invert' : 'dark:invert'}`}
/> />
</span> </span>
)} )}
+1 -1
View File
@@ -402,7 +402,7 @@ function Log({
<img <img
src={ChevronRight} src={ChevronRight}
alt="Expand log entry" alt="Expand log entry"
className={`mt-[3px] h-3 w-3 transition duration-300 ${isOpen ? 'rotate-90' : ''}`} className={`mt-[3px] h-3 w-3 transition duration-300 dark:invert ${isOpen ? 'rotate-90' : ''}`}
/> />
<span className="flex flex-row flex-wrap gap-2"> <span className="flex flex-row flex-wrap gap-2">
<h2 className="dark:text-foreground text-xs text-black/60">{`${log.timestamp}`}</h2> <h2 className="dark:text-foreground text-xs text-black/60">{`${log.timestamp}`}</h2>
+2 -2
View File
@@ -484,7 +484,7 @@ export default function ToolConfig({
<img <img
src={ChevronRight} src={ChevronRight}
alt="expand" alt="expand"
className={`h-4 w-4 opacity-60 transition-transform duration-200 ${isExpanded ? 'rotate-90' : ''}`} className={`h-4 w-4 opacity-60 transition-transform duration-200 dark:invert ${isExpanded ? 'rotate-90' : ''}`}
/> />
<p className="text-foreground dark:text-foreground font-semibold"> <p className="text-foreground dark:text-foreground font-semibold">
{action.name} {action.name}
@@ -919,7 +919,7 @@ function APIToolConfig({
<img <img
src={ChevronRight} src={ChevronRight}
alt="expand" alt="expand"
className={`h-4 w-4 opacity-60 transition-transform duration-200 ${isExpanded ? 'rotate-90' : ''}`} className={`h-4 w-4 opacity-60 transition-transform duration-200 dark:invert ${isExpanded ? 'rotate-90' : ''}`}
/> />
<span <span
className={`rounded px-2 py-0.5 text-xs font-medium ${getMethodColorClass(action.method)}`} className={`rounded px-2 py-0.5 text-xs font-medium ${getMethodColorClass(action.method)}`}
@@ -792,7 +792,7 @@ export default function RetrievalOptions({
<img <img
src={ChevronRight} src={ChevronRight}
alt="" alt=""
className={`h-3 w-3 transform transition-transform ${ className={`h-3 w-3 transform transition-transform dark:invert ${
expanded ? 'rotate-90' : '' expanded ? 'rotate-90' : ''
}`} }`}
/> />
+3 -3
View File
@@ -3,11 +3,11 @@ import { useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { import {
Building2,
Check, Check,
ChevronsUpDown, ChevronsUpDown,
Plus, Plus,
Settings as SettingsIcon, Settings as SettingsIcon,
User,
Users, Users,
} from 'lucide-react'; } from 'lucide-react';
@@ -149,7 +149,7 @@ export default function TeamSwitcher({
{currentTeam ? ( {currentTeam ? (
<Users className="size-4" strokeWidth={1.75} /> <Users className="size-4" strokeWidth={1.75} />
) : ( ) : (
<Building2 className="size-4" strokeWidth={1.75} /> <User className="size-4" strokeWidth={1.75} />
)} )}
</span> </span>
<span className="min-w-0 flex-1"> <span className="min-w-0 flex-1">
@@ -174,7 +174,7 @@ export default function TeamSwitcher({
{/* Personal account entry */} {/* Personal account entry */}
{currentTeam && ( {currentTeam && (
<DropdownMenuItem onSelect={() => selectTeam(null)}> <DropdownMenuItem onSelect={() => selectTeam(null)}>
<Building2 className="size-4" strokeWidth={1.75} /> <User className="size-4" strokeWidth={1.75} />
<span className="min-w-0 flex-1 truncate"> <span className="min-w-0 flex-1 truncate">
{t('teams.switcher.personal')} {t('teams.switcher.personal')}
</span> </span>
+1 -1
View File
@@ -1086,7 +1086,7 @@ function Upload({
<img <img
src={ChevronRight} src={ChevronRight}
alt="back" alt="back"
className="h-3 w-3 rotate-180 transform" className="h-3 w-3 rotate-180 transform dark:invert"
/> />
<span>{t('modals.uploadDoc.back')}</span> <span>{t('modals.uploadDoc.back')}</span>
</Button> </Button>