Skip to content

Commit 8f90d92

Browse files
committed
style: sidebar/interface minor ui/ux
1 parent eba5c3e commit 8f90d92

3 files changed

Lines changed: 39 additions & 13 deletions

File tree

apps/frontend/app/components/chat/ChatInterface.vue

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import VanishingInput from '~/lib/shadcn/components/ui/vanishing-input/Vanishing
1515
import LiquidGlassDiv from '../LiquidGlassDiv.vue'
1616
1717
const isDev = import.meta.dev
18-
const { $auth } = useNuxtApp()
18+
const { $auth, $init } = useNuxtApp()
1919
const { convexApiUrl } = useRuntimeConfig().public
2020
const convex = useConvexClient()
2121
const chatContext = useChatContext()
@@ -379,7 +379,9 @@ function alertIsStreaming(input: string) {
379379

380380
<div
381381
v-show="!(isFetching && !messages.length)"
382-
class="pointer-events-none absolute left-0 z-0 h-screen w-full place-content-center overflow-hidden"
382+
:key="chatContext.interfaceSRK.value"
383+
v-motion-pop-visible-once
384+
class="pointer-events-none absolute left-0 z-0 h-screen w-full place-content-center overflow-hidden transition-height"
383385
>
384386
<div
385387
v-if="!messages.length"
@@ -400,21 +402,18 @@ function alertIsStreaming(input: string) {
400402
>
401403
<component
402404
:is="chatContext.insaneUI.value ? LiquidGlassDiv : 'div'"
403-
class="rounded-$radius $c-radius=$radius" :class="[
405+
class="border rounded-$radius $c-radius=$radius"
406+
:class="[
404407
m.role === 'user'
405-
? 'bg-secondary-100 dark:bg-secondary-950'
406-
: 'bg-primary-100 dark:bg-primary-950',
408+
? 'bg-secondary-100 dark:bg-secondary-950 border-secondary-200 max-w-80% md:max-w-2xl'
409+
: 'bg-primary-100 dark:bg-primary-950 border-primary-200 max-w-full md:max-w-3xl',
407410
chatContext.insaneUI.value
408411
? 'bg-opacity-50!'
409412
: 'bg-opacity-5!',
410413
]" tabindex="0"
411414
>
412415
<Card
413-
class="bg-transparent shadow-md" :class="[
414-
m.role === 'user'
415-
? 'border-secondary-200 max-w-80% md:max-w-2xl'
416-
: 'border-primary-200 max-w-full md:max-w-3xl',
417-
]"
416+
class="bg-transparent shadow-md"
418417
>
419418
<!-- <CardHeader class="px-4 py-2">
420419
<CardTitle class="text-sm font-semibold">
@@ -502,6 +501,24 @@ function alertIsStreaming(input: string) {
502501
</div>
503502
</LiquidGlassDiv>
504503

504+
<!-- -->
505+
<div class="absolute right-3 top-3 hidden items-center lg:flex">
506+
<Tooltip :delay-duration="500">
507+
<TooltipTrigger as-child>
508+
<Button
509+
variant="ghost" size="icon"
510+
class="size-7"
511+
@click="chatContext.insaneUI.value = !chatContext.insaneUI.value"
512+
>
513+
<div :class="chatContext.insaneUI.value ? ' i-hugeicons:crazy bg-mainGradient' : ' i-hugeicons:confused'" />
514+
</Button>
515+
</TooltipTrigger>
516+
<TooltipContent side="bottom" :side-offset="6">
517+
<p>InsaneUI</p>
518+
</TooltipContent>
519+
</Tooltip>
520+
</div>
521+
505522
<!-- Multi Stream Confirm Dialog -->
506523
<AlertDialog
507524
v-model:open="multiStreamConfirmDialogOpen"

apps/frontend/app/components/chat/ChatSidebar.vue

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ import {
2626
SidebarFooter,
2727
SidebarGroup,
2828
SidebarHeader,
29+
useSidebar,
2930
} from '@/lib/shadcn/components/ui/sidebar'
3031
import { Button } from '~/lib/shadcn/components/ui/button'
3132
3233
const { $auth, $init } = useNuxtApp()
3334
const colorMode = useColorMode()
3435
const convex = useConvexClient()
3536
const chatContext = useChatContext()
37+
const sidebarContext = useSidebar()
3638
3739
const threadIdRef = useThreadIdRef()
3840
@@ -125,7 +127,7 @@ const [DefineThreadLiItem, ReuseThreadLiItem] = createReusableTemplate<{ thread:
125127

126128
<template>
127129
<Sidebar>
128-
<SidebarHeader class="p-4">
130+
<SidebarHeader class="px-4 py-2">
129131
<div class="absolute right-3 top-3">
130132
<Button
131133
variant="ghost" size="icon"
@@ -143,7 +145,11 @@ const [DefineThreadLiItem, ReuseThreadLiItem] = createReusableTemplate<{ thread:
143145
</div>
144146

145147
<div>
146-
<NuxtLink :to="{ name: 'chat-all' }" exact-active-class="[&>*]:(bg-accent/80! hover:bg-accent/100!)">
148+
<NuxtLink
149+
:to="{ name: 'chat-all' }"
150+
exact-active-class="[&>*]:(bg-accent/80! hover:bg-accent/100! active:bg-accent/60!)"
151+
@pointerdown="++chatContext.interfaceSRK.value; sidebarContext.setOpenMobile(false)"
152+
>
147153
<Button class="w-full" variant="outline" size="sm">
148154
{{ $t('chat.sidebar.newChat') }}
149155
</Button>
@@ -206,6 +212,7 @@ const [DefineThreadLiItem, ReuseThreadLiItem] = createReusableTemplate<{ thread:
206212
<NuxtLink
207213
:to="`/chat/${thread._id}`"
208214
class="group/thread relative block overflow-hidden rounded-md p-2 px-3 [&.router-link-exact-active]:bg-primary/10 hover:bg-primary/20"
215+
@pointerdown="sidebarContext.setOpenMobile(false)"
209216
>
210217
<Tooltip :delay-duration="500">
211218
<TooltipTrigger as-child>
@@ -301,7 +308,7 @@ const [DefineThreadLiItem, ReuseThreadLiItem] = createReusableTemplate<{ thread:
301308
class="w-[--reka-popper-anchor-width]"
302309
>
303310
<DropdownMenuItem class="justify-between" @click="chatContext.insaneUI.value = !chatContext.insaneUI.value">
304-
<div>{{ 'InsaneUI' }}</div>
311+
<div>InsaneUI</div>
305312
<div :class="chatContext.insaneUI.value ? ' i-hugeicons:crazy bg-mainGradient' : ' i-hugeicons:confused'" />
306313
</DropdownMenuItem>
307314
</DropdownMenuContent>

apps/frontend/app/utils/chat.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { createContext } from 'reka-ui'
88
export const [useChatContext, provideSidebarContext] = createContext<{
99
insaneUI: Ref<boolean>
1010
threads: Ref<Doc<'threads'>[]>
11+
// Interface soft render key
12+
interfaceSRK: Ref<number>
1113
}>('chat page')
1214

1315
export function useThreadIdRef() {

0 commit comments

Comments
 (0)