@neo4j-ndl/react
Version:
React implementation of Neo4j Design System
188 lines (161 loc) • 5.38 kB
Markdown
Import: `import { UserBubbleComponent } from '@neo4j-ndl/react/ai'`
| Prop | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `avatarProps` | `PolymorphicCommonProps<ElementType<any, keyof IntrinsicElements>, AvatarProps>` | | | The props for the avatar |
| `children` | `ReactNode` | | | The content of the user bubble |
| `ref` | `Ref<HTMLDivElement>` | | | A ref to apply to the root element. |
| `trailingElement` | `ReactNode` | | | The element to display after the content. Could be a CleanIconButton to edit the user bubble. |
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { UserBubble } from '@neo4j-ndl/react/ai';
const Component = () => {
return (
<UserBubble
avatarProps={{
name: 'KM',
source:
'https://media.istockphoto.com/id/1334716681/photo/a-smiling-man.jpg?s=612x612&w=0&k=20&c=U6rkSDpQMzkcJEqx2hAa63fNLIhqnZb31Xuc_QSi648=',
type: 'image',
}}
>
Can you analyse my data and tell me about...?
</UserBubble>
);
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { CleanIconButton } from '@neo4j-ndl/react';
import { UserBubble } from '@neo4j-ndl/react/ai';
import { PencilSquareIconOutline } from '@neo4j-ndl/react/icons';
const Component = () => {
return (
<UserBubble
avatarProps={{
name: 'KM',
type: 'letters',
}}
trailingElement={
<CleanIconButton description="Edit" size="large">
<PencilSquareIconOutline />
</CleanIconButton>
}
>
Can you analyse my data and tell me about...?
</UserBubble>
);
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Menu } from '@neo4j-ndl/react';
import { FileTag, ImageTag, MoreFiles, UserBubble } from '@neo4j-ndl/react/ai';
import {
DocumentIconOutline,
PhotoIconOutline,
TableCellsIconOutline,
} from '@neo4j-ndl/react/icons';
import { useRef, useState } from 'react';
const Component = () => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const anchorRef = useRef<HTMLButtonElement | null>(null);
return (
<div className="n-flex n-flex-coln-gap-token-64 n-w-full n-justify-end">
<div className="n-flex n-flex-col n-gap-token-8 n-items-end">
<MoreFiles
count={3}
isActive={isMenuOpen}
onClick={() => setIsMenuOpen(!isMenuOpen)}
ref={anchorRef}
/>
<Menu
isOpen={isMenuOpen}
anchorRef={anchorRef}
onClose={() => setIsMenuOpen(false)}
>
<Menu.Item
leadingVisual={<DocumentIconOutline />}
title="Gardening tips"
description="PDF"
onClick={() => alert('Gardening tips')}
/>
<Menu.Item
leadingVisual={<TableCellsIconOutline />}
title="TvSeries"
description="CSV"
onClick={() => alert('TvSeries')}
/>
<Menu.Item
leadingVisual={<PhotoIconOutline />}
title="Family photo"
description="JPG"
onClick={() => alert('Family photo')}
/>
</Menu>
<ImageTag
src="https://plus.unsplash.com/premium_photo-1676496046182-356a6a0ed002?q=80&w=2952&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
alt="Landscape image"
fileName="Landscape image"
fileType="jpg"
/>
<FileTag
icon={<TableCellsIconOutline />}
fileName="MoviesDecade"
fileType="csv"
/>
<FileTag
icon={<DocumentIconOutline />}
fileName="Science Fiction Bestsellers"
fileType="pdf"
/>
<UserBubble
avatarProps={{
name: 'KM',
source:
'https://media.istockphoto.com/id/1334716681/photo/a-smiling-man.jpg?s=612x612&w=0&k=20&c=U6rkSDpQMzkcJEqx2hAa63fNLIhqnZb31Xuc_QSi648=',
type: 'image',
}}
>
Can you analyse my data and tell me about...?
</UserBubble>
</div>
</div>
);
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { UserBubble } from '@neo4j-ndl/react/ai';
const Component = () => {
return (
<UserBubble
avatarProps={{
name: 'KM',
type: 'letters',
}}
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in rutrum
massa, ut congue nisi. Curabitur pulvinar odio id eros ornare dictum.
Aliquam faucibus dui ligula, ac gravida enim mattis at. Proin pretium
massa a risus eleifend consectetur. Fusce auctor maximus tellus sed
lobortis. Nulla congue leo posuere ante accumsan, vel maximus justo
cursus. Sed cursus varius ante at scelerisque. Fusce non venenatis diam.
Nam sed dolor ultricies, varius sem sed, vulputate felis. Ut facilisis
efficitur sem, et laoreet neque. Fusce congue vulputate magna. Mauris
euismod egestas imperdiet. Sed mollis venenatis nunc eget laoreet.
</UserBubble>
);
};
export default Component;
```