@patternfly/chatbot 6.5.0-prerelease.18 → 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.
Files changed (49) hide show
  1. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +29 -2
  2. package/dist/cjs/CodeModal/CodeModal.d.ts +2 -0
  3. package/dist/cjs/CodeModal/CodeModal.js +53 -12
  4. package/dist/cjs/Onboarding/Onboarding.d.ts +36 -0
  5. package/dist/cjs/Onboarding/Onboarding.js +37 -0
  6. package/dist/cjs/Onboarding/Onboarding.test.d.ts +1 -0
  7. package/dist/cjs/Onboarding/Onboarding.test.js +80 -0
  8. package/dist/cjs/Onboarding/index.d.ts +2 -0
  9. package/dist/cjs/Onboarding/index.js +23 -0
  10. package/dist/cjs/index.d.ts +2 -0
  11. package/dist/cjs/index.js +4 -1
  12. package/dist/css/main.css +83 -0
  13. package/dist/css/main.css.map +1 -1
  14. package/dist/dynamic/Onboarding/package.json +1 -0
  15. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +30 -3
  16. package/dist/esm/CodeModal/CodeModal.d.ts +2 -0
  17. package/dist/esm/CodeModal/CodeModal.js +54 -13
  18. package/dist/esm/Onboarding/Onboarding.d.ts +36 -0
  19. package/dist/esm/Onboarding/Onboarding.js +30 -0
  20. package/dist/esm/Onboarding/Onboarding.test.d.ts +1 -0
  21. package/dist/esm/Onboarding/Onboarding.test.js +75 -0
  22. package/dist/esm/Onboarding/index.d.ts +2 -0
  23. package/dist/esm/Onboarding/index.js +2 -0
  24. package/dist/esm/index.d.ts +2 -0
  25. package/dist/esm/index.js +2 -0
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +12 -3
  28. package/patternfly-docs/content/extensions/chatbot/about-chatbot.md +3 -3
  29. package/patternfly-docs/content/extensions/chatbot/design-guidelines.md +3 -3
  30. package/patternfly-docs/content/extensions/chatbot/examples/Analytics/Analytics.md +1 -1
  31. package/patternfly-docs/content/extensions/chatbot/examples/Customizing Messages/Customizing Messages.md +1 -1
  32. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickResponses.tsx +11 -0
  33. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +1 -1
  34. package/patternfly-docs/content/extensions/chatbot/examples/UI/CompactOnboarding.tsx +141 -0
  35. package/patternfly-docs/content/extensions/chatbot/examples/UI/Onboarding.tsx +151 -0
  36. package/patternfly-docs/content/extensions/chatbot/examples/UI/RH-Hat-Image.svg +9 -0
  37. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +38 -20
  38. package/patternfly-docs/content/extensions/chatbot/examples/demos/AttachmentDemos.md +1 -1
  39. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +2 -2
  40. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +56 -14
  41. package/src/ChatbotModal/ChatbotModal.scss +3 -0
  42. package/src/CodeModal/CodeModal.tsx +71 -26
  43. package/src/Onboarding/Onboarding.scss +101 -0
  44. package/src/Onboarding/Onboarding.test.tsx +148 -0
  45. package/src/Onboarding/Onboarding.tsx +126 -0
  46. package/src/Onboarding/index.ts +3 -0
  47. package/src/index.ts +3 -0
  48. package/src/main.scss +1 -0
  49. 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
+ };