Skip to content

Commit 579b103

Browse files
authored
feat(ui): small ui improvs (#911)
1 parent fc81a36 commit 579b103

File tree

13 files changed

+56
-25
lines changed

13 files changed

+56
-25
lines changed

apps/beeai-ui/src/components/CodeSnippet/CodeSnippet.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ import classes from './CodeSnippet.module.scss';
1212

1313
interface Props extends HTMLAttributes<HTMLElement> {
1414
forceExpand?: boolean;
15-
hideCopyButton?: boolean;
15+
canCopy?: boolean;
1616
}
1717

18-
export function CodeSnippet({ forceExpand, hideCopyButton, ...props }: Props) {
18+
export function CodeSnippet({ forceExpand, canCopy, ...props }: Props) {
1919
const ref = useRef<HTMLElement>(null);
2020

2121
const code = <code ref={ref} {...props} />;
2222

2323
return (
2424
<div className={classes.root}>
25-
{!hideCopyButton && (
25+
{canCopy && (
2626
<div className={classes.copyButton}>
2727
<CopyButton contentRef={ref} size="sm" />
2828
</div>

apps/beeai-ui/src/components/CopyButton/CopyButton.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export function CopyButton({ contentRef, size = 'md' }: Props) {
2828

2929
setTimeout(() => {
3030
setCopied(false);
31-
}, 2000);
31+
}, COPIED_RESET_TIMEOUT);
3232
}, [contentRef]);
3333

3434
return (
@@ -37,3 +37,5 @@ export function CopyButton({ contentRef, size = 'md' }: Props) {
3737
</IconButton>
3838
);
3939
}
40+
41+
const COPIED_RESET_TIMEOUT = 2000;

apps/beeai-ui/src/components/MarkdownContent/components/Code.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function Code({ inline, forceExpand, className, children }: Props) {
3939
}
4040

4141
return (
42-
<CodeSnippet forceExpand={forceExpand} hideCopyButton={forceExpand}>
42+
<CodeSnippet forceExpand={forceExpand} canCopy={!forceExpand}>
4343
{children}
4444
</CodeSnippet>
4545
);

apps/beeai-ui/src/modules/runs/files/components/FileCard.module.scss

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
.root {
77
display: inline-flex;
8-
overflow: hidden;
98
max-inline-size: 100%;
109
align-items: center;
1110
position: relative;
@@ -47,8 +46,10 @@
4746

4847
.link {
4948
@include link-mask();
50-
@include line-clamp();
5149
color: inherit;
50+
text-decoration: none;
51+
display: flex;
52+
min-inline-size: 0;
5253
&::before {
5354
z-index: -1;
5455
border-radius: calc($spacing-03 - 1px);

apps/beeai-ui/src/modules/runs/files/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ export const MAX_FILE_SIZE = 100 * 1024 * 1024;
1010
export const FILE_CONTENT_URL = '/api/v1/files/{file_id}/content';
1111

1212
export const FILE_CONTENT_URL_BASE = 'http://{platform_url}';
13+
14+
export const ALL_FILES_CONTENT_TYPE = '*/*';

apps/beeai-ui/src/modules/runs/files/contexts/FileUploadProvider.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { useToast } from '#contexts/Toast/index.ts';
1111

1212
import { useDeleteFile } from '../api/mutations/useDeleteFile';
1313
import { useUploadFile } from '../api/mutations/useUploadFile';
14-
import { MAX_FILE_SIZE, MAX_FILES } from '../constants';
14+
import { ALL_FILES_CONTENT_TYPE, MAX_FILE_SIZE, MAX_FILES } from '../constants';
1515
import { type FileEntity, FileStatus } from '../types';
1616
import { FileUploadContext } from './file-upload-context';
1717

@@ -89,12 +89,13 @@ export function FileUploadProvider({ allowedContentTypes, children }: PropsWithC
8989
);
9090

9191
const isDisabled = !allowedContentTypes.length;
92+
const accept = allowedContentTypes.reduce(
93+
(value, mimeType) => (mimeType === ALL_FILES_CONTENT_TYPE ? value : { ...value, [mimeType]: [] }),
94+
{} as Record<string, string[]>,
95+
);
9296

9397
const dropzone = useDropzone({
94-
accept: allowedContentTypes.reduce(
95-
(value, mimeType) => ({ ...value, [mimeType]: [] }),
96-
{} as Record<string, string[]>,
97-
),
98+
accept,
9899
disabled: isDisabled,
99100
noClick: true,
100101
noKeyboard: true,

apps/beeai-ui/src/modules/runs/hands-off/HandsOffOutputView.module.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
$max-inline-size: rem(608px);
7+
68
.root {
79
display: flex;
810
flex-direction: column;
@@ -19,6 +21,7 @@
1921
.header {
2022
display: flex;
2123
column-gap: $spacing-06;
24+
max-inline-size: $max-inline-size;
2225
}
2326

2427
.input {
@@ -33,6 +36,9 @@
3336
flex-direction: column;
3437
row-gap: $spacing-06;
3538
flex-grow: 1;
39+
> *:not(.text) {
40+
max-inline-size: $max-inline-size;
41+
}
3642
}
3743

3844
.statusBar {

apps/beeai-ui/src/modules/runs/hands-off/HandsOffOutputView.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ export function HandsOffOutputView() {
1919
const { agent, input, isPending, cancel, clear } = useAgentRun();
2020
const { messages } = useMessages();
2121
const message = messages.find(isAgentMessage);
22+
const hasOutput = Boolean(message?.content);
2223

2324
return (
2425
<div className={classes.root}>
25-
<Container size="md" className={classes.holder}>
26+
<Container size={hasOutput ? 'md' : 'sm'} className={classes.holder}>
2627
<header className={classes.header}>
2728
<p className={classes.input}>{input}</p>
2829

@@ -34,9 +35,9 @@ export function HandsOffOutputView() {
3435

3536
{message && (
3637
<>
37-
<HandsOffText message={message} />
38+
<HandsOffText message={message} className={classes.text} />
3839

39-
<MessageTrajectories message={message} />
40+
<MessageTrajectories message={message} toggleable={hasOutput} autoScroll={!hasOutput} />
4041
</>
4142
)}
4243

apps/beeai-ui/src/modules/runs/hands-off/HandsOffText.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ import { MessageSources } from '../sources/components/MessageSources';
1313

1414
interface Props {
1515
message: AgentMessage;
16+
className?: string;
1617
}
1718

18-
export function HandsOffText({ message }: Props) {
19+
export function HandsOffText({ message, className }: Props) {
1920
const { agent, isPending } = useAgentRun();
2021
const output = message.content;
2122
const { ref: autoScrollRef } = useAutoScroll([output]);
2223
const sources = message.sources ?? [];
2324

2425
return output ? (
25-
<div>
26+
<div className={className}>
2627
<AgentOutputBox sources={sources} text={output} isPending={isPending} downloadFileName={`${agent.name}-output`}>
2728
<MessageFiles message={message} />
2829

apps/beeai-ui/src/modules/runs/trajectory/components/MessageTrajectories.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ import { TrajectoryView } from './TrajectoryView';
99

1010
interface Props {
1111
message: AgentMessage;
12+
toggleable?: boolean;
13+
autoScroll?: boolean;
1214
}
1315

14-
export function MessageTrajectories({ message }: Props) {
16+
export function MessageTrajectories({ message, toggleable = true, autoScroll }: Props) {
1517
const trajectories = message.trajectories ?? [];
1618
const hasTrajectories = trajectories.length > 0;
1719

18-
return hasTrajectories ? <TrajectoryView trajectories={trajectories} /> : null;
20+
return hasTrajectories ? (
21+
<TrajectoryView trajectories={trajectories} toggleable={toggleable} autoScroll={autoScroll} />
22+
) : null;
1923
}

0 commit comments

Comments
 (0)