11import React from 'react' ;
22import ChatbotToggle from '@patternfly/virtual-assistant/dist/dynamic/ChatbotToggle' ;
3- import Chatbot from '@patternfly/virtual-assistant/dist/dynamic/Chatbot' ;
3+ import Chatbot , { ChatbotDisplayMode } from '@patternfly/virtual-assistant/dist/dynamic/Chatbot' ;
44import ChatbotContent from '@patternfly/virtual-assistant/dist/dynamic/ChatbotContent' ;
55import ChatbotWelcomePrompt from '@patternfly/virtual-assistant/dist/dynamic/ChatbotWelcomePrompt' ;
66import ChatbotFooter , { ChatbotFootnote } from '@patternfly/virtual-assistant/dist/dynamic/ChatbotFooter' ;
77import MessageBar from '@patternfly/virtual-assistant/dist/dynamic/MessageBar' ;
88import MessageBox from '@patternfly/virtual-assistant/dist/dynamic/MessageBox' ;
99import Message , { MessageProps } from '@patternfly/virtual-assistant/dist/dynamic/Message' ;
1010import FileDropZone from '@patternfly/virtual-assistant/dist/dynamic/FileDropZone' ;
11- import { Alert , AlertActionCloseButton , DropEvent } from '@patternfly/react-core' ;
11+ import {
12+ Alert ,
13+ AlertActionCloseButton ,
14+ Brand ,
15+ Bullseye ,
16+ DropdownGroup ,
17+ DropdownItem ,
18+ DropdownList ,
19+ DropEvent
20+ } from '@patternfly/react-core' ;
1221import FileDetailsLabel from '@patternfly/virtual-assistant/dist/dynamic/FileDetailsLabel' ;
1322import PreviewAttachment from '@patternfly/virtual-assistant/dist/dynamic/PreviewAttachment' ;
1423import AttachmentEdit from '@patternfly/virtual-assistant/dist/dynamic/AttachmentEdit' ;
24+ import ChatbotHeader , {
25+ ChatbotHeaderMenu ,
26+ ChatbotHeaderTitle ,
27+ ChatbotHeaderActions ,
28+ ChatbotHeaderSelectorDropdown ,
29+ ChatbotHeaderOptionsDropdown
30+ } from '@patternfly/virtual-assistant/dist/dynamic/ChatbotHeader' ;
31+ import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon' ;
32+ import OpenDrawerRightIcon from '@patternfly/react-icons/dist/esm/icons/open-drawer-right-icon' ;
33+ import OutlinedWindowRestoreIcon from '@patternfly/react-icons/dist/esm/icons/outlined-window-restore-icon' ;
34+ import PFHorizontalLogoColor from '../ChatbotHeader/PF-HorizontalLogo-Color.svg' ;
35+ import PFHorizontalLogoReverse from '../ChatbotHeader/PF-HorizontalLogo-Reverse.svg' ;
1536
1637const footnoteProps = {
1738 label : 'Lightspeed uses AI. Check for mistakes.' ,
@@ -94,6 +115,23 @@ export const BasicDemo: React.FunctionComponent = () => {
94115 const [ isEditModalOpen , setIsEditModalOpen ] = React . useState < boolean > ( false ) ;
95116 const [ currentModalData , setCurrentModalData ] = React . useState < ModalData > ( ) ;
96117 const [ showAlert , setShowAlert ] = React . useState < boolean > ( false ) ;
118+ const [ selectedModel , setSelectedModel ] = React . useState ( 'Granite 7B' ) ;
119+ const [ displayMode , setDisplayMode ] = React . useState < ChatbotDisplayMode > ( ChatbotDisplayMode . default ) ;
120+
121+ const onSelectModel = (
122+ _event : React . MouseEvent < Element , MouseEvent > | undefined ,
123+ value : string | number | undefined
124+ ) => {
125+ setSelectedModel ( value as string ) ;
126+ } ;
127+
128+ const onSelectDisplayMode = (
129+ _event : React . MouseEvent < Element , MouseEvent > | undefined ,
130+ value : string | number | undefined
131+ ) => {
132+ setDisplayMode ( value as ChatbotDisplayMode ) ;
133+ } ;
134+
97135 const handleSend = ( message ) => alert ( message ) ;
98136
99137 // Attachments
@@ -166,9 +204,64 @@ export const BasicDemo: React.FunctionComponent = () => {
166204 setIsPreviewModalOpen ( false ) ;
167205 } }
168206 />
169- < Chatbot isVisible = { chatbotVisible } >
170- < FileDropZone onFileDrop = { handleFileDrop } >
207+ < Chatbot isVisible = { chatbotVisible } displayMode = { displayMode } >
208+ < FileDropZone onFileDrop = { handleFileDrop } displayMode = { displayMode } >
171209 < >
210+ < ChatbotHeader >
211+ < ChatbotHeaderMenu onMenuToggle = { ( ) => alert ( 'Menu toggle clicked' ) } />
212+ < ChatbotHeaderTitle >
213+ < Bullseye >
214+ < div className = "show-light" >
215+ < Brand src = { PFHorizontalLogoColor } alt = "PatternFly" />
216+ </ div >
217+ < div className = "show-dark" >
218+ < Brand src = { PFHorizontalLogoReverse } alt = "PatternFly" />
219+ </ div >
220+ </ Bullseye >
221+ </ ChatbotHeaderTitle >
222+ < ChatbotHeaderActions >
223+ < ChatbotHeaderSelectorDropdown value = { selectedModel } onSelect = { onSelectModel } >
224+ < DropdownList >
225+ < DropdownItem value = "Granite 7B" key = "granite" >
226+ Granite 7B
227+ </ DropdownItem >
228+ < DropdownItem value = "Llama 3.0" key = "llama" >
229+ Llama 3.0
230+ </ DropdownItem >
231+ < DropdownItem value = "Mistral 3B" key = "mistral" >
232+ Mistral 3B
233+ </ DropdownItem >
234+ </ DropdownList >
235+ </ ChatbotHeaderSelectorDropdown >
236+ < ChatbotHeaderOptionsDropdown onSelect = { onSelectDisplayMode } >
237+ < DropdownGroup label = "Display mode" >
238+ < DropdownList >
239+ < DropdownItem
240+ value = { ChatbotDisplayMode . default }
241+ key = "switchDisplayOverlay"
242+ icon = { < OutlinedWindowRestoreIcon aria-hidden /> }
243+ >
244+ < span > Overlay</ span >
245+ </ DropdownItem >
246+ < DropdownItem
247+ value = { ChatbotDisplayMode . docked }
248+ key = "switchDisplayDock"
249+ icon = { < OpenDrawerRightIcon aria-hidden /> }
250+ >
251+ < span > Dock to window</ span >
252+ </ DropdownItem >
253+ < DropdownItem
254+ value = { ChatbotDisplayMode . fullscreen }
255+ key = "switchDisplayFullscreen"
256+ icon = { < ExpandIcon aria-hidden /> }
257+ >
258+ < span > Fullscreen</ span >
259+ </ DropdownItem >
260+ </ DropdownList >
261+ </ DropdownGroup >
262+ </ ChatbotHeaderOptionsDropdown >
263+ </ ChatbotHeaderActions >
264+ </ ChatbotHeader >
172265 < ChatbotContent >
173266 { showAlert && (
174267 < Alert
@@ -220,6 +313,7 @@ export const BasicDemo: React.FunctionComponent = () => {
220313 } }
221314 onDismiss = { ( ) => setCurrentModalData ( undefined ) }
222315 handleModalToggle = { ( ) => setIsPreviewModalOpen ( false ) }
316+ displayMode = { displayMode }
223317 />
224318 ) }
225319 { currentModalData && (
@@ -232,6 +326,7 @@ export const BasicDemo: React.FunctionComponent = () => {
232326 } }
233327 onCancel = { ( ) => setCurrentModalData ( undefined ) }
234328 handleModalToggle = { ( ) => setIsEditModalOpen ( false ) }
329+ displayMode = { displayMode }
235330 />
236331 ) }
237332 </ >
0 commit comments