diff --git a/package-lock.json b/package-lock.json
index f95fd49a7..280cd0a95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -114,6 +114,7 @@
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.3",
@@ -3132,6 +3133,7 @@
"version": "29.7.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -3779,6 +3781,7 @@
"resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz",
"integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@monaco-editor/loader": "^1.5.0"
},
@@ -3832,6 +3835,7 @@
"version": "3.6.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@octokit/auth-token": "^2.4.4",
"@octokit/graphql": "^4.5.8",
@@ -4216,7 +4220,8 @@
"resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-6.4.0.tgz",
"integrity": "sha512-4drFhg74sEc/fftark5wZevODIog17qR4pwLCdB3j5iK3Uu5oMA2SdLhsEeEQggalfnFzve/Km87MdVR0ghhvQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@patternfly/patternfly-a11y": {
"version": "5.1.0",
@@ -4296,6 +4301,7 @@
"resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-6.4.0.tgz",
"integrity": "sha512-zMgJmcFohp2FqgAoZHg7EXZS7gnaFESquk0qIavemYI0FsqspVlzV2/PUru7w+86+jXfqebRhgubPRsv1eJwEg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@patternfly/react-icons": "^6.4.0",
"@patternfly/react-styles": "^6.4.0",
@@ -4330,6 +4336,7 @@
"resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-6.4.0.tgz",
"integrity": "sha512-yv0sFOLGts8a2q9C1xUegjp50ayYyVRe0wKjMf+aMSNIK8sVYu8qu0yfBsCDybsUCldue7+qsYKRLFZosTllWQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@patternfly/react-core": "^6.4.0",
"@patternfly/react-icons": "^6.4.0",
@@ -4579,6 +4586,7 @@
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@swc/counter": "^0.1.1",
"@swc/types": "^0.1.5"
@@ -5143,6 +5151,7 @@
"version": "29.5.12",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"expect": "^29.0.0",
"pretty-format": "^29.0.0"
@@ -5257,6 +5266,7 @@
"node_modules/@types/react": {
"version": "18.2.61",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -5434,6 +5444,7 @@
"version": "5.62.0",
"dev": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "5.62.0",
"@typescript-eslint/types": "5.62.0",
@@ -5885,6 +5896,7 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -6006,6 +6018,7 @@
"version": "6.12.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -7214,6 +7227,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001735",
"electron-to-chromium": "^1.5.204",
@@ -10045,7 +10059,8 @@
"node_modules/devtools-protocol": {
"version": "0.0.1367902",
"dev": true,
- "license": "BSD-3-Clause"
+ "license": "BSD-3-Clause",
+ "peer": true
},
"node_modules/diff-sequences": {
"version": "29.6.3",
@@ -10129,8 +10144,7 @@
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz",
"integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==",
- "license": "(MPL-2.0 OR Apache-2.0)",
- "peer": true
+ "license": "(MPL-2.0 OR Apache-2.0)"
},
"node_modules/dot-case": {
"version": "3.0.4",
@@ -10284,6 +10298,7 @@
"version": "0.1.13",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"iconv-lite": "^0.6.2"
}
@@ -10325,6 +10340,7 @@
"version": "2.4.1",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-colors": "^4.1.1",
"strip-ansi": "^6.0.1"
@@ -10635,6 +10651,7 @@
"version": "8.57.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
@@ -10689,6 +10706,7 @@
"version": "9.1.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -10824,6 +10842,7 @@
"version": "2.29.1",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"array-includes": "^3.1.7",
"array.prototype.findlastindex": "^1.2.3",
@@ -11013,6 +11032,7 @@
"version": "15.7.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"builtins": "^5.0.1",
"eslint-plugin-es": "^4.1.0",
@@ -11096,6 +11116,7 @@
"version": "6.1.1",
"dev": true,
"license": "ISC",
+ "peer": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -14699,6 +14720,7 @@
"version": "29.7.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -18783,7 +18805,6 @@
"resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz",
"integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==",
"license": "MIT",
- "peer": true,
"bin": {
"marked": "bin/marked.js"
},
@@ -20108,6 +20129,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.8",
"picocolors": "^1.1.1",
@@ -20227,6 +20249,7 @@
"version": "3.2.5",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -20659,22 +20682,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/puppeteer/node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
"node_modules/pure-rand": {
"version": "6.0.4",
"dev": true,
@@ -20804,6 +20811,7 @@
"node_modules/react": {
"version": "18.2.0",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -20840,6 +20848,7 @@
"node_modules/react-dom": {
"version": "18.2.0",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.0"
@@ -21670,6 +21679,7 @@
"version": "7.10.5",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.10.5",
@@ -22443,6 +22453,7 @@
"version": "1.72.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -22539,6 +22550,7 @@
"version": "8.12.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -24363,6 +24375,7 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -24653,7 +24666,8 @@
},
"node_modules/tslib": {
"version": "2.8.1",
- "license": "0BSD"
+ "license": "0BSD",
+ "peer": true
},
"node_modules/tsutils": {
"version": "3.21.0",
@@ -24860,6 +24874,7 @@
"version": "4.7.4",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -25652,6 +25667,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6",
@@ -25684,6 +25700,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.21",
"react-fast-compare": "^3.2.0",
@@ -25700,6 +25717,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-brush-container": "37.3.6",
@@ -25720,6 +25738,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6"
@@ -25735,6 +25754,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"react-fast-compare": "^3.2.0",
@@ -25752,6 +25772,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6"
@@ -25767,6 +25788,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6",
@@ -25783,6 +25805,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6",
@@ -25799,6 +25822,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6"
@@ -25846,6 +25870,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"react-fast-compare": "^3.2.0",
@@ -25863,6 +25888,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"lodash": "^4.17.19",
"victory-core": "37.3.6"
@@ -25899,6 +25925,7 @@
"version": "37.3.6",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"delaunay-find": "0.0.6",
"lodash": "^4.17.19",
@@ -26034,6 +26061,7 @@
"integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.12.1",
@@ -26151,6 +26179,7 @@
"version": "5.0.1",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^2.0.1",
diff --git a/packages/module/patternfly-docs/content/extensions/chatbot/chatbot.md b/packages/module/patternfly-docs/content/extensions/chatbot/chatbot.md
index a7e17ecea..d20936f88 100644
--- a/packages/module/patternfly-docs/content/extensions/chatbot/chatbot.md
+++ b/packages/module/patternfly-docs/content/extensions/chatbot/chatbot.md
@@ -40,7 +40,7 @@ Explore our documentation, which covers both the components you'll need to build
- [Toggle](/extensions/chatbot/ui#toggle)
- [Header](/extensions/chatbot/ui#header)
- [Footer](/extensions/chatbot/ui#footer)
- - [Navigation](/extensions/chatbot/ui#navigation)
+ - [Chat history drawer](/extensions/chatbot/ui#chat-history)
- [Modals](/extensions/chatbot/ui#modals)
- Messages: Components that customize features related to the conversation
- [Bot and user messages](/extensions/chatbot/messages)
diff --git a/packages/module/patternfly-docs/content/extensions/chatbot/design-guidelines.md b/packages/module/patternfly-docs/content/extensions/chatbot/design-guidelines.md
index b8ce6213e..d22659432 100644
--- a/packages/module/patternfly-docs/content/extensions/chatbot/design-guidelines.md
+++ b/packages/module/patternfly-docs/content/extensions/chatbot/design-guidelines.md
@@ -15,8 +15,8 @@ import "./images.css"
1. **Container:** The window that contains the entire ChatBot experience and all of its components.
-1. **Header:** A persistent region at the top of the ChatBot window that contains navigation, branding, and actions.
-1. **Chat history menu:** A menu that contains a history of previous chats.
+1. **Header:** A persistent region at the top of the ChatBot window that contains chat history, branding, and actions.
+1. **Chat history drawer:** A menu used to access previous chats.
1. **Options menu:** A menu that contains settings that are relevant to your product. This typically includes display options (more details in the [ChatBot variations section](#variations)) and other general settings (more details in the [ChatBot settings and preferences section](#chatbot-settings-and-preferences)).
1. **Messages:** Elements of the conversation between a ChatBot and user. More details can be found in the [message guidelines](#messages).
1. **Attachments:** Details about files that a user has uploaded to the ChatBot.
@@ -288,7 +288,7 @@ When a ChatBot is launched via an AI-supported action, the action should be sent
Each time a user begins a new chat, display a [welcome message](#welcome-message), with prompts that provide initial suggestions and indicate the actions that the ChatBot can take.
-The default approach for users to create a new chat is by clicking the "New chat" button (which contains a "pen to square" icon) placed at the top of the [chat history menu](#using-the-chat-history-menu).
+The default approach for users to create a new chat is by clicking the "New chat" button (which contains a "pen to square" icon) placed at the top of the [chat history drawer](#using-the-chat-history-drawer).

@@ -310,14 +310,12 @@ This can be done using the [quick response](/extensions/chatbot/messages#message

-### Using the chat history menu
+### Using the chat history drawer
-The ChatBot history menu contains a log of a user's previous chats. Clicking the menu icon opens a side drawer in the ChatBot window.
-
-By clicking into the history menu, users can search through previous conversations and perform additional actions, such as sharing a conversation with others.
+The chat history drawer can be opened via the hamburger menu in the ChatBot header. In this drawer, users can search through previous conversations and perform additional actions, such as sharing a conversation with others.
-
+
When the chat history is still loading, display skeleton items:
@@ -383,16 +381,16 @@ If a message attachment fails, an error message should share the reason for fail
You can enable users to download chat transcripts, for their personal records or to share with others. When users choose to download a transcript, you can choose how you want to configure the behavior in your ChatBot.
-For guidance, refer to our download transcripts demo, which opens a Markdown file for a conversation within a new tab.
+For guidance, refer to our [chat transcripts demo](/extensions/chatbot/overview/demo#chat-transcripts), which opens a Markdown file for a conversation within a new tab.
Choose the download action location that best works for your ChatBot:
#### Download via chat history drawer
-If your ChatBot uses a chat history drawer, you can provide a download option in the [actions menu linked to a previous conversation](/extensions/chatbot/ui#drawer-with-conversation-actions).
+If your ChatBot uses chat history, you can provide a download option in the [actions menu linked to a previous conversation](/extensions/chatbot/ui#drawer-with-conversation-actions).
-
+
#### Download message response action
@@ -405,7 +403,7 @@ To allow users to download individual bot messages, the message actions can incl
#### Download control in header
-If you don't use a chat history drawer, you can place an option to download the transcript for the active chat within the header options menu.
+If you don't use chat history, you can place an option to download the transcript for the active chat within the header options menu.

diff --git a/packages/module/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx b/packages/module/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx
index 1d44899ac..8c9c866da 100644
--- a/packages/module/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx
+++ b/packages/module/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderBasic.tsx
@@ -80,7 +80,7 @@ export const BasicDemo: FunctionComponent = () => {
showAll && setShowAll(!showAll);
}}
name="basic-inline-radio"
- label="With menu"
+ label="With chat history drawer"
id="menu"
/>
` has 2 sections:
-- `` contains the title and an optional menu toggle or new chat button:
+- `` contains the title and an optional hamburger menu toggle or new chat button:
- `` handles the layout and display of a title or image at different responsive sizes.
- - `` (optional) is placed on the left side of the header and used to toggle a chat history menu.
+ - `` (optional) is placed on the left side of the header and used to toggle a chat history drawer.
- `` (optional) is placed on the left side of the header and used to initiate a new chat.
- `` contains any additional controls:
- The `` component is a standard PatternFly dropdown that matches the ChatBot styles.
@@ -227,8 +227,8 @@ There are a variety of options and customizations you can make to the header, to
In this example, select the respective checkbox to toggle these features:
-- **Menu:** Users can select the menu toggle to open a menu of additional options or actions.
-- **New chat button:** Used to start a new chat session. The header button can be used in addition to or in place of a new chat button within the [conversation history drawer](/extensions/chatbot/ui/#drawer-with-search-and-new-chat-button).
+- **Chat history drawer:** Users can select the hamburger menu toggle to open the [chat history drawer](#chat-history).
+- **New chat button:** Used to start a new chat session. The header button can be used in addition to or in place of a new chat button within the [chat history drawer](/extensions/chatbot/ui/#drawer-with-search-and-new-chat-button).
- **Left-aligned logo**
- **Centered logo**
- **Selector dropdown:** Users can choose from preselected options in a dropdown menu. For example, they can toggle between AI models.
@@ -339,11 +339,11 @@ This example shows a simplified method of handling the "thinking" animation: aft
```
-## Navigation
+## Chat history
-### Side nav in a drawer
+### Chat history drawer
-The ChatBot conversation history is contained in an interactive drawer, where users can interact with previous conversations or start a new conversation.
+A user's chat history is contained in an interactive drawer, where they can interact with previous conversations or start a new conversation.
The `` component is a wrapper placed within ``, which contains all other ChatBot components in `drawerContent`. There is a focus trap so users can only tab within the drawer while it is open.
@@ -367,14 +367,14 @@ The code structure will look like this:
```
-The conversation history drawer looks different depending on the `displayMode` of the parent ``. (As shown in the [main ChatBot demo](/extensions/chatbot/overview/demo#basic-chatbot).):
+The chat history drawer looks different depending on the `displayMode` of the parent `` (as shown in the [main ChatBot demo](/extensions/chatbot/overview/demo#basic-chatbot).):
-- `Default` and `docked` display modes display the conversation history on top of the rest of the ChatBot content, with a PatternFly backdrop between the drawer panel and drawer content.
-- `Fullscreen` and `embedded` display modes display the conversation history in line with the drawer content.
+- `Default` and `docked` display modes display the chat history on top of the rest of the ChatBot content, with a PatternFly backdrop between the drawer panel and drawer content.
+- `Fullscreen` and `embedded` display modes display the chat history in line with the drawer content.
### Drawer with search and "new chat" button
-In the conversation history drawer, users can search previous ChatBot conversations via an input field. To customize the placeholder text, use `searchInputPlaceholder`. Provide an aria label via `searchInputAriaLabel`.
+In the chat history drawer, users can search previous ChatBot conversations via an input field. To customize the placeholder text, use `searchInputPlaceholder`. Provide an aria label via `searchInputAriaLabel`.
They can also start new conversations via a "New chat" button. To customize the button label, use `newChatButtonText`.
@@ -386,7 +386,7 @@ Both the search input field and "New chat" buttons are optional. The `reverseBut
### Drawer with search actions
-You can customize the search experience within the conversation history drawer via the `searchActionStart` and `searchActionEnd` props, which provide additional search controls before and after the input field. These props are useful for adding filtering, sorting, or other search-related functionality.
+You can customize the search experience within the chat history drawer via the `searchActionStart` and `searchActionEnd` props, which provide additional search controls before and after the input field. These props are useful for adding filtering, sorting, or other search-related functionality.
You can also add a visual divider between the drawer head and the title by setting `hasDrawerHeadDivider` to `true`.
@@ -404,15 +404,15 @@ Actions can be added to conversations with `menuItems`. Optionally, you can also
### Pinning conversations
-To help users track important conversations, add a "pin" option to the conversation action menus. This action moves a conversation to a dedicated "pinned" section at the top of the history drawer for quick access. Pinned items should contain an "unpin" option, so that users can remove pinned conversations as needed.
+To help users track important conversations, add a "pin" option to the conversation action menus. This action moves a conversation to a dedicated "pinned" section at the top of the chat history drawer for quick access. Pinned items should contain an "unpin" option, so that users can remove pinned conversations as needed.
```js file="./ChatbotHeaderDrawerWithPin.tsx"
```
-### Renaming conversations in history drawer
+### Renaming conversations in chat history drawer
-You can allow users to rename a conversation in the history drawer by implementing a modal that opens upon clicking a "Rename" (or similar) action. When doing so, you must ensure the following:
+You can allow users to rename a conversation in the chat history drawer by implementing a modal that opens upon clicking a "Rename" (or similar) action. When doing so, you must ensure the following:
- When the modal opens, focus is placed at the end of the text input.
- When the modal closes, focus goes back to the action toggle that was previously opened.
@@ -433,7 +433,7 @@ If you're showing a conversation that is already active, you can set the `active
### Resizable drawer
-By default, the conversation history drawer has a fixed width (384px) and a focus trap. To provide users with more flexibility as they navigate their conversation history, or to better support embedded ChatBots on tablet-sized devices or smaller browser windows, you can instead make the drawer resizable. By default, even resizable drawers will still open to their full width on mobile devices.
+By default, the chat history drawer has a fixed width (384px) and a focus trap. To provide users with more flexibility as they navigate their chat history, or to better support embedded ChatBots on tablet-sized devices or smaller browser windows, you can instead make the drawer resizable. By default, even resizable drawers will still open to their full width on mobile devices.
In this example, the drawer can be resized up to the max size of the parent and resized down to 200px wide. To customize this behavior further (including width, style, and focus behavior) use PatternFly [`` props](/components/drawer#props), [`` props](/components/drawer/#drawerpanelcontent), or any other drawer subcomponents.
diff --git a/packages/module/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md b/packages/module/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md
index 8814917f7..a47d413cf 100644
--- a/packages/module/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md
+++ b/packages/module/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md
@@ -95,7 +95,7 @@ This demo displays a basic ChatBot, which includes:
- Sending a message to the ChatBot.
- Receiving a response from a backend AI tool with a loading message state.
-6. A [``](/extensions/chatbot/ui#navigation) toggled open and closed by the ` in the ``.
+6. A [``](/extensions/chatbot/ui#chat-history) toggled open and closed by the ` in the ``.
7. A "Skip to chatbot" button that allows you to skip to the chatbot content via the [PatternFly skip to content component](/extensions/chatbot/ui#skip-to-content). To display this button you must tab into the main window.
@@ -126,7 +126,7 @@ This demo displays an embedded ChatBot. Embedded ChatBots are meant to be placed
- [Speech to text.](/extensions/chatbot/ui#message-bar-with-speech-recognition-and-file-attachment)
- Sending a message to the ChatBot.
- Receiving a response from a backend AI tool with a loading message state.
-6. A [``](/extensions/chatbot/ui#navigation) that can be toggled by the ` in the ``.
+6. A [``](/extensions/chatbot/ui#chat-history) that can be toggled by the ` in the ``.
```js file="./EmbeddedChatbot.tsx" isFullscreen
@@ -196,7 +196,7 @@ This demo illustrates how you could add downloadable transcripts to your ChatBot
A message transcript includes details from a single chat message. To download a sample message transcript in this demo, click the "Download" action under a bot message.
-A conversation transcript includes details from the entirety of a ChatBot conversation. To download a sample conversation transcript in this demo, open the chat history menu and click "Download" in the options menu for the conversation.
+A conversation transcript includes details from the entirety of a ChatBot conversation. To download a sample conversation transcript in this demo, open the chat history drawer and click "Download" in the options menu for the conversation.
In this example, file download is implemented with [file-saver](https://www.npmjs.com/package/file-saver).
diff --git a/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx b/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx
index 7bef8c63a..e030dcff3 100644
--- a/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx
+++ b/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx
@@ -307,7 +307,7 @@ describe('ChatbotConversationHistoryNav', () => {
isLoading
/>
);
- expect(screen.getByRole('dialog', { name: /Loading chatbot conversation history/i })).toBeTruthy();
+ expect(screen.getByRole('dialog', { name: /Loading chatbot chat history/i })).toBeTruthy();
expect(screen.getByRole('button', { name: /Close drawer panel/i })).toBeTruthy();
});
diff --git a/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx b/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx
index 8da852c9c..d1f2bd533 100644
--- a/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx
+++ b/packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx
@@ -84,7 +84,7 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
activeItemId?: string | number;
/** Callback function for when an item is selected */
onSelectActiveItem?: (event?: React.MouseEvent, itemId?: string | number) => void;
- /** Items shown in conversation history */
+ /** Items shown in chat history */
conversations: Conversation[] | { [key: string]: Conversation[] };
/** Additional button props for new chat button. */
newChatButtonProps?: ButtonProps;
diff --git a/packages/module/src/ChatbotConversationHistoryNav/LoadingState.tsx b/packages/module/src/ChatbotConversationHistoryNav/LoadingState.tsx
index c43149af1..f22c8714d 100644
--- a/packages/module/src/ChatbotConversationHistoryNav/LoadingState.tsx
+++ b/packages/module/src/ChatbotConversationHistoryNav/LoadingState.tsx
@@ -4,11 +4,7 @@ import type { FunctionComponent } from 'react';
export const LoadingState: FunctionComponent = ({ screenreaderText, ...rest }: SkeletonProps) => (
-
+
diff --git a/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx b/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx
index fbe3e11d9..2a9055963 100644
--- a/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx
+++ b/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.test.tsx
@@ -12,7 +12,7 @@ describe('ChatbotHeaderMenu', () => {
it('should call onMenuToggle when ChatbotHeaderMenu button is clicked', () => {
const onMenuToggle = jest.fn();
render();
- fireEvent.click(screen.getByRole('button', { name: 'Chat history menu' }));
+ fireEvent.click(screen.getByRole('button', { name: 'Chat history drawer' }));
expect(onMenuToggle).toHaveBeenCalled();
});
diff --git a/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.tsx b/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.tsx
index 3d54feaa5..c2eef3f9a 100644
--- a/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.tsx
+++ b/packages/module/src/ChatbotHeader/ChatbotHeaderMenu.tsx
@@ -25,9 +25,9 @@ const ChatbotHeaderMenuBase: FunctionComponent = ({
className,
onMenuToggle,
tooltipProps,
- menuAriaLabel = 'Chat history menu',
+ menuAriaLabel = 'Chat history drawer',
innerRef,
- tooltipContent = 'Chat history menu',
+ tooltipContent = 'Chat history drawer',
isCompact,
...props
}: ChatbotHeaderMenuProps) => {