@patternfly/chatbot 2.2.0-prerelease.1 → 2.2.0-prerelease.11

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 (187) hide show
  1. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +19 -1
  2. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +11 -11
  3. package/dist/cjs/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  4. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  5. package/dist/cjs/ChatbotHeader/ChatbotHeaderCloseButton.js +14 -0
  6. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  7. package/dist/cjs/ChatbotHeader/ChatbotHeaderMenu.js +2 -2
  8. package/dist/cjs/ChatbotHeader/index.d.ts +1 -0
  9. package/dist/cjs/ChatbotHeader/index.js +1 -0
  10. package/dist/cjs/CodeModal/CodeModal.js +2 -12
  11. package/dist/cjs/Compare/Compare.d.ts +17 -0
  12. package/dist/cjs/Compare/Compare.js +50 -0
  13. package/dist/cjs/Compare/Compare.test.d.ts +1 -0
  14. package/dist/cjs/Compare/Compare.test.js +20 -0
  15. package/dist/cjs/Compare/index.d.ts +2 -0
  16. package/dist/cjs/Compare/index.js +23 -0
  17. package/dist/cjs/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  18. package/dist/cjs/Message/ListMessage/OrderedListMessage.js +2 -2
  19. package/dist/cjs/Message/Message.d.ts +16 -6
  20. package/dist/cjs/Message/Message.js +6 -6
  21. package/dist/cjs/Message/Message.test.js +51 -0
  22. package/dist/cjs/Message/QuickResponse/QuickResponse.d.ts +15 -0
  23. package/dist/cjs/Message/QuickResponse/QuickResponse.js +33 -0
  24. package/dist/cjs/Message/QuickStarts/FallbackImg.d.ts +13 -0
  25. package/dist/cjs/Message/QuickStarts/FallbackImg.js +34 -0
  26. package/dist/cjs/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  27. package/dist/cjs/Message/QuickStarts/QuickStartTile.js +82 -0
  28. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  29. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.js +64 -0
  30. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  31. package/dist/cjs/Message/QuickStarts/QuickStartTileDescription.test.js +76 -0
  32. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  33. package/dist/cjs/Message/QuickStarts/QuickStartTileHeader.js +30 -0
  34. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  35. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +77 -0
  36. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  37. package/dist/cjs/Message/QuickStarts/monitor-sampleapp-quickstart.js +77 -0
  38. package/dist/cjs/Message/QuickStarts/types.d.ts +132 -0
  39. package/dist/cjs/Message/QuickStarts/types.js +17 -0
  40. package/dist/cjs/ResponseActions/ResponseActionButton.d.ts +6 -0
  41. package/dist/cjs/ResponseActions/ResponseActionButton.js +10 -2
  42. package/dist/cjs/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  43. package/dist/cjs/ResponseActions/ResponseActionButton.test.js +54 -0
  44. package/dist/cjs/ResponseActions/ResponseActions.d.ts +4 -0
  45. package/dist/cjs/ResponseActions/ResponseActions.js +26 -9
  46. package/dist/cjs/ResponseActions/ResponseActions.test.js +79 -5
  47. package/dist/cjs/Settings/SettingsForm.d.ts +13 -0
  48. package/dist/cjs/Settings/SettingsForm.js +27 -0
  49. package/dist/cjs/Settings/index.d.ts +2 -0
  50. package/dist/cjs/Settings/index.js +23 -0
  51. package/dist/cjs/TermsOfUse/TermsOfUse.d.ts +34 -0
  52. package/dist/cjs/TermsOfUse/TermsOfUse.js +49 -0
  53. package/dist/cjs/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  54. package/dist/cjs/TermsOfUse/TermsOfUse.test.js +79 -0
  55. package/dist/cjs/TermsOfUse/index.d.ts +2 -0
  56. package/dist/cjs/TermsOfUse/index.js +23 -0
  57. package/dist/cjs/index.d.ts +6 -0
  58. package/dist/cjs/index.js +10 -1
  59. package/dist/css/main.css +244 -18
  60. package/dist/css/main.css.map +1 -1
  61. package/dist/dynamic/Compare/package.json +1 -0
  62. package/dist/dynamic/Settings/package.json +1 -0
  63. package/dist/dynamic/TermsOfUse/package.json +1 -0
  64. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.d.ts +19 -1
  65. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.js +11 -11
  66. package/dist/esm/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.js +39 -3
  67. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.d.ts +17 -0
  68. package/dist/esm/ChatbotHeader/ChatbotHeaderCloseButton.js +8 -0
  69. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.d.ts +2 -0
  70. package/dist/esm/ChatbotHeader/ChatbotHeaderMenu.js +2 -2
  71. package/dist/esm/ChatbotHeader/index.d.ts +1 -0
  72. package/dist/esm/ChatbotHeader/index.js +1 -0
  73. package/dist/esm/CodeModal/CodeModal.js +2 -12
  74. package/dist/esm/Compare/Compare.d.ts +17 -0
  75. package/dist/esm/Compare/Compare.js +43 -0
  76. package/dist/esm/Compare/Compare.test.d.ts +1 -0
  77. package/dist/esm/Compare/Compare.test.js +15 -0
  78. package/dist/esm/Compare/index.d.ts +2 -0
  79. package/dist/esm/Compare/index.js +2 -0
  80. package/dist/esm/Message/ListMessage/OrderedListMessage.d.ts +1 -1
  81. package/dist/esm/Message/ListMessage/OrderedListMessage.js +2 -2
  82. package/dist/esm/Message/Message.d.ts +16 -6
  83. package/dist/esm/Message/Message.js +7 -7
  84. package/dist/esm/Message/Message.test.js +51 -0
  85. package/dist/esm/Message/QuickResponse/QuickResponse.d.ts +15 -0
  86. package/dist/esm/Message/QuickResponse/QuickResponse.js +26 -0
  87. package/dist/esm/Message/QuickStarts/FallbackImg.d.ts +13 -0
  88. package/dist/esm/Message/QuickStarts/FallbackImg.js +9 -0
  89. package/dist/esm/Message/QuickStarts/QuickStartTile.d.ts +27 -0
  90. package/dist/esm/Message/QuickStarts/QuickStartTile.js +52 -0
  91. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.d.ts +23 -0
  92. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.js +35 -0
  93. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.d.ts +1 -0
  94. package/dist/esm/Message/QuickStarts/QuickStartTileDescription.test.js +48 -0
  95. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.d.ts +11 -0
  96. package/dist/esm/Message/QuickStarts/QuickStartTileHeader.js +5 -0
  97. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.d.ts +30 -0
  98. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.js +74 -0
  99. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.d.ts +30 -0
  100. package/dist/esm/Message/QuickStarts/monitor-sampleapp-quickstart.js +74 -0
  101. package/dist/esm/Message/QuickStarts/types.d.ts +132 -0
  102. package/dist/esm/Message/QuickStarts/types.js +14 -0
  103. package/dist/esm/ResponseActions/ResponseActionButton.d.ts +6 -0
  104. package/dist/esm/ResponseActions/ResponseActionButton.js +10 -2
  105. package/dist/esm/ResponseActions/ResponseActionButton.test.d.ts +1 -0
  106. package/dist/esm/ResponseActions/ResponseActionButton.test.js +49 -0
  107. package/dist/esm/ResponseActions/ResponseActions.d.ts +4 -0
  108. package/dist/esm/ResponseActions/ResponseActions.js +26 -9
  109. package/dist/esm/ResponseActions/ResponseActions.test.js +79 -5
  110. package/dist/esm/Settings/SettingsForm.d.ts +13 -0
  111. package/dist/esm/Settings/SettingsForm.js +20 -0
  112. package/dist/esm/Settings/index.d.ts +2 -0
  113. package/dist/esm/Settings/index.js +2 -0
  114. package/dist/esm/TermsOfUse/TermsOfUse.d.ts +34 -0
  115. package/dist/esm/TermsOfUse/TermsOfUse.js +42 -0
  116. package/dist/esm/TermsOfUse/TermsOfUse.test.d.ts +1 -0
  117. package/dist/esm/TermsOfUse/TermsOfUse.test.js +74 -0
  118. package/dist/esm/TermsOfUse/index.d.ts +2 -0
  119. package/dist/esm/TermsOfUse/index.js +2 -0
  120. package/dist/esm/index.d.ts +6 -0
  121. package/dist/esm/index.js +6 -0
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +7 -13
  124. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithCustomResponseActions.tsx +4 -0
  125. package/patternfly-docs/content/extensions/chatbot/examples/Messages/MessageWithQuickStart.tsx +31 -0
  126. package/patternfly-docs/content/extensions/chatbot/examples/Messages/Messages.md +26 -4
  127. package/patternfly-docs/content/extensions/chatbot/examples/Messages/explore-pipeline-quickstart.ts +65 -0
  128. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFooter.tsx +1 -1
  129. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotFootnote.tsx +2 -2
  130. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawer.tsx +2 -2
  131. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerNavigation.tsx +67 -0
  132. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerResizable.tsx +94 -0
  133. package/patternfly-docs/content/extensions/chatbot/examples/UI/ChatbotHeaderDrawerWithSelection.tsx +78 -0
  134. package/patternfly-docs/content/extensions/chatbot/examples/UI/PF-TermsAndConditionsHeader.svg +148 -0
  135. package/patternfly-docs/content/extensions/chatbot/examples/UI/Settings.tsx +289 -0
  136. package/patternfly-docs/content/extensions/chatbot/examples/UI/SquareChatbotToggle.tsx +1 -1
  137. package/patternfly-docs/content/extensions/chatbot/examples/UI/TermsOfUse.tsx +147 -0
  138. package/patternfly-docs/content/extensions/chatbot/examples/UI/UI.md +54 -0
  139. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.md +26 -3
  140. package/patternfly-docs/content/extensions/chatbot/examples/demos/Chatbot.tsx +2 -2
  141. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachment.tsx +20 -19
  142. package/patternfly-docs/content/extensions/chatbot/examples/demos/ChatbotAttachmentMenu.tsx +1 -1
  143. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedChatbot.tsx +2 -2
  144. package/patternfly-docs/content/extensions/chatbot/examples/demos/EmbeddedComparisonChatbot.tsx +206 -0
  145. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.scss +14 -0
  146. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx +112 -3
  147. package/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx +46 -9
  148. package/src/ChatbotFooter/ChatbotFooter.scss +2 -1
  149. package/src/ChatbotHeader/ChatbotHeaderCloseButton.tsx +51 -0
  150. package/src/ChatbotHeader/ChatbotHeaderMenu.tsx +5 -2
  151. package/src/ChatbotHeader/index.ts +1 -0
  152. package/src/CodeModal/CodeModal.scss +8 -0
  153. package/src/CodeModal/CodeModal.tsx +2 -13
  154. package/src/Compare/Compare.scss +72 -0
  155. package/src/Compare/Compare.test.tsx +31 -0
  156. package/src/Compare/Compare.tsx +98 -0
  157. package/src/Compare/index.ts +2 -0
  158. package/src/FileDropZone/__snapshots__/FileDropZone.test.tsx.snap +1 -1
  159. package/src/Message/ListMessage/OrderedListMessage.tsx +2 -2
  160. package/src/Message/Message.scss +0 -14
  161. package/src/Message/Message.test.tsx +76 -0
  162. package/src/Message/Message.tsx +35 -26
  163. package/src/Message/QuickResponse/QuickResponse.scss +33 -0
  164. package/src/Message/QuickResponse/QuickResponse.tsx +50 -0
  165. package/src/Message/QuickStarts/FallbackImg.tsx +24 -0
  166. package/src/Message/QuickStarts/QuickStartTile.scss +25 -0
  167. package/src/Message/QuickStarts/QuickStartTile.tsx +147 -0
  168. package/src/Message/QuickStarts/QuickStartTileDescription.test.tsx +57 -0
  169. package/src/Message/QuickStarts/QuickStartTileDescription.tsx +81 -0
  170. package/src/Message/QuickStarts/QuickStartTileHeader.tsx +21 -0
  171. package/src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts +75 -0
  172. package/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts +75 -0
  173. package/src/Message/QuickStarts/types.ts +154 -0
  174. package/src/ResponseActions/ResponseActionButton.test.tsx +52 -0
  175. package/src/ResponseActions/ResponseActionButton.tsx +46 -27
  176. package/src/ResponseActions/ResponseActions.scss +10 -8
  177. package/src/ResponseActions/ResponseActions.test.tsx +103 -5
  178. package/src/ResponseActions/ResponseActions.tsx +54 -7
  179. package/src/Settings/Settings.scss +34 -0
  180. package/src/Settings/SettingsForm.tsx +25 -0
  181. package/src/Settings/index.ts +3 -0
  182. package/src/TermsOfUse/TermsOfUse.scss +66 -0
  183. package/src/TermsOfUse/TermsOfUse.test.tsx +138 -0
  184. package/src/TermsOfUse/TermsOfUse.tsx +117 -0
  185. package/src/TermsOfUse/index.ts +3 -0
  186. package/src/index.ts +9 -0
  187. package/src/main.scss +5 -0
@@ -13,25 +13,30 @@ import '@testing-library/jest-dom';
13
13
  import ResponseActions from './ResponseActions';
14
14
  import userEvent from '@testing-library/user-event';
15
15
  import { DownloadIcon, InfoCircleIcon, RedoIcon } from '@patternfly/react-icons';
16
+ import Message from '../Message';
16
17
  const ALL_ACTIONS = [
17
- { type: 'positive', label: 'Good response' },
18
- { type: 'negative', label: 'Bad response' },
19
- { type: 'copy', label: 'Copy' },
20
- { type: 'share', label: 'Share' },
21
- { type: 'listen', label: 'Listen' }
18
+ { type: 'positive', label: 'Good response', clickedLabel: 'Response recorded' },
19
+ { type: 'negative', label: 'Bad response', clickedLabel: 'Response recorded' },
20
+ { type: 'copy', label: 'Copy', clickedLabel: 'Copied' },
21
+ { type: 'share', label: 'Share', clickedLabel: 'Shared' },
22
+ { type: 'listen', label: 'Listen', clickedLabel: 'Listening' }
22
23
  ];
23
24
  const CUSTOM_ACTIONS = [
24
25
  {
25
26
  regenerate: {
26
27
  ariaLabel: 'Regenerate',
28
+ clickedAriaLabel: 'Regenerated',
27
29
  onClick: jest.fn(),
28
30
  tooltipContent: 'Regenerate',
31
+ clickedTooltipContent: 'Regenerated',
29
32
  icon: React.createElement(RedoIcon, null)
30
33
  },
31
34
  download: {
32
35
  ariaLabel: 'Download',
36
+ clickedAriaLabel: 'Downloaded',
33
37
  onClick: jest.fn(),
34
38
  tooltipContent: 'Download',
39
+ clickedTooltipContent: 'Downloaded',
35
40
  icon: React.createElement(DownloadIcon, null)
36
41
  },
37
42
  info: {
@@ -43,6 +48,59 @@ const CUSTOM_ACTIONS = [
43
48
  }
44
49
  ];
45
50
  describe('ResponseActions', () => {
51
+ afterEach(() => {
52
+ jest.clearAllMocks();
53
+ });
54
+ it('should handle click within group of buttons correctly', () => __awaiter(void 0, void 0, void 0, function* () {
55
+ render(React.createElement(ResponseActions, { actions: {
56
+ positive: { onClick: jest.fn() },
57
+ negative: { onClick: jest.fn() },
58
+ copy: { onClick: jest.fn() },
59
+ share: { onClick: jest.fn() },
60
+ listen: { onClick: jest.fn() }
61
+ } }));
62
+ const goodBtn = screen.getByRole('button', { name: 'Good response' });
63
+ const badBtn = screen.getByRole('button', { name: 'Bad response' });
64
+ const copyBtn = screen.getByRole('button', { name: 'Copy' });
65
+ const shareBtn = screen.getByRole('button', { name: 'Share' });
66
+ const listenBtn = screen.getByRole('button', { name: 'Listen' });
67
+ const buttons = [goodBtn, badBtn, copyBtn, shareBtn, listenBtn];
68
+ buttons.forEach((button) => {
69
+ expect(button).toBeTruthy();
70
+ });
71
+ yield userEvent.click(goodBtn);
72
+ expect(screen.getByRole('button', { name: 'Response recorded' })).toHaveClass('pf-chatbot__button--response-action-clicked');
73
+ let unclickedButtons = buttons.filter((button) => button !== goodBtn);
74
+ unclickedButtons.forEach((button) => {
75
+ expect(button).not.toHaveClass('pf-chatbot__button--response-action-clicked');
76
+ });
77
+ yield userEvent.click(badBtn);
78
+ expect(screen.getByRole('button', { name: 'Response recorded' })).toHaveClass('pf-chatbot__button--response-action-clicked');
79
+ unclickedButtons = buttons.filter((button) => button !== badBtn);
80
+ unclickedButtons.forEach((button) => {
81
+ expect(button).not.toHaveClass('pf-chatbot__button--response-action-clicked');
82
+ });
83
+ }));
84
+ it('should handle click outside of group of buttons correctly', () => __awaiter(void 0, void 0, void 0, function* () {
85
+ // using message just so we have something outside the group that's rendered
86
+ render(React.createElement(Message, { name: "Bot", role: "bot", avatar: "", content: "Example with all prebuilt actions", actions: {
87
+ positive: {},
88
+ negative: {}
89
+ } }));
90
+ const goodBtn = screen.getByRole('button', { name: 'Good response' });
91
+ const badBtn = screen.getByRole('button', { name: 'Bad response' });
92
+ expect(goodBtn).toBeTruthy();
93
+ expect(badBtn).toBeTruthy();
94
+ yield userEvent.click(goodBtn);
95
+ expect(screen.getByRole('button', { name: 'Response recorded' })).toHaveClass('pf-chatbot__button--response-action-clicked');
96
+ expect(badBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
97
+ yield userEvent.click(badBtn);
98
+ expect(screen.getByRole('button', { name: 'Response recorded' })).toHaveClass('pf-chatbot__button--response-action-clicked');
99
+ expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
100
+ yield userEvent.click(screen.getByText('Example with all prebuilt actions'));
101
+ expect(goodBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
102
+ expect(badBtn).not.toHaveClass('pf-chatbot__button--response-action-clicked');
103
+ }));
46
104
  it('should render buttons correctly', () => {
47
105
  ALL_ACTIONS.forEach(({ type, label }) => {
48
106
  render(React.createElement(ResponseActions, { actions: { [type]: { onClick: jest.fn() } } }));
@@ -57,6 +115,22 @@ describe('ResponseActions', () => {
57
115
  expect(spy).toHaveBeenCalledTimes(1);
58
116
  }));
59
117
  }));
118
+ it('should swap clicked and non-clicked aria labels on click', () => __awaiter(void 0, void 0, void 0, function* () {
119
+ ALL_ACTIONS.forEach((_a) => __awaiter(void 0, [_a], void 0, function* ({ type, label, clickedLabel }) {
120
+ render(React.createElement(ResponseActions, { actions: { [type]: { onClick: jest.fn() } } }));
121
+ expect(screen.getByRole('button', { name: label })).toBeTruthy();
122
+ yield userEvent.click(screen.getByRole('button', { name: label }));
123
+ expect(screen.getByRole('button', { name: clickedLabel })).toBeTruthy();
124
+ }));
125
+ }));
126
+ it('should swap clicked and non-clicked tooltips on click', () => __awaiter(void 0, void 0, void 0, function* () {
127
+ ALL_ACTIONS.forEach((_a) => __awaiter(void 0, [_a], void 0, function* ({ type, label, clickedLabel }) {
128
+ render(React.createElement(ResponseActions, { actions: { [type]: { onClick: jest.fn() } } }));
129
+ expect(screen.getByRole('button', { name: label })).toBeTruthy();
130
+ yield userEvent.click(screen.getByRole('button', { name: label }));
131
+ expect(screen.getByRole('tooltip', { name: clickedLabel })).toBeTruthy();
132
+ }));
133
+ }));
60
134
  it('should be able to change aria labels', () => {
61
135
  const actions = [
62
136
  { type: 'positive', ariaLabel: 'Thumbs up' },
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface SettingsFormProps {
3
+ /** Class applied to form container */
4
+ className?: string;
5
+ /** Array of fields to display in the settings layout */
6
+ fields?: {
7
+ id: string;
8
+ label: string;
9
+ field: React.ReactElement;
10
+ }[];
11
+ }
12
+ export declare const SettingsForm: React.FunctionComponent<SettingsFormProps>;
13
+ export default SettingsForm;
@@ -0,0 +1,20 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React from 'react';
13
+ export const SettingsForm = (_a) => {
14
+ var { className, fields = [] } = _a, props = __rest(_a, ["className", "fields"]);
15
+ return (React.createElement("div", Object.assign({ className: `pf-chatbot__settings-form-container ${className}` }, props),
16
+ React.createElement("form", { className: "pf-chatbot__settings-form" }, fields.map((field) => (React.createElement("div", { className: "pf-chatbot__settings-form-row", key: field.label },
17
+ React.createElement("label", { className: "pf-chatbot__settings-label", htmlFor: field.id }, field.label),
18
+ field.field))))));
19
+ };
20
+ export default SettingsForm;
@@ -0,0 +1,2 @@
1
+ export { default } from './SettingsForm';
2
+ export * from './SettingsForm';
@@ -0,0 +1,2 @@
1
+ export { default } from './SettingsForm';
2
+ export * from './SettingsForm';
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { ModalProps } from '@patternfly/react-core';
3
+ import { ChatbotDisplayMode } from '../Chatbot';
4
+ export interface TermsOfUseProps extends ModalProps {
5
+ /** Class applied to modal */
6
+ className?: string;
7
+ /** Action assigned to primary modal button */
8
+ onPrimaryAction?: (event: React.MouseEvent | MouseEvent | KeyboardEvent) => void;
9
+ /** Action assigned to secondary modal button */
10
+ onSecondaryAction: (event: React.MouseEvent | MouseEvent | KeyboardEvent) => void;
11
+ /** Name of primary modal button */
12
+ primaryActionBtn?: string;
13
+ /** Name of secondary modal button */
14
+ secondaryActionBtn?: string;
15
+ /** Function that handles modal toggle */
16
+ handleModalToggle: (event: React.MouseEvent | MouseEvent | KeyboardEvent) => void;
17
+ /** Whether modal is open */
18
+ isModalOpen: boolean;
19
+ /** Title of modal */
20
+ title?: string;
21
+ /** Display mode for the Chatbot parent; this influences the styles applied */
22
+ displayMode?: ChatbotDisplayMode;
23
+ /** Optional image displayed in header */
24
+ image?: string;
25
+ /** Alt text for optional image displayed in header */
26
+ altText?: string;
27
+ /** Ref applied to modal */
28
+ innerRef?: React.Ref<HTMLDivElement>;
29
+ /** OuiaID applied to modal */
30
+ ouiaId?: string;
31
+ }
32
+ export declare const TermsOfUseBase: React.FunctionComponent<TermsOfUseProps>;
33
+ declare const TermsOfUse: React.ForwardRefExoticComponent<Omit<TermsOfUseProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
34
+ export default TermsOfUse;
@@ -0,0 +1,42 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ // ============================================================================
13
+ // Terms of Use Modal - Chatbot Modal Extension
14
+ // ============================================================================
15
+ import React from 'react';
16
+ import { Button, Content, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core';
17
+ import { ChatbotDisplayMode } from '../Chatbot';
18
+ import ChatbotModal from '../ChatbotModal/ChatbotModal';
19
+ export const TermsOfUseBase = (_a) => {
20
+ var { handleModalToggle, isModalOpen, onPrimaryAction, onSecondaryAction, primaryActionBtn = 'Accept', secondaryActionBtn = 'Decline', title = 'Terms of use', image, altText, displayMode = ChatbotDisplayMode.default, className, children, innerRef, ouiaId = 'TermsOfUse' } = _a, props = __rest(_a, ["handleModalToggle", "isModalOpen", "onPrimaryAction", "onSecondaryAction", "primaryActionBtn", "secondaryActionBtn", "title", "image", "altText", "displayMode", "className", "children", "innerRef", "ouiaId"]);
21
+ const handlePrimaryAction = (_event) => {
22
+ handleModalToggle(_event);
23
+ onPrimaryAction && onPrimaryAction(_event);
24
+ };
25
+ const handleSecondaryAction = (_event) => {
26
+ onSecondaryAction(_event);
27
+ };
28
+ const modal = (React.createElement(ChatbotModal, Object.assign({ isOpen: isModalOpen, ouiaId: ouiaId, "aria-labelledby": "terms-of-use-title", "aria-describedby": "terms-of-use-modal", className: `pf-chatbot__terms-of-use-modal pf-chatbot__terms-of-use-modal--${displayMode} ${className ? className : ''}`, displayMode: displayMode }, props),
29
+ React.createElement("section", { className: `pf-chatbot__terms-of-use--section`, "aria-label": title, tabIndex: -1, ref: innerRef },
30
+ React.createElement(ModalHeader, null,
31
+ React.createElement("div", { className: "pf-chatbot__terms-of-use--header" },
32
+ image && altText && React.createElement("img", { src: image, className: "pf-chatbot__terms-of-use--image", alt: altText }),
33
+ React.createElement("h1", { className: "pf-chatbot__terms-of-use--title" }, title))),
34
+ React.createElement(ModalBody, null,
35
+ React.createElement(Content, null, children)),
36
+ React.createElement(ModalFooter, { className: "pf-chatbot__terms-of-use--footer" },
37
+ React.createElement(Button, { isBlock: true, key: "terms-of-use-modal-primary", variant: "primary", onClick: handlePrimaryAction, form: "terms-of-use-form", size: "lg" }, primaryActionBtn),
38
+ React.createElement(Button, { isBlock: true, key: "terms-of-use-modal-secondary", variant: "secondary", onClick: handleSecondaryAction, size: "lg" }, secondaryActionBtn)))));
39
+ return modal;
40
+ };
41
+ const TermsOfUse = React.forwardRef((props, ref) => (React.createElement(TermsOfUseBase, Object.assign({ innerRef: ref }, props))));
42
+ export default TermsOfUse;
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,74 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import React from 'react';
11
+ import { render, screen } from '@testing-library/react';
12
+ import '@testing-library/jest-dom';
13
+ import userEvent from '@testing-library/user-event';
14
+ import TermsOfUse from './TermsOfUse';
15
+ import { Content } from '@patternfly/react-core';
16
+ const handleModalToggle = jest.fn();
17
+ const onPrimaryAction = jest.fn();
18
+ const onSecondaryAction = jest.fn();
19
+ const body = (React.createElement(Content, null,
20
+ React.createElement("h1", null, "Heading 1"),
21
+ React.createElement("p", null, "Legal text")));
22
+ describe('TermsOfUse', () => {
23
+ afterEach(() => {
24
+ jest.clearAllMocks();
25
+ });
26
+ it('should render modal correctly', () => {
27
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle, ouiaId: "Terms" }, body));
28
+ expect(screen.getByRole('heading', { name: /Terms of use/i })).toBeTruthy();
29
+ expect(screen.getByRole('button', { name: /Accept/i })).toBeTruthy();
30
+ expect(screen.getByRole('button', { name: /Decline/i })).toBeTruthy();
31
+ expect(screen.getByRole('heading', { name: /Heading 1/i })).toBeTruthy();
32
+ expect(screen.getByText(/Legal text/i)).toBeTruthy();
33
+ expect(screen.getByRole('dialog')).toHaveClass('pf-chatbot__terms-of-use-modal');
34
+ expect(screen.getByRole('dialog')).toHaveClass('pf-chatbot__terms-of-use-modal--default');
35
+ });
36
+ it('should handle image and altText props', () => {
37
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle, image: "./image.png", altText: "Test image" }, body));
38
+ expect(screen.getByRole('img')).toBeTruthy();
39
+ expect(screen.getByRole('img')).toHaveAttribute('alt', 'Test image');
40
+ });
41
+ it('should handle className prop', () => {
42
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle, className: "test" }, body));
43
+ expect(screen.getByRole('dialog')).toHaveClass('pf-chatbot__terms-of-use-modal');
44
+ expect(screen.getByRole('dialog')).toHaveClass('pf-chatbot__terms-of-use-modal--default');
45
+ expect(screen.getByRole('dialog')).toHaveClass('test');
46
+ });
47
+ it('should handle title prop', () => {
48
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle, title: "Updated title" }, body));
49
+ expect(screen.getByRole('heading', { name: /Updated title/i })).toBeTruthy();
50
+ expect(screen.queryByRole('heading', { name: /Terms of use/i })).toBeFalsy();
51
+ });
52
+ it('should handle primary button prop', () => {
53
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle, primaryActionBtn: "First" }, body));
54
+ expect(screen.getByRole('button', { name: /First/i })).toBeTruthy();
55
+ expect(screen.queryByRole('button', { name: /Accept/i })).toBeFalsy();
56
+ });
57
+ it('should handle secondary button prop', () => {
58
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle, secondaryActionBtn: "Second" }, body));
59
+ expect(screen.getByRole('button', { name: /Second/i })).toBeTruthy();
60
+ expect(screen.queryByRole('button', { name: /Deny/i })).toBeFalsy();
61
+ });
62
+ it('should handle primary button click', () => __awaiter(void 0, void 0, void 0, function* () {
63
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onPrimaryAction: onPrimaryAction, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle }, body));
64
+ yield userEvent.click(screen.getByRole('button', { name: /Accept/i }));
65
+ expect(onPrimaryAction).toHaveBeenCalledTimes(1);
66
+ expect(handleModalToggle).toHaveBeenCalledTimes(1);
67
+ }));
68
+ it('should handle secondary button click', () => __awaiter(void 0, void 0, void 0, function* () {
69
+ render(React.createElement(TermsOfUse, { isModalOpen: true, onSecondaryAction: onSecondaryAction, handleModalToggle: handleModalToggle }, body));
70
+ yield userEvent.click(screen.getByRole('button', { name: /Decline/i }));
71
+ expect(onSecondaryAction).toHaveBeenCalledTimes(1);
72
+ expect(handleModalToggle).not.toHaveBeenCalled();
73
+ }));
74
+ });
@@ -0,0 +1,2 @@
1
+ export { default } from './TermsOfUse';
2
+ export * from './TermsOfUse';
@@ -0,0 +1,2 @@
1
+ export { default } from './TermsOfUse';
2
+ export * from './TermsOfUse';
@@ -24,6 +24,8 @@ export { default as ChatbotWelcomePrompt } from './ChatbotWelcomePrompt';
24
24
  export * from './ChatbotWelcomePrompt';
25
25
  export { default as CodeModal } from './CodeModal';
26
26
  export * from './CodeModal';
27
+ export { default as Compare } from './Compare';
28
+ export * from './Compare';
27
29
  export { default as FileDetails } from './FileDetails';
28
30
  export * from './FileDetails';
29
31
  export { default as FileDetailsLabel } from './FileDetailsLabel';
@@ -42,7 +44,11 @@ export { default as PreviewAttachment } from './PreviewAttachment';
42
44
  export * from './PreviewAttachment';
43
45
  export { default as ResponseActions } from './ResponseActions';
44
46
  export * from './ResponseActions';
47
+ export { default as Settings } from './Settings';
48
+ export * from './Settings';
45
49
  export { default as SourceDetailsMenuItem } from './SourceDetailsMenuItem';
46
50
  export * from './SourceDetailsMenuItem';
47
51
  export { default as SourcesCard } from './SourcesCard';
48
52
  export * from './SourcesCard';
53
+ export { default as TermsOfUse } from './TermsOfUse';
54
+ export * from './TermsOfUse';
package/dist/esm/index.js CHANGED
@@ -25,6 +25,8 @@ export { default as ChatbotWelcomePrompt } from './ChatbotWelcomePrompt';
25
25
  export * from './ChatbotWelcomePrompt';
26
26
  export { default as CodeModal } from './CodeModal';
27
27
  export * from './CodeModal';
28
+ export { default as Compare } from './Compare';
29
+ export * from './Compare';
28
30
  export { default as FileDetails } from './FileDetails';
29
31
  export * from './FileDetails';
30
32
  export { default as FileDetailsLabel } from './FileDetailsLabel';
@@ -43,7 +45,11 @@ export { default as PreviewAttachment } from './PreviewAttachment';
43
45
  export * from './PreviewAttachment';
44
46
  export { default as ResponseActions } from './ResponseActions';
45
47
  export * from './ResponseActions';
48
+ export { default as Settings } from './Settings';
49
+ export * from './Settings';
46
50
  export { default as SourceDetailsMenuItem } from './SourceDetailsMenuItem';
47
51
  export * from './SourceDetailsMenuItem';
48
52
  export { default as SourcesCard } from './SourcesCard';
49
53
  export * from './SourcesCard';
54
+ export { default as TermsOfUse } from './TermsOfUse';
55
+ export * from './TermsOfUse';
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../src/ChatbotContent/ChatbotContent.tsx","../src/ChatbotContent/index.ts","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx","../src/ChatbotConversationHistoryNav/index.ts","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.tsx","../src/ChatbotHeader/index.ts","../src/ChatbotModal/ChatbotModal.tsx","../src/ChatbotModal/index.ts","../src/ChatbotPopover/ChatbotPopover.tsx","../src/ChatbotPopover/index.ts","../src/ChatbotToggle/ChatbotToggle.test.tsx","../src/ChatbotToggle/ChatbotToggle.tsx","../src/ChatbotToggle/index.ts","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx","../src/ChatbotWelcomePrompt/index.ts","../src/CodeModal/CodeModal.tsx","../src/CodeModal/index.ts","../src/FileDetails/FileDetails.test.tsx","../src/FileDetails/FileDetails.tsx","../src/FileDetails/index.ts","../src/FileDetailsLabel/FileDetailsLabel.test.tsx","../src/FileDetailsLabel/FileDetailsLabel.tsx","../src/FileDetailsLabel/index.ts","../src/FileDropZone/FileDropZone.test.tsx","../src/FileDropZone/FileDropZone.tsx","../src/FileDropZone/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ListMessage/ListItemMessage.tsx","../src/Message/ListMessage/OrderedListMessage.tsx","../src/Message/ListMessage/UnorderedListMessage.tsx","../src/Message/TextMessage/TextMessage.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts"],"version":"5.6.3"}
1
+ {"root":["../src/index.ts","../src/AttachMenu/AttachMenu.tsx","../src/AttachMenu/index.ts","../src/AttachmentEdit/AttachmentEdit.tsx","../src/AttachmentEdit/index.ts","../src/Chatbot/Chatbot.tsx","../src/Chatbot/index.ts","../src/ChatbotAlert/ChatbotAlert.tsx","../src/ChatbotAlert/index.ts","../src/ChatbotContent/ChatbotContent.tsx","../src/ChatbotContent/index.ts","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryDropdown.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.test.tsx","../src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx","../src/ChatbotConversationHistoryNav/index.ts","../src/ChatbotFooter/ChatbotFooter.tsx","../src/ChatbotFooter/ChatbotFootnote.tsx","../src/ChatbotFooter/index.ts","../src/ChatbotHeader/ChatbotHeader.tsx","../src/ChatbotHeader/ChatbotHeaderActions.tsx","../src/ChatbotHeader/ChatbotHeaderCloseButton.tsx","../src/ChatbotHeader/ChatbotHeaderMain.tsx","../src/ChatbotHeader/ChatbotHeaderMenu.tsx","../src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx","../src/ChatbotHeader/ChatbotHeaderTitle.tsx","../src/ChatbotHeader/index.ts","../src/ChatbotModal/ChatbotModal.tsx","../src/ChatbotModal/index.ts","../src/ChatbotPopover/ChatbotPopover.tsx","../src/ChatbotPopover/index.ts","../src/ChatbotToggle/ChatbotToggle.test.tsx","../src/ChatbotToggle/ChatbotToggle.tsx","../src/ChatbotToggle/index.ts","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.test.tsx","../src/ChatbotWelcomePrompt/ChatbotWelcomePrompt.tsx","../src/ChatbotWelcomePrompt/index.ts","../src/CodeModal/CodeModal.tsx","../src/CodeModal/index.ts","../src/Compare/Compare.test.tsx","../src/Compare/Compare.tsx","../src/Compare/index.ts","../src/FileDetails/FileDetails.test.tsx","../src/FileDetails/FileDetails.tsx","../src/FileDetails/index.ts","../src/FileDetailsLabel/FileDetailsLabel.test.tsx","../src/FileDetailsLabel/FileDetailsLabel.tsx","../src/FileDetailsLabel/index.ts","../src/FileDropZone/FileDropZone.test.tsx","../src/FileDropZone/FileDropZone.tsx","../src/FileDropZone/index.ts","../src/LoadingMessage/LoadingMessage.test.tsx","../src/LoadingMessage/LoadingMessage.tsx","../src/LoadingMessage/index.ts","../src/Message/Message.test.tsx","../src/Message/Message.tsx","../src/Message/MessageLoading.tsx","../src/Message/index.ts","../src/Message/CodeBlockMessage/CodeBlockMessage.tsx","../src/Message/ListMessage/ListItemMessage.tsx","../src/Message/ListMessage/OrderedListMessage.tsx","../src/Message/ListMessage/UnorderedListMessage.tsx","../src/Message/QuickResponse/QuickResponse.tsx","../src/Message/QuickStarts/FallbackImg.tsx","../src/Message/QuickStarts/QuickStartTile.tsx","../src/Message/QuickStarts/QuickStartTileDescription.test.tsx","../src/Message/QuickStarts/QuickStartTileDescription.tsx","../src/Message/QuickStarts/QuickStartTileHeader.tsx","../src/Message/QuickStarts/monitor-sampleapp-quickstart-with-image.ts","../src/Message/QuickStarts/monitor-sampleapp-quickstart.ts","../src/Message/QuickStarts/types.ts","../src/Message/TextMessage/TextMessage.tsx","../src/MessageBar/AttachButton.test.tsx","../src/MessageBar/AttachButton.tsx","../src/MessageBar/MessageBar.test.tsx","../src/MessageBar/MessageBar.tsx","../src/MessageBar/MicrophoneButton.tsx","../src/MessageBar/SendButton.test.tsx","../src/MessageBar/SendButton.tsx","../src/MessageBar/StopButton.test.tsx","../src/MessageBar/StopButton.tsx","../src/MessageBar/index.ts","../src/MessageBox/JumpButton.test.tsx","../src/MessageBox/JumpButton.tsx","../src/MessageBox/MessageBox.tsx","../src/MessageBox/index.ts","../src/PreviewAttachment/PreviewAttachment.tsx","../src/PreviewAttachment/index.ts","../src/ResponseActions/ResponseActionButton.test.tsx","../src/ResponseActions/ResponseActionButton.tsx","../src/ResponseActions/ResponseActions.test.tsx","../src/ResponseActions/ResponseActions.tsx","../src/ResponseActions/index.ts","../src/Settings/SettingsForm.tsx","../src/Settings/index.ts","../src/SourceDetailsMenuItem/SourceDetailsMenuItem.tsx","../src/SourceDetailsMenuItem/index.ts","../src/SourcesCard/SourcesCard.test.tsx","../src/SourcesCard/SourcesCard.tsx","../src/SourcesCard/index.ts","../src/TermsOfUse/TermsOfUse.test.tsx","../src/TermsOfUse/TermsOfUse.tsx","../src/TermsOfUse/index.ts"],"version":"5.6.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/chatbot",
3
- "version": "2.2.0-prerelease.1",
3
+ "version": "2.2.0-prerelease.11",
4
4
  "description": "This library provides React components based on PatternFly 6 that can be used to build chatbots.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -31,15 +31,13 @@
31
31
  "tag": "prerelease"
32
32
  },
33
33
  "dependencies": {
34
- "@patternfly/react-core": "^6.0.0",
35
- "@patternfly/react-code-editor": "^6.0.0",
36
- "@patternfly/react-icons": "^6.0.0",
34
+ "@patternfly/react-core": "^6.1.0",
35
+ "@patternfly/react-code-editor": "^6.1.0",
36
+ "@patternfly/react-icons": "^6.1.0",
37
37
  "clsx": "^2.1.0",
38
38
  "framer-motion": "^11.3.28",
39
- "react-jss": "^10.10.0",
40
39
  "react-markdown": "^9.0.1",
41
40
  "react-syntax-highlighter": "^15.5.0",
42
- "react-textarea-auto-witdth-height": "^1.0.3",
43
41
  "remark-gfm": "^4.0.0",
44
42
  "path-browserify": "^1.0.1"
45
43
  },
@@ -48,18 +46,14 @@
48
46
  "react-dom": "^17 || ^18"
49
47
  },
50
48
  "devDependencies": {
51
- "@patternfly/documentation-framework": "^6.0.6",
52
- "@patternfly/patternfly": "^6.0.0",
49
+ "@patternfly/documentation-framework": "^6.5.0",
50
+ "@patternfly/patternfly": "^6.1.0",
53
51
  "@patternfly/patternfly-a11y": "^5.0.0",
54
- "@patternfly/react-table": "^6.0.0",
52
+ "@patternfly/react-table": "^6.1.0",
55
53
  "@types/dom-speech-recognition": "^0.0.4",
56
54
  "@types/react": "^18.2.61",
57
- "@types/react-dom": "^18.2.19",
58
- "@types/react-router-dom": "^5.3.3",
59
55
  "react": "^18.2.0",
60
56
  "react-dom": "^18.2.0",
61
- "react-router": "^6.22.2",
62
- "react-router-dom": "^6.22.2",
63
57
  "rimraf": "^2.7.1",
64
58
  "typescript": "^5.3.3",
65
59
  "@octokit/rest": "^18.0.0",
@@ -15,16 +15,20 @@ export const CustomActionExample: React.FunctionComponent = () => (
15
15
  actions={{
16
16
  regenerate: {
17
17
  ariaLabel: 'Regenerate',
18
+ clickedAriaLabel: 'Regenerated',
18
19
  // eslint-disable-next-line no-console
19
20
  onClick: () => console.log('Clicked regenerate'),
20
21
  tooltipContent: 'Regenerate',
22
+ clickedTooltipContent: 'Regenerated',
21
23
  icon: <RedoIcon />
22
24
  },
23
25
  download: {
24
26
  ariaLabel: 'Download',
27
+ clickedAriaLabel: 'Downloaded',
25
28
  // eslint-disable-next-line no-console
26
29
  onClick: () => console.log('Clicked download'),
27
30
  tooltipContent: 'Download',
31
+ clickedTooltipContent: 'Downloaded',
28
32
  icon: <DownloadIcon />
29
33
  },
30
34
  info: {
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import Message from '@patternfly/chatbot/dist/dynamic/Message';
3
+ import patternflyAvatar from './patternfly_avatar.jpg';
4
+ import { explorePipelinesQuickStart } from './explore-pipeline-quickstart.ts';
5
+ import { monitorSampleAppQuickStart } from '@patternfly/chatbot/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts';
6
+ import { QuickStart } from '@patternfly/chatbot/dist/esm/Message/QuickStarts/types';
7
+
8
+ export const MessageWithQuickStartExample: React.FunctionComponent = () => (
9
+ <>
10
+ <Message
11
+ name="Bot"
12
+ role="bot"
13
+ avatar={patternflyAvatar}
14
+ content="Text-based bot message with a quick start tile."
15
+ quickStarts={{
16
+ quickStart: explorePipelinesQuickStart as QuickStart,
17
+ onSelectQuickStart: (id) => alert(id)
18
+ }}
19
+ />
20
+ <Message
21
+ name="Bot"
22
+ role="bot"
23
+ avatar={patternflyAvatar}
24
+ content="Text-based bot message with a quick start tile that includes prerequisites and a default icon."
25
+ quickStarts={{
26
+ quickStart: monitorSampleAppQuickStart,
27
+ onSelectQuickStart: (id) => alert(id)
28
+ }}
29
+ />
30
+ </>
31
+ );
@@ -39,7 +39,8 @@ import FileDetailsLabel from '@patternfly/chatbot/dist/dynamic/FileDetailsLabel'
39
39
  import FileDropZone from '@patternfly/chatbot/dist/dynamic/FileDropZone';
40
40
  import { PreviewAttachment } from '@patternfly/chatbot/dist/dynamic/PreviewAttachment';
41
41
  import ChatbotAlert from '@patternfly/chatbot/dist/dynamic/ChatbotAlert';
42
-
42
+ import { explorePipelinesQuickStart } from './explore-pipeline-quickstart.ts';
43
+ import { monitorSampleAppQuickStart } from '@patternfly/chatbot/src/Message/QuickStarts/monitor-sampleapp-quickstart.ts';
43
44
  import userAvatar from './user_avatar.svg';
44
45
  import squareImg from './PF-social-color-square.svg';
45
46
 
@@ -63,7 +64,7 @@ You can further customize the avatar by applying an additional class or passing
63
64
 
64
65
  ```
65
66
 
66
- ### Messages actions
67
+ ### Message actions
67
68
 
68
69
  You can add actions to a message, to allow users to interact with the message content. These actions can include:
69
70
 
@@ -79,7 +80,18 @@ You can add actions to a message, to allow users to interact with the message co
79
80
 
80
81
  ### Custom message actions
81
82
 
82
- Beyond the standard message actions (positive, negative, copy, share, or listen), you can add custom actions to a bot message by passing an `actions` object to the `<Message>` component. This object can contain the following customizations: `ariaLabel`, `onClick`, `className`, `isDisabled`, `tooltipContent`, `tooltipProps`, and `icon`.
83
+ Beyond the standard message actions (good response, bad response, copy, share, or listen), you can add custom actions to a bot message by passing an `actions` object to the `<Message>` component. This object can contain the following customizations:
84
+
85
+ - `ariaLabel`
86
+ - `onClick`
87
+ - `className`
88
+ - `isDisabled`
89
+ - `tooltipContent`
90
+ - `tooltipContent`
91
+ - `tooltipProps`
92
+ - `icon`
93
+
94
+ You can apply a `clickedAriaLabel` and `clickedTooltipContent` once a button is clicked. If either of these props are omitted, their values will default to the `ariaLabel` or `tooltipContent` supplied.
83
95
 
84
96
  ```js file="./MessageWithCustomResponseActions.tsx"
85
97
 
@@ -87,7 +99,7 @@ Beyond the standard message actions (positive, negative, copy, share, or listen)
87
99
 
88
100
  ### Messages with quick responses
89
101
 
90
- You can offer convenient, clickable responses to messages in the form of quick actions. Quick actions are [PatternFly labels](/components/label/) in a label group, configured to display up to 5 visible labels.
102
+ You can offer convenient, clickable responses to messages in the form of quick actions. Quick actions are [PatternFly labels](/components/label/) in a label group, configured to display up to 5 visible labels. Only 1 response can be selected at a time.
91
103
 
92
104
  To add quick actions, pass `quickResponses` to `<Message>`. This can be overridden by passing additional `<LabelGroup>` props to `quickResponseContainerProps`, or additional `<Label>` props to `quickResponses`.
93
105
 
@@ -105,6 +117,16 @@ The API for a source requires a link at minimum, but we strongly recommend provi
105
117
 
106
118
  ```
107
119
 
120
+ ### Messages with quick start tiles
121
+
122
+ [Quick start](/extensions/quick-starts/) tiles can be added to messages via the `quickStarts` prop. Users can initiate the quick start from a link within the message tile.
123
+
124
+ The quick start tile displayed below the message is based on the tile included in the [PatternFly quick starts extension](https://github.com/patternfly/patternfly-quickstarts), but with slightly more limited functionality. For example, it does not track the state of the extension. However, it supports an additional `onSelectQuickStart` prop, so that the name of the quick start can be captured on click. This can be used to trigger other behavior in your application, such as launching that quick start in your main UI.
125
+
126
+ ```js file="./MessageWithQuickStart.tsx"
127
+
128
+ ```
129
+
108
130
  ### User messages
109
131
 
110
132
  Messages from users have a different background color to differentiate them from bot messages. You can also display a custom avatar that is uploaded by the user. You can further customize the avatar by applying an additional class or passing [PatternFly avatar props](/components/avatar) to the `<Message>` component via `avatarProps`.
@@ -0,0 +1,65 @@
1
+ import userAvatar from './user_avatar.svg';
2
+
3
+ export const explorePipelinesQuickStart = {
4
+ apiVersion: 'console.openshift.io/v1',
5
+ kind: 'QuickStarts',
6
+ metadata: {
7
+ name: 'explore-pipelines'
8
+ },
9
+ spec: {
10
+ version: 4.7,
11
+ displayName: `Installing the Pipelines Operator`,
12
+ durationMinutes: 10,
13
+ icon: userAvatar,
14
+ description: `Install the OpenShift® Pipelines Operator to build Pipelines using Tekton.`,
15
+ prerequisites: [''],
16
+ introduction: `OpenShift® Pipelines is a cloud-native, continuous integration and continuous delivery (CI/CD) solution based on Kubernetes resources. It uses Tekton building blocks to automate deployments across multiple Kubernetes distributions by abstracting away the underlying implementation details.
17
+ * OpenShift Pipelines is a serverless CI/CD system that runs pipelines with all the required dependencies in isolated containers.
18
+ * They are designed for decentralized teams that work on a microservice-based architecture.
19
+ * They are defined using standard Custom Resource Definitions making them extensible and easy to integrate with the existing Kubernetes tools. This enables you to scale on-demand.
20
+ * You can use OpenShift Pipelines to build images with Kubernetes tools such as Source-to-Image (S2I), Buildah, Buildpacks, and Kaniko that are portable across any Kubernetes platform.
21
+ * You can use the Developer perspective to create and manage pipelines and view logs in your namespaces.
22
+
23
+ To start using Pipelines, install the OpenShift® Pipelines Operator on your cluster.`,
24
+ tasks: [
25
+ {
26
+ title: `Installing the OpenShift Pipelines Operator`,
27
+ description: `### To install the OpenShift Pipelines Operator:
28
+
29
+ 1. From the **Administrator** perspective in the console navigation panel, click **Operators > OperatorHub**.
30
+ 2. In the **Filter by keyword** field, type \`OpenShift Pipelines Operator\`.
31
+ 3. If the tile has an Installed label, the Operator is already installed. Proceed to the next quick start to create a Pipeline.
32
+ 4. Click the **tile** to open the Operator details.
33
+ 5. At the top of the OpenShift Pipelines Operator panel that opens, click **Install**.
34
+ 6. Fill out the Operator subscription form by selecting the channel that matches your OpenShift cluster, and then click **Install**.
35
+ 7. On the **Installed Operators** page, wait for the OpenShift Pipelines Operator's status to change from **Installing** to **Succeeded**. `,
36
+ review: {
37
+ instructions: `#### To verify that the OpenShift Pipelines Operator is installed:
38
+ 1. From the **Operators** section of the navigation, go to the **Installed Operators** page.
39
+ 2. Verify that the **OpenShift Pipelines Operator** appears in the list of Operators.
40
+
41
+ In the status column, is the status of the OpenShift Pipelines Operator **Succeeded**?`,
42
+ failedTaskHelp: `This task isn’t verified yet. Try the task again, or [read more](https://docs.openshift.com/container-platform/4.6/pipelines/installing-pipelines.html#op-installing-pipelines-operator-in-web-console_installing-pipelines) about this topic.`
43
+ },
44
+ summary: {
45
+ success: `You have installed the Pipelines Operator!`,
46
+ failed: `Try the steps again.`
47
+ }
48
+ }
49
+ ],
50
+ conclusion: `You successfully installed the OpenShift Pipelines Operator! If you want to learn how to deploy an application and associate a Pipeline with it, take the Creating a Pipeline quick start.`,
51
+ nextQuickStart: [`install-app-and-associate-pipeline`],
52
+ accessReviewResources: [
53
+ {
54
+ group: 'operators.coreos.com',
55
+ resource: 'operatorgroups',
56
+ verb: 'list'
57
+ },
58
+ {
59
+ group: 'packages.operators.coreos.com',
60
+ resource: 'packagemanifests',
61
+ verb: 'list'
62
+ }
63
+ ]
64
+ }
65
+ };