From c95e6f735405ae1f905618a397a641dfc2eed1d0 Mon Sep 17 00:00:00 2001 From: Guilhem Date: Wed, 21 Jan 2026 19:38:28 +0000 Subject: [PATCH] fix(frontend): improve ai chat ui (#7648) * update chat to brand guidelines * remove useless footer * restore conversation count * nit * nit --- .../src/lib/components/InfiniteList.svelte | 55 +++--- .../components/common/badge/CountBadge.svelte | 8 +- .../FlowConversationsSidebar.svelte | 163 +++++++++--------- .../src/lib/components/table/DataTable.svelte | 10 +- 4 files changed, 125 insertions(+), 111 deletions(-) diff --git a/frontend/src/lib/components/InfiniteList.svelte b/frontend/src/lib/components/InfiniteList.svelte index b4afaf41ba..10351a95cc 100644 --- a/frontend/src/lib/components/InfiniteList.svelte +++ b/frontend/src/lib/components/InfiniteList.svelte @@ -16,6 +16,8 @@ noBorder?: boolean extraRowClasses?: { bgSelected: string; bgHover: string; class: string } neverShowLoader?: boolean + preventXOverflow?: boolean + customRow?: import('svelte').Snippet<[any]> columns?: import('svelte').Snippet extra_row?: import('svelte').Snippet<[any]> children?: import('svelte').Snippet<[any]> @@ -36,6 +38,8 @@ class: '' }, neverShowLoader = false, + preventXOverflow = false, + customRow, columns, extra_row, children, @@ -167,34 +171,41 @@ {rounded} {noBorder} {neverShowLoader} + {preventXOverflow} > {@render columns?.()} - dispatch('select', 'extraRow')} - class={twMerge( - extraRowClasses.class, - selectedItemId === 'extraRow' ? extraRowClasses.bgSelected : extraRowClasses.bgHover, - 'cursor-pointer rounded-md' - )} - on:hover={(e) => (hovered = e.detail ? 'extraRow' : undefined)} - > - {@render extra_row?.({ hover: hovered === 'extraRow' })} - + {#if extra_row} + dispatch('select', 'extraRow')} + class={twMerge( + extraRowClasses.class, + selectedItemId === 'extraRow' ? extraRowClasses.bgSelected : extraRowClasses.bgHover, + 'cursor-pointer rounded-md' + )} + on:hover={(e) => (hovered = e.detail ? 'extraRow' : undefined)} + > + {@render extra_row?.({ hover: hovered === 'extraRow' })} + + {/if} {#each items ?? [] as item, index} {@const hover = item.id === hovered} - dispatch('select', item)} - class={twMerge( - selectedItemId === item.id ? 'bg-surface-selected' : 'hover:bg-surface-hover', - 'cursor-pointer rounded-md', - item.isNew && index === 0 ? 'animate-slideIn' : 'group' - )} - on:hover={(e) => (hovered = e.detail ? item.id : undefined)} - > - {@render children?.({ item, hover })} - + {#if customRow} + {@render customRow?.({ item, hover })} + {:else} + dispatch('select', item)} + class={twMerge( + selectedItemId === item.id ? 'bg-surface-selected' : 'hover:bg-surface-hover', + 'cursor-pointer rounded-md', + item.isNew && index === 0 ? 'animate-slideIn' : 'group' + )} + on:hover={(e) => (hovered = e.detail ? item.id : undefined)} + > + {@render children?.({ item, hover })} + + {/if} {/each} diff --git a/frontend/src/lib/components/common/badge/CountBadge.svelte b/frontend/src/lib/components/common/badge/CountBadge.svelte index 06d1e96715..7219834bd0 100644 --- a/frontend/src/lib/components/common/badge/CountBadge.svelte +++ b/frontend/src/lib/components/common/badge/CountBadge.svelte @@ -6,9 +6,10 @@ count: number | undefined small?: boolean alwaysVisible?: boolean + class?: string } - let { count, small = true, alwaysVisible = false }: Props = $props() + let { count, small = true, alwaysVisible = false, class: classNames = '' }: Props = $props() {#if count === undefined || count > 0 || alwaysVisible} @@ -25,7 +26,8 @@ // Special case for always visible alwaysVisible && small ? 'h-3 w-3 text-[8px] -right-0.5 -top-0.5' : '', - alwaysVisible && !small ? 'h-4 w-4 text-xs -right-1 -top-1' : '' + alwaysVisible && !small ? 'h-4 w-4 text-xs -right-1 -top-1' : '', + classNames )} > {#if count === undefined} @@ -34,4 +36,4 @@

{count}

{/if} -{/if} \ No newline at end of file +{/if} diff --git a/frontend/src/lib/components/flows/conversations/FlowConversationsSidebar.svelte b/frontend/src/lib/components/flows/conversations/FlowConversationsSidebar.svelte index 579e0ff3e4..2f09bcebe1 100644 --- a/frontend/src/lib/components/flows/conversations/FlowConversationsSidebar.svelte +++ b/frontend/src/lib/components/flows/conversations/FlowConversationsSidebar.svelte @@ -1,18 +1,12 @@
-
-
+
+
@@ -62,71 +58,79 @@ {#if !manager.isSidebarExpanded} -
- + +
{/if} -
+
- {#snippet children({ item: conversation, hover })} -
- - -
+ + {getConversationTitle(conversation)} + + +
+ {/if} {/snippet} {#snippet empty()} @@ -136,13 +140,4 @@ {/snippet}
- - {#if manager.isSidebarExpanded} - -
-

- {manager.conversations.length} conversation{manager.conversations.length !== 1 ? 's' : ''} -

-
- {/if}
diff --git a/frontend/src/lib/components/table/DataTable.svelte b/frontend/src/lib/components/table/DataTable.svelte index c50395b089..76cc38d180 100644 --- a/frontend/src/lib/components/table/DataTable.svelte +++ b/frontend/src/lib/components/table/DataTable.svelte @@ -36,6 +36,7 @@ loading?: boolean loadingMore?: boolean containerClass?: string + preventXOverflow?: boolean children?: import('svelte').Snippet emptyMessage?: import('svelte').Snippet } @@ -62,7 +63,8 @@ loadingMore = false, containerClass = '', children, - emptyMessage + emptyMessage, + preventXOverflow = false }: Props = $props() setContext('datatable', { size @@ -127,7 +129,11 @@ bind:clientHeight={tableHeight} > -
+
{@render children?.()}