@patternfly/chatbot 6.5.0-prerelease.17 → 6.5.0-prerelease.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +29 -2
- package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
- package/dist/cjs/CodeModal/CodeModal.js +53 -12
- package/dist/cjs/Onboarding/Onboarding.d.ts +36 -0
- package/dist/cjs/Onboarding/Onboarding.js +37 -0
- package/dist/cjs/Onboarding/Onboarding.test.d.ts +1 -0
- package/dist/cjs/Onboarding/Onboarding.test.js +80 -0
- package/dist/cjs/Onboarding/index.d.ts +2 -0
- package/dist/cjs/Onboarding/index.js +23 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +4 -1
- package/dist/css/main.css +83 -0
- package/dist/css/main.css.map +1 -1
- package/dist/dynamic/Onboarding/package.json +1 -0
- package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +30 -3
- package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
- package/dist/esm/CodeModal/CodeModal.js +54 -13
- package/dist/esm/Onboarding/Onboarding.d.ts +36 -0
- package/dist/esm/Onboarding/Onboarding.js +30 -0
- package/dist/esm/Onboarding/Onboarding.test.d.ts +1 -0
- package/dist/esm/Onboarding/Onboarding.test.js +75 -0
- package/dist/esm/Onboarding/index.d.ts +2 -0
- package/dist/esm/Onboarding/index.js +2 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -3
- package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +3 -3
- package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +3 -3
- package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +11 -0
- package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactOnboarding.tsx +141 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/Onboarding.tsx +151 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/RH-Hat-Image.svg +9 -0
- package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +38 -20
- package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +1 -1
- package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +2 -2
- package/patternfly-docs/patternfly-docs.config.js +1 -1
- package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +56 -14
- package/src/ChatbotModal/ChatbotModal.scss +3 -0
- package/src/CodeModal/CodeModal.tsx +71 -26
- package/src/Onboarding/Onboarding.scss +101 -0
- package/src/Onboarding/Onboarding.test.tsx +148 -0
- package/src/Onboarding/Onboarding.tsx +126 -0
- package/src/Onboarding/index.ts +3 -0
- package/src/index.ts +3 -0
- package/src/main.scss +1 -0
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useRef,
|
|
3
|
+
useState,
|
|
4
|
+
FunctionComponent,
|
|
5
|
+
MouseEvent,
|
|
6
|
+
CSSProperties,
|
|
7
|
+
Ref,
|
|
8
|
+
MouseEvent as ReactMouseEvent
|
|
9
|
+
} from 'react';
|
|
10
|
+
import {
|
|
11
|
+
Button,
|
|
12
|
+
Checkbox,
|
|
13
|
+
SkipToContent,
|
|
14
|
+
MenuToggle,
|
|
15
|
+
MenuToggleElement,
|
|
16
|
+
Select,
|
|
17
|
+
SelectList,
|
|
18
|
+
SelectOption,
|
|
19
|
+
Stack
|
|
20
|
+
} from '@patternfly/react-core';
|
|
21
|
+
import Onboarding from '@patternfly/chatbot/dist/dynamic/Onboarding';
|
|
22
|
+
import Chatbot, { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot';
|
|
23
|
+
import onboardingHeader from './RH-Hat-Image.svg';
|
|
24
|
+
|
|
25
|
+
export const OnboardingExample: FunctionComponent = () => {
|
|
26
|
+
const [isModalOpen, setIsModalOpen] = useState(true);
|
|
27
|
+
const [displayMode, setDisplayMode] = useState(ChatbotDisplayMode.default);
|
|
28
|
+
const [hasImage, setHasImage] = useState(true);
|
|
29
|
+
const chatbotRef = useRef<HTMLDivElement>(null);
|
|
30
|
+
const termsRef = useRef<HTMLDivElement>(null);
|
|
31
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
32
|
+
const [selected, setSelected] = useState<string>('Select display mode');
|
|
33
|
+
|
|
34
|
+
const handleSkipToContent = (e) => {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
if (!isModalOpen && chatbotRef.current) {
|
|
37
|
+
chatbotRef.current.focus();
|
|
38
|
+
}
|
|
39
|
+
if (isModalOpen && termsRef.current) {
|
|
40
|
+
termsRef.current.focus();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const handleModalToggle = (_event: MouseEvent | MouseEvent | KeyboardEvent) => {
|
|
45
|
+
setIsModalOpen(!isModalOpen);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const onPrimaryAction = () => {
|
|
49
|
+
// eslint-disable-next-line no-console
|
|
50
|
+
console.log('Clicked primary action');
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const onSecondaryAction = () => {
|
|
54
|
+
// eslint-disable-next-line no-console
|
|
55
|
+
console.log('Clicked secondary action');
|
|
56
|
+
};
|
|
57
|
+
const onSelect = (_event: ReactMouseEvent<Element, MouseEvent> | undefined, value: string | number | undefined) => {
|
|
58
|
+
setSelected(value as string);
|
|
59
|
+
setIsOpen(false);
|
|
60
|
+
if (value === 'Default') {
|
|
61
|
+
setDisplayMode(ChatbotDisplayMode.default);
|
|
62
|
+
}
|
|
63
|
+
if (value === 'Docked') {
|
|
64
|
+
setDisplayMode(ChatbotDisplayMode.docked);
|
|
65
|
+
}
|
|
66
|
+
if (value === 'Fullscreen') {
|
|
67
|
+
setDisplayMode(ChatbotDisplayMode.fullscreen);
|
|
68
|
+
}
|
|
69
|
+
if (value === 'Embedded') {
|
|
70
|
+
setDisplayMode(ChatbotDisplayMode.embedded);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const onToggleClick = () => {
|
|
75
|
+
setIsOpen(!isOpen);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const toggle = (toggleRef: Ref<MenuToggleElement>) => (
|
|
79
|
+
<MenuToggle
|
|
80
|
+
ref={toggleRef}
|
|
81
|
+
onClick={onToggleClick}
|
|
82
|
+
isExpanded={isOpen}
|
|
83
|
+
style={
|
|
84
|
+
{
|
|
85
|
+
width: '200px'
|
|
86
|
+
} as CSSProperties
|
|
87
|
+
}
|
|
88
|
+
aria-label={selected === 'Select display mode' ? 'Select display mode' : `Display mode, ${selected}`}
|
|
89
|
+
>
|
|
90
|
+
{selected}
|
|
91
|
+
</MenuToggle>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const body = 'Simplify your Red Hat journey with personalized assistance and seamless problem-solving.';
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<>
|
|
98
|
+
<SkipToContent style={{ zIndex: '999' }} onClick={handleSkipToContent} href="#">
|
|
99
|
+
Skip to chatbot
|
|
100
|
+
</SkipToContent>
|
|
101
|
+
<div
|
|
102
|
+
style={{
|
|
103
|
+
position: 'fixed',
|
|
104
|
+
padding: 'var(--pf-t--global--spacer--lg)',
|
|
105
|
+
zIndex: '601',
|
|
106
|
+
boxShadow: 'var(--pf-t--global--box-shadow--lg)'
|
|
107
|
+
}}
|
|
108
|
+
>
|
|
109
|
+
<Stack hasGutter>
|
|
110
|
+
<Select
|
|
111
|
+
id="single-select"
|
|
112
|
+
isOpen={isOpen}
|
|
113
|
+
selected={selected}
|
|
114
|
+
onSelect={onSelect}
|
|
115
|
+
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
116
|
+
toggle={toggle}
|
|
117
|
+
shouldFocusToggleOnSelect
|
|
118
|
+
>
|
|
119
|
+
<SelectList>
|
|
120
|
+
<SelectOption value="Default">Default</SelectOption>
|
|
121
|
+
<SelectOption value="Docked">Docked</SelectOption>
|
|
122
|
+
<SelectOption value="Fullscreen">Fullscreen</SelectOption>
|
|
123
|
+
<SelectOption value="Embedded">Embedded</SelectOption>
|
|
124
|
+
</SelectList>
|
|
125
|
+
</Select>
|
|
126
|
+
<Checkbox
|
|
127
|
+
isChecked={hasImage}
|
|
128
|
+
id="toggle-header-image"
|
|
129
|
+
name="toggle-header-image"
|
|
130
|
+
label="Has image in header"
|
|
131
|
+
onChange={(_event, checked) => setHasImage(checked)}
|
|
132
|
+
></Checkbox>
|
|
133
|
+
<Button onClick={handleModalToggle}>Toggle modal</Button>
|
|
134
|
+
</Stack>
|
|
135
|
+
</div>
|
|
136
|
+
<Chatbot ref={chatbotRef} displayMode={displayMode} isVisible></Chatbot>
|
|
137
|
+
<Onboarding
|
|
138
|
+
ref={termsRef}
|
|
139
|
+
displayMode={displayMode}
|
|
140
|
+
isModalOpen={isModalOpen}
|
|
141
|
+
handleModalToggle={handleModalToggle}
|
|
142
|
+
onPrimaryAction={onPrimaryAction}
|
|
143
|
+
onSecondaryAction={onSecondaryAction}
|
|
144
|
+
headerImage={hasImage ? onboardingHeader : undefined}
|
|
145
|
+
title="Redefine work in the age of AI"
|
|
146
|
+
>
|
|
147
|
+
{body}
|
|
148
|
+
</Onboarding>
|
|
149
|
+
</>
|
|
150
|
+
);
|
|
151
|
+
};
|