Skip to content
Merged
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
45120ed
refactor(MessageFeed): convert to CompoundComponent and temp remove a…
shaneeza Jan 27, 2026
1277ed5
Merge branch 's/initial-message-integration' of github.com:mongodb/le…
shaneeza Jan 27, 2026
defdad3
refactor(MessageFeed): enhance component structure
shaneeza Jan 27, 2026
958d58a
feat(MessageFeed): add MessageFeedContext
shaneeza Jan 27, 2026
c701f84
docs(MessageFeed): add changeset
shaneeza Jan 27, 2026
a6d7616
fix(MessageFeed): update error message for context provider
shaneeza Jan 27, 2026
e427185
refactor(Message): undo message changes
shaneeza Jan 27, 2026
0d9295d
chore(MessageFeed): add compound-component dependency
shaneeza Jan 27, 2026
eb31dd4
chore(pnpm-lock): add compound-component to dependencies
shaneeza Jan 27, 2026
fbb16db
chore(MessageFeed): update dependencies for compound-component integr…
shaneeza Jan 27, 2026
478ee3c
refactor(MessageFeed): move shared types
shaneeza Jan 27, 2026
43fc610
Merge branch 'LG-5932-message-feed-compound' of github.com:mongodb/le…
shaneeza Jan 27, 2026
8b67331
refactor(InitialMessage): update import path for shared types and use…
shaneeza Jan 27, 2026
8926ff5
feat(InitialMessage): integrate MessageFeedContext to manage initial …
shaneeza Jan 28, 2026
bd83d5f
chore(changeset): update dependency version for @lg-chat/message-feed
shaneeza Jan 28, 2026
6441471
fix(tsconfig): add missing newline at end of file
shaneeza Jan 28, 2026
9e0a42e
fix(MessageFeedContext): handle error boundary for React 17 in contex…
shaneeza Jan 28, 2026
bebc9bf
Merge branch 'LG-5932-message-feed-compound' of github.com:mongodb/le…
shaneeza Jan 28, 2026
7dcc812
feat(InitialMessage): implement styles and update component structure…
shaneeza Jan 28, 2026
3516dd6
feat(InitialMessage): enhance initial message component with structur…
shaneeza Jan 28, 2026
87414ee
refactor(InitialMessage): replace hardcoded title and description wit…
shaneeza Jan 28, 2026
7caaef2
feat(ChatWindow): add initial message prompts and enhance message han…
shaneeza Jan 28, 2026
e41b22b
refactor(ChatWindow): remove enableHideOnSelect prop from Suggested P…
shaneeza Jan 28, 2026
5f6e619
test(InitialMessage): add unit tests for accessibility, rendering, an…
shaneeza Jan 28, 2026
1d87c3b
merge conflict
shaneeza Jan 29, 2026
1ef0ae9
test(MessageFeed): enhance tests with scrollTo mock and update query …
shaneeza Jan 29, 2026
d4adca5
refactor(InitialMessage): simplify getWrapperStyles function and remo…
shaneeza Jan 29, 2026
52846e0
chore(MessageFeed): update dependencies and tsconfig to include new L…
shaneeza Jan 29, 2026
eb70b3f
refactor(ChatWindow): rename initial message component and update pro…
shaneeza Jan 29, 2026
a33deba
chore(MessageFeed): remove unused @leafygreen-ui/hooks dependency fro…
shaneeza Jan 29, 2026
d7f10d4
refactor(MessageFeed): remove commented-out MyMessage component from …
shaneeza Jan 29, 2026
298ffc1
chore(MessageFeed): update changeset
shaneeza Jan 29, 2026
4d14756
refactor(MessageFeed): integrate MessagePrompts and MessagePrompt com…
shaneeza Jan 29, 2026
770c81f
refactor(InitialMessage): update styles for title and description com…
shaneeza Jan 29, 2026
5e005d2
refactor(InitialMessage): adjust inner wrapper styles with focus ring…
shaneeza Jan 29, 2026
010b86f
Merge branch 'LG-5935-initial-message' of github.com:mongodb/leafygre…
shaneeza Jan 29, 2026
16b306b
test(InitialMessage, MessagePrompt, MessagePrompts): enhance tests fo…
shaneeza Jan 29, 2026
c61fd68
refactor(InitialMessage): rename component and add message prompts fo…
shaneeza Jan 29, 2026
853e636
chore(pnpm-lock): add '@lg-chat/message-prompts' dependency and clean…
shaneeza Jan 29, 2026
20fd21d
test(InitialMessage, MessagePrompts): improve error handling tests fo…
shaneeza Jan 29, 2026
294f879
chore(changeset): update to include new components
shaneeza Jan 29, 2026
9a80426
test(InitialMessage): fix JSX syntax in type validation tests for pro…
shaneeza Jan 29, 2026
4250267
test(MessageFeed): add tests for rendering MessagePrompts and its chi…
shaneeza Jan 29, 2026
832aed9
feat(MessageFeed): add ResourceLists and ResourceList properties to M…
shaneeza Jan 29, 2026
6276977
feat(MessageFeed): add InitialMessageWithResourceList story and updat…
shaneeza Jan 30, 2026
bce10f3
refactor(InitialMessage): restructure inner wrapper and remove descri…
shaneeza Jan 30, 2026
41ce6d9
Merge branch 'LG-5935-initial-message' of github.com:mongodb/leafygre…
shaneeza Jan 30, 2026
a21c57f
Merge branch 'LG-5933-message-prompt-subcomponent' of github.com:mong…
shaneeza Jan 30, 2026
9cf4178
refactor(ResourceListItem): update styles to use theme-based icon col…
shaneeza Jan 30, 2026
c075973
refactor(InitialMessage): integrate LeafyGreenProvider for dark mode …
shaneeza Jan 30, 2026
9d657aa
merge conflict
shaneeza Jan 30, 2026
a8f8029
test(InitialMessage, MessageFeed): update tests to ensure proper rend…
shaneeza Jan 30, 2026
4744bdc
refactor(InitialMessage): remove LeafyGreenProvider and simplify comp…
shaneeza Jan 30, 2026
9a145bc
refactor(InitialMessage): remove LeafyGreenProvider and streamline co…
shaneeza Jan 30, 2026
499fc40
feat(InitialMessage): add generated story for initialMessage
shaneeza Jan 30, 2026
75a2d91
merge conflict
shaneeza Jan 30, 2026
ae55764
feat(InitialMessage): enhance story with interactive MessagePrompts a…
shaneeza Jan 30, 2026
6271cc1
Merge branch 'LG-5933-message-prompt-subcomponent' of github.com:mong…
shaneeza Jan 30, 2026
98a80a0
chore(ALL_PACKAGES): revert ALL_PACKAGES
shaneeza Jan 30, 2026
11df000
Merge branch 'LG-5933-message-prompt-subcomponent' of github.com:mong…
shaneeza Jan 30, 2026
ad25ee1
fix(InitialMessage): remove unused darkMode prop from story and inclu…
shaneeza Jan 30, 2026
7568f39
feat(ResourceList): integrate LeafyGreenProvider for dark mode suppor…
shaneeza Jan 30, 2026
c2168bd
feat(InitialMessage): add additional resource list items and update s…
shaneeza Jan 30, 2026
81a414d
fix(ResourceListItem): update prop documentation for glyph and childr…
shaneeza Jan 30, 2026
8b702da
docs(MessageFeed): update changeset
shaneeza Jan 30, 2026
338cbec
refactor(InitialMessage): update AssistantAvatar size and adjust prop…
shaneeza Jan 30, 2026
9db8c4d
fix(InitialMessage): export InitialMessageProps type for better type …
shaneeza Jan 30, 2026
748ef93
refactor(InitialMessage): Components to components
shaneeza Jan 30, 2026
da60688
refactor(InitialMessage): update import paths from Components to comp…
shaneeza Jan 30, 2026
730e077
feat(InitialMessage): add interactive story for message addition with…
shaneeza Feb 2, 2026
308b6b5
fix(InitialMessage): add visibility property to transition styles for…
shaneeza Feb 2, 2026
9572937
feat(MessageFeed): enhance InitialMessage stories with new message ha…
shaneeza Feb 2, 2026
e8c475c
feat(InitialMessage): rename Components to components
shaneeza Feb 2, 2026
983cd0c
fix(InitialMessage): update import paths from Components to component…
shaneeza Feb 2, 2026
cfaee9f
merge conflict
shaneeza Feb 2, 2026
3ee02ba
refactor(InitialMessage): replace MessageFeedSubcomponentProperty wit…
shaneeza Feb 2, 2026
b43ec06
feat(MessagePromptsItem): add MessagePromptsItem component with assoc…
shaneeza Feb 2, 2026
b7fecc6
refactor(MessagePrompts): rename MessagePrompt to MessagePromptsItem …
shaneeza Feb 2, 2026
e973728
feat(InitialMessage): implement InitialMessage component with accessi…
shaneeza Feb 2, 2026
e4d522f
fix(MessageFeed): correct import paths for InitialMessage component
shaneeza Feb 2, 2026
a149ead
merge conflict
shaneeza Feb 2, 2026
cf3f1b3
feat(ResourceListItem): export ResourceListItemProps type for improve…
shaneeza Feb 2, 2026
07e9346
test(InitialMessage): add tests for ResourceList subcomponent and upd…
shaneeza Feb 2, 2026
cfe55a0
wip
shaneeza Feb 2, 2026
f12788e
docs(README): enhance documentation for MessageFeed and InitialMessag…
shaneeza Feb 2, 2026
2ec8be4
fix(README): correct syntax errors in useState initialization and upd…
shaneeza Feb 3, 2026
d508f6c
merge conflict
shaneeza Feb 3, 2026
f60b848
Merge branch 's/initial-message-integration' of github.com:mongodb/le…
shaneeza Feb 3, 2026
71c8b37
docs(MessageFeed): update README primary example
shaneeza Feb 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions chat/message-feed/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,100 @@ import { Message } from '@lg-chat/message';

return (
<MessageFeed darkMode={darkMode} {...rest}>
<MessageFeed.InitialMessage>
<MessageFeed.InitialMessage.MessagePrompts
onClickRefresh={() => {}}
label="Suggested Prompts"
>
<MessageFeed.InitialMessage.MessagePromptsItem onClick={() => {}}>
What is MongoDB?
</MessageFeed.InitialMessage.MessagePromptsItem>
<MessageFeed.InitialMessage.MessagePromptsItem onClick={() => {}}>
How do I query MongoDB?
</MessageFeed.InitialMessage.MessagePromptsItem>
<MessageFeed.InitialMessage.MessagePromptsItem onClick={() => {}}>
What is MongoDB&apos;s astrology sign?
</MessageFeed.InitialMessage.MessagePromptsItem>
</MessageFeed.InitialMessage.MessagePrompts>
</MessageFeed.InitialMessage>
{messages.map(({ id, messageBody, userName }) => (
<Message key={id} isSender={!!userName} messageBody={messageBody} />
))}
</MessageFeed>
);
```

### Compound Components
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we replace the existing example entirely now that this is the recommended way to use this component?


The `MessageFeed` component uses a compound component pattern. `MessageFeed.InitialMessage` is the initial message component, which also uses a compound pattern for its subcomponents: `MessageFeed.InitialMessage.MessagePrompts`, `MessageFeed.InitialMessage.MessagePromptsItem`, `MessageFeed.InitialMessage.ResourceList`, and `MessageFeed.InitialMessage.ResourceListItem`.

`MessageFeed.InitialMessage` does not need to be conditionally rendered. It only displays when there are no other children. As soon as other children are rendered, `MessageFeed.InitialMessage` animates off the page and only the children remain.

Additionally, `MessageFeed.InitialMessage` only renders its subcomponents. All other children will be ignored.

#### MessageFeed.InitialMessage.MessagePrompts and MessageFeed.InitialMessage.MessagePromptsItem

```tsx
import React from `react`
import { Message } from `@lg-chat/message`;
import { MessageFeed } from `@lg-chat/message-feed`;

const [messages, setMessages] = useState([]);

...

return (
<MessageFeed>
<MessageFeed.InitialMessage>
<MessageFeed.InitialMessage.MessagePrompts
onClickRefresh={() => {}}
label="Suggested Prompts"
>
<MessageFeed.InitialMessage.MessagePromptsItem onClick={() => {}}>
What is MongoDB?
</MessageFeed.InitialMessage.MessagePromptsItem>
<MessageFeed.InitialMessage.MessagePromptsItem onClick={() => {}}>
How do I query MongoDB?
</MessageFeed.InitialMessage.MessagePromptsItem>
<MessageFeed.InitialMessage.MessagePromptsItem onClick={() => {}}>
What is MongoDB&apos;s astrology sign?
</MessageFeed.InitialMessage.MessagePromptsItem>
</MessageFeed.InitialMessage.MessagePrompts>
</MessageFeed.InitialMessage>
{messages.map(({ id, messageBody, userName }) => (
<Message key={id} isSender={!!userName} messageBody={messageBody} />
))}
</MessageFeed>
);
```

#### MessageFeed.InitialMessage.ResourceList and MessageFeed.InitialMessage.ResourceListItem

```tsx
import React from `react`
import { Message } from `@lg-chat/message`;
import { MessageFeed } from `@lg-chat/message-feed`;

const [messages, setMessages] = useState([]);

...

return (
<MessageFeed>
<MessageFeed.InitialMessage>
<MessageFeed.InitialMessage.ResourceList>
<MessageFeed.InitialMessage.ResourceListItem glyph="QuestionMarkWithCircle">
Ask me technical questions
</MessageFeed.InitialMessage.ResourceListItem>
<MessageFeed.InitialMessage.ResourceListItem glyph="Bulb">
Learn best practices
</MessageFeed.InitialMessage.ResourceListItem>
<MessageFeed.InitialMessage.ResourceListItem glyph="InfoWithCircle">
Note: I won’t have access to any of your data unless you provide
it
</MessageFeed.InitialMessage.ResourceListItem>
</MessageFeed.InitialMessage.ResourceList>
</MessageFeed.InitialMessage>
{messages.map(({ id, messageBody, userName }) => (
<Message key={id} isSender={!!userName} messageBody={messageBody} />
))}
Expand All @@ -37,7 +131,36 @@ return (

## Properties

### MessageFeed

| Prop | Type | Description | Default |
| ---------- | ------------------------- | ------------------------------------------------------ | ------- |
| `darkMode` | `boolean` | Determines if the component should render in dark mode | `false` |
| `...` | `HTMLElementProps<'div'>` | Props spread on root element | |

### MessageFeed.InitialMessage

`MessageFeed.InitialMessage` is a wrapper around [Message](https://github.com/mongodb/leafygreen-ui/tree/main/chat/message#readme) from `@lg-chat/message` and accepts the same props except for `messageBody`, `isSender`, `sourceType`, and `markdownProps`.

### MessageFeed.InitialMessage.MessagePrompts

`MessageFeed.InitialMessage.MessagePrompts` is a wrapper around [MessagePrompts](https://github.com/mongodb/leafygreen-ui/blob/main/chat/message-prompts/README.md#messageprompts-properties) from `@lg-chat/message-prompts` and accepts the same props except for `enableHideOnSelect`.

### MessageFeed.InitialMessage.MessagePromptsItem

`MessageFeed.InitialMessage.MessagePromptsItem` is a wrapper around [MessagePrompt](https://github.com/mongodb/leafygreen-ui/blob/main/chat/message-prompts/README.md#messageprompt-properties) from `@lg-chat/message-prompts` and accepts the same props.

### MessageFeed.InitialMessage.ResourceList

| Prop | Type | Description | Default |
| ---------- | ------------------------ | ------------------------------------------------------ | ------- |
| `darkMode` | `boolean` | Determines if the component should render in dark mode | `false` |
| `...` | `HTMLElementProps<'ul'>` | Props spread on root element | |

### MessageFeed.InitialMessage.ResourceListItem

| Prop | Type | Description | Default |
| ---------- | ------------------------ | --------------------------------------------------------- | ------- |
| `glyph` | `GlyphName` | The LeafyGreen icon glyph name to render in the list item | |
| `children` | `React.ReactNode` | The text that will appear in the list item | |
| `...` | `HTMLElementProps<'li'>` | Props spread on root element | |
Loading