fix: adjustment minor UI from qa feedback (#2963)
* feat: update minor ui from feedback * fix: adjust spacing import model * feat: edit title thread (#2964) * feat: edit title thread * fix: fix copies * fix copies * fix copies
This commit is contained in:
parent
9ac5696e35
commit
b662c25007
@ -52,7 +52,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"left-panel": {
|
"left-panel": {
|
||||||
"bg": "0, 0%, 13%, 0",
|
"bg": "215, 25%, 9%, 1",
|
||||||
"menu": "0, 0%, 95%, 1",
|
"menu": "0, 0%, 95%, 1",
|
||||||
"menu-hover": "0, 0%, 28%, 0.2",
|
"menu-hover": "0, 0%, 28%, 0.2",
|
||||||
"menu-active": "0, 0%, 100%, 1",
|
"menu-active": "0, 0%, 100%, 1",
|
||||||
@ -64,7 +64,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"right-panel": {
|
"right-panel": {
|
||||||
"bg": "0, 0%, 13%, 0"
|
"bg": "215, 25%, 9%, 1"
|
||||||
},
|
},
|
||||||
|
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
|
|||||||
@ -33,7 +33,7 @@ export default function DownloadingState() {
|
|||||||
<Modal
|
<Modal
|
||||||
title="Downloading model"
|
title="Downloading model"
|
||||||
trigger={
|
trigger={
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex cursor-pointer items-center gap-2">
|
||||||
<Button size="small" theme="ghost">
|
<Button size="small" theme="ghost">
|
||||||
<span className="font-medium">
|
<span className="font-medium">
|
||||||
Downloading model{' '}
|
Downloading model{' '}
|
||||||
|
|||||||
@ -40,7 +40,15 @@ export default function RibbonPanel() {
|
|||||||
const RibbonNavMenus = [
|
const RibbonNavMenus = [
|
||||||
{
|
{
|
||||||
name: 'Thread',
|
name: 'Thread',
|
||||||
icon: <MessageCircleIcon size={18} className="flex-shrink-0" />,
|
icon: (
|
||||||
|
<MessageCircleIcon
|
||||||
|
size={18}
|
||||||
|
className={twMerge(
|
||||||
|
'flex-shrink-0',
|
||||||
|
serverEnabled && 'text-[hsla(var(--disabled-fg))]'
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
),
|
||||||
state: MainViewState.Thread,
|
state: MainViewState.Thread,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -96,7 +96,7 @@ const TopPanel = () => {
|
|||||||
<PaletteIcon size={16} className="cursor-pointer" />
|
<PaletteIcon size={16} className="cursor-pointer" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
{!isMac && (
|
{isWindows && (
|
||||||
<div className="flex items-center gap-x-2">
|
<div className="flex items-center gap-x-2">
|
||||||
<Button
|
<Button
|
||||||
theme="icon"
|
theme="icon"
|
||||||
|
|||||||
@ -93,9 +93,9 @@ const LeftPanelContainer = ({ children }: Props) => {
|
|||||||
showLeftPanel ? 'opacity-100' : 'w-0 translate-x-full opacity-0',
|
showLeftPanel ? 'opacity-100' : 'w-0 translate-x-full opacity-0',
|
||||||
isResizing && 'cursor-col-resize',
|
isResizing && 'cursor-col-resize',
|
||||||
matches &&
|
matches &&
|
||||||
'absolute left-2 z-50 rounded-s-lg border-r border-[hsla(var(--app-border))] bg-[hsla(var(--app-bg))]',
|
'absolute left-2 z-[100] rounded-s-lg border-r border-[hsla(var(--app-border))] bg-[hsla(var(--app-bg))]',
|
||||||
reduceTransparent &&
|
reduceTransparent &&
|
||||||
'border-r border-[hsla(var(--app-border))] bg-[hsla(var(--left-panel-bg))]'
|
'left-0 border-r border-[hsla(var(--app-border))] bg-[hsla(var(--left-panel-bg))]'
|
||||||
)}
|
)}
|
||||||
style={{ width: showLeftPanel ? threadLeftPanelWidth : 0 }}
|
style={{ width: showLeftPanel ? threadLeftPanelWidth : 0 }}
|
||||||
onMouseDown={(e) => isResizing && e.stopPropagation()}
|
onMouseDown={(e) => isResizing && e.stopPropagation()}
|
||||||
|
|||||||
@ -32,13 +32,14 @@ export default function AppearanceOptions() {
|
|||||||
setThemeData(theme)
|
setThemeData(theme)
|
||||||
setTheme(String(theme?.nativeTheme))
|
setTheme(String(theme?.nativeTheme))
|
||||||
if (theme?.reduceTransparent) {
|
if (theme?.reduceTransparent) {
|
||||||
setReduceTransparent(false)
|
setReduceTransparent(reduceTransparent)
|
||||||
} else {
|
} else {
|
||||||
setReduceTransparent(true)
|
setReduceTransparent(true)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
janThemesPath,
|
janThemesPath,
|
||||||
|
reduceTransparent,
|
||||||
setReduceTransparent,
|
setReduceTransparent,
|
||||||
setSelectedIdTheme,
|
setSelectedIdTheme,
|
||||||
setTheme,
|
setTheme,
|
||||||
|
|||||||
@ -145,7 +145,7 @@ const EditModelInfoModal = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form className="flex flex-col space-y-4">
|
<form className="mt-4 flex flex-col space-y-4">
|
||||||
<div className="flex flex-col">
|
<div className="flex flex-col">
|
||||||
<label className="mb-1">Model Name</label>
|
<label className="mb-1">Model Name</label>
|
||||||
<Input
|
<Input
|
||||||
@ -183,7 +183,7 @@ const EditModelInfoModal = () => {
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div className="flex gap-x-2">
|
<div className="mt-4 flex gap-x-2">
|
||||||
<ModalClose asChild onClick={onCancelClick}>
|
<ModalClose asChild onClick={onCancelClick}>
|
||||||
<Button theme="ghost">Cancel</Button>
|
<Button theme="ghost">Cancel</Button>
|
||||||
</ModalClose>
|
</ModalClose>
|
||||||
|
|||||||
@ -232,7 +232,10 @@ const ChatInput = () => {
|
|||||||
{showAttacmentMenus && (
|
{showAttacmentMenus && (
|
||||||
<div
|
<div
|
||||||
ref={refAttachmentMenus}
|
ref={refAttachmentMenus}
|
||||||
className="absolute bottom-14 left-0 z-30 w-36 cursor-pointer rounded-lg border border-[hsla(var(--app-border))] bg-[hsla(var(--app-bg))] py-1 shadow-sm"
|
className={twMerge(
|
||||||
|
'absolute bottom-14 left-0 z-30 w-36 cursor-pointer rounded-lg border border-[hsla(var(--app-border))] bg-[hsla(var(--app-bg))] py-1 shadow-sm',
|
||||||
|
activeSetting && 'bottom-28'
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
<ul>
|
<ul>
|
||||||
<Tooltip
|
<Tooltip
|
||||||
|
|||||||
@ -0,0 +1,71 @@
|
|||||||
|
import { useCallback, memo, useState } from 'react'
|
||||||
|
|
||||||
|
import { Thread } from '@janhq/core'
|
||||||
|
import { Modal, ModalClose, Button, Input } from '@janhq/joi'
|
||||||
|
import { PencilIcon } from 'lucide-react'
|
||||||
|
|
||||||
|
import { useCreateNewThread } from '@/hooks/useCreateNewThread'
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
thread: Thread
|
||||||
|
}
|
||||||
|
|
||||||
|
const ModalEditTitleThread = ({ thread }: Props) => {
|
||||||
|
const [title, setTitle] = useState(thread.title)
|
||||||
|
|
||||||
|
const { updateThreadMetadata } = useCreateNewThread()
|
||||||
|
|
||||||
|
const onUpdateTitle = useCallback(
|
||||||
|
(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
|
||||||
|
updateThreadMetadata({
|
||||||
|
...thread,
|
||||||
|
title: title || 'New Thread',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
[thread, title, updateThreadMetadata]
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
title="Edit title thread"
|
||||||
|
trigger={
|
||||||
|
<div
|
||||||
|
className="flex cursor-pointer items-center space-x-2 px-4 py-2 hover:bg-[hsla(var(--dropdown-menu-hover-bg))]"
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
>
|
||||||
|
<PencilIcon size={16} className="text-[hsla(var(--secondary))]" />
|
||||||
|
<span className="text-bold text-[hsla(var(--secondary))]">
|
||||||
|
Edit title
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
content={
|
||||||
|
<form className="mt-4">
|
||||||
|
<Input
|
||||||
|
value={title}
|
||||||
|
onChange={(e) => setTitle(e.target.value)}
|
||||||
|
autoFocus
|
||||||
|
/>
|
||||||
|
<div className="mt-4 flex justify-end gap-x-2">
|
||||||
|
<ModalClose asChild onClick={(e) => e.stopPropagation()}>
|
||||||
|
<Button theme="ghost">Cancel</Button>
|
||||||
|
</ModalClose>
|
||||||
|
<ModalClose asChild>
|
||||||
|
<Button
|
||||||
|
type="submit"
|
||||||
|
onClick={onUpdateTitle}
|
||||||
|
disabled={title.length === 0}
|
||||||
|
>
|
||||||
|
Save
|
||||||
|
</Button>
|
||||||
|
</ModalClose>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default memo(ModalEditTitleThread)
|
||||||
@ -22,6 +22,7 @@ import useSetActiveThread from '@/hooks/useSetActiveThread'
|
|||||||
|
|
||||||
import ModalCleanThread from './ModalCleanThread'
|
import ModalCleanThread from './ModalCleanThread'
|
||||||
import ModalDeleteThread from './ModalDeleteThread'
|
import ModalDeleteThread from './ModalDeleteThread'
|
||||||
|
import ModalEditTitleThread from './ModalEditTitleThread'
|
||||||
|
|
||||||
import { assistantsAtom } from '@/helpers/atoms/Assistant.atom'
|
import { assistantsAtom } from '@/helpers/atoms/Assistant.atom'
|
||||||
import { editMessageAtom } from '@/helpers/atoms/ChatMessage.atom'
|
import { editMessageAtom } from '@/helpers/atoms/ChatMessage.atom'
|
||||||
@ -143,6 +144,7 @@ const ThreadLeftPanel = () => {
|
|||||||
<MoreHorizontalIcon />
|
<MoreHorizontalIcon />
|
||||||
</Button>
|
</Button>
|
||||||
<div className="invisible absolute -right-1 z-50 w-40 overflow-hidden rounded-lg border border-[hsla(var(--app-border))] bg-[hsla(var(--app-bg))] shadow-lg group-hover/icon:visible">
|
<div className="invisible absolute -right-1 z-50 w-40 overflow-hidden rounded-lg border border-[hsla(var(--app-border))] bg-[hsla(var(--app-bg))] shadow-lg group-hover/icon:visible">
|
||||||
|
<ModalEditTitleThread thread={thread} />
|
||||||
<ModalCleanThread threadId={thread.id} />
|
<ModalCleanThread threadId={thread.id} />
|
||||||
<ModalDeleteThread threadId={thread.id} />
|
<ModalDeleteThread threadId={thread.id} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user