@yext/chat-ui-react 0.3.1 → 0.4.0

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 (105) hide show
  1. package/THIRD-PARTY-NOTICES +45 -4
  2. package/lib/bundle-no-resets.css +1 -1
  3. package/lib/bundle.css +1 -1
  4. package/lib/commonjs/components/ChatInput.d.ts +2 -1
  5. package/lib/commonjs/components/ChatInput.d.ts.map +1 -1
  6. package/lib/commonjs/components/ChatInput.js +2 -2
  7. package/lib/commonjs/components/ChatInput.js.map +1 -1
  8. package/lib/commonjs/components/ChatPanel.d.ts.map +1 -1
  9. package/lib/commonjs/components/ChatPanel.js +9 -1
  10. package/lib/commonjs/components/ChatPanel.js.map +1 -1
  11. package/lib/commonjs/components/ChatPopUp.d.ts.map +1 -1
  12. package/lib/commonjs/components/ChatPopUp.js +8 -1
  13. package/lib/commonjs/components/ChatPopUp.js.map +1 -1
  14. package/lib/commonjs/components/FeedbackButtons.d.ts +34 -0
  15. package/lib/commonjs/components/FeedbackButtons.d.ts.map +1 -0
  16. package/lib/commonjs/components/FeedbackButtons.js +53 -0
  17. package/lib/commonjs/components/FeedbackButtons.js.map +1 -0
  18. package/lib/commonjs/components/Markdown.d.ts +9 -2
  19. package/lib/commonjs/components/Markdown.d.ts.map +1 -1
  20. package/lib/commonjs/components/Markdown.js +25 -3
  21. package/lib/commonjs/components/Markdown.js.map +1 -1
  22. package/lib/commonjs/components/MessageBubble.d.ts +14 -4
  23. package/lib/commonjs/components/MessageBubble.d.ts.map +1 -1
  24. package/lib/commonjs/components/MessageBubble.js +16 -8
  25. package/lib/commonjs/components/MessageBubble.js.map +1 -1
  26. package/lib/commonjs/components/index.d.ts +1 -0
  27. package/lib/commonjs/components/index.d.ts.map +1 -1
  28. package/lib/commonjs/components/index.js.map +1 -1
  29. package/lib/commonjs/icons/ThumbsDown.d.ts +5 -0
  30. package/lib/commonjs/icons/ThumbsDown.d.ts.map +1 -0
  31. package/lib/commonjs/icons/ThumbsDown.js +9 -0
  32. package/lib/commonjs/icons/ThumbsDown.js.map +1 -0
  33. package/lib/commonjs/icons/ThumbsDownFill.d.ts +5 -0
  34. package/lib/commonjs/icons/ThumbsDownFill.d.ts.map +1 -0
  35. package/lib/commonjs/icons/ThumbsDownFill.js +9 -0
  36. package/lib/commonjs/icons/ThumbsDownFill.js.map +1 -0
  37. package/lib/commonjs/icons/ThumbsUp.d.ts +5 -0
  38. package/lib/commonjs/icons/ThumbsUp.d.ts.map +1 -0
  39. package/lib/commonjs/icons/ThumbsUp.js +9 -0
  40. package/lib/commonjs/icons/ThumbsUp.js.map +1 -0
  41. package/lib/commonjs/icons/ThumbsUpFill.d.ts +5 -0
  42. package/lib/commonjs/icons/ThumbsUpFill.d.ts.map +1 -0
  43. package/lib/commonjs/icons/ThumbsUpFill.js +9 -0
  44. package/lib/commonjs/icons/ThumbsUpFill.js.map +1 -0
  45. package/lib/commonjs/utils/withStylelessCssClasses.d.ts +1 -1
  46. package/lib/commonjs/utils/withStylelessCssClasses.d.ts.map +1 -1
  47. package/lib/commonjs/utils/withStylelessCssClasses.js.map +1 -1
  48. package/lib/esm/components/ChatInput.d.ts +2 -1
  49. package/lib/esm/components/ChatInput.d.ts.map +1 -1
  50. package/lib/esm/components/ChatInput.js +2 -2
  51. package/lib/esm/components/ChatInput.js.map +1 -1
  52. package/lib/esm/components/ChatPanel.d.ts.map +1 -1
  53. package/lib/esm/components/ChatPanel.js +9 -1
  54. package/lib/esm/components/ChatPanel.js.map +1 -1
  55. package/lib/esm/components/ChatPopUp.d.ts.map +1 -1
  56. package/lib/esm/components/ChatPopUp.js +9 -2
  57. package/lib/esm/components/ChatPopUp.js.map +1 -1
  58. package/lib/esm/components/FeedbackButtons.d.ts +34 -0
  59. package/lib/esm/components/FeedbackButtons.d.ts.map +1 -0
  60. package/lib/esm/components/FeedbackButtons.js +49 -0
  61. package/lib/esm/components/FeedbackButtons.js.map +1 -0
  62. package/lib/esm/components/Markdown.d.ts +9 -2
  63. package/lib/esm/components/Markdown.d.ts.map +1 -1
  64. package/lib/esm/components/Markdown.js +25 -3
  65. package/lib/esm/components/Markdown.js.map +1 -1
  66. package/lib/esm/components/MessageBubble.d.ts +14 -4
  67. package/lib/esm/components/MessageBubble.d.ts.map +1 -1
  68. package/lib/esm/components/MessageBubble.js +16 -8
  69. package/lib/esm/components/MessageBubble.js.map +1 -1
  70. package/lib/esm/components/index.d.ts +1 -0
  71. package/lib/esm/components/index.d.ts.map +1 -1
  72. package/lib/esm/components/index.js.map +1 -1
  73. package/lib/esm/icons/ThumbsDown.d.ts +5 -0
  74. package/lib/esm/icons/ThumbsDown.d.ts.map +1 -0
  75. package/lib/esm/icons/ThumbsDown.js +5 -0
  76. package/lib/esm/icons/ThumbsDown.js.map +1 -0
  77. package/lib/esm/icons/ThumbsDownFill.d.ts +5 -0
  78. package/lib/esm/icons/ThumbsDownFill.d.ts.map +1 -0
  79. package/lib/esm/icons/ThumbsDownFill.js +5 -0
  80. package/lib/esm/icons/ThumbsDownFill.js.map +1 -0
  81. package/lib/esm/icons/ThumbsUp.d.ts +5 -0
  82. package/lib/esm/icons/ThumbsUp.d.ts.map +1 -0
  83. package/lib/esm/icons/ThumbsUp.js +5 -0
  84. package/lib/esm/icons/ThumbsUp.js.map +1 -0
  85. package/lib/esm/icons/ThumbsUpFill.d.ts +5 -0
  86. package/lib/esm/icons/ThumbsUpFill.d.ts.map +1 -0
  87. package/lib/esm/icons/ThumbsUpFill.js +5 -0
  88. package/lib/esm/icons/ThumbsUpFill.js.map +1 -0
  89. package/lib/esm/index.d.ts +30 -5
  90. package/lib/esm/utils/withStylelessCssClasses.d.ts +1 -1
  91. package/lib/esm/utils/withStylelessCssClasses.d.ts.map +1 -1
  92. package/lib/esm/utils/withStylelessCssClasses.js.map +1 -1
  93. package/package.json +2 -2
  94. package/src/components/ChatInput.tsx +4 -3
  95. package/src/components/ChatPanel.tsx +10 -1
  96. package/src/components/ChatPopUp.tsx +11 -2
  97. package/src/components/FeedbackButtons.tsx +107 -0
  98. package/src/components/Markdown.tsx +45 -3
  99. package/src/components/MessageBubble.tsx +47 -19
  100. package/src/components/index.ts +2 -0
  101. package/src/icons/ThumbsDown.tsx +21 -0
  102. package/src/icons/ThumbsDownFill.tsx +21 -0
  103. package/src/icons/ThumbsUp.tsx +21 -0
  104. package/src/icons/ThumbsUpFill.tsx +21 -0
  105. package/src/utils/withStylelessCssClasses.ts +1 -1
@@ -3,6 +3,8 @@ import ReactMarkdown from "react-markdown";
3
3
  import remarkGfm from "remark-gfm";
4
4
  import rehypeRaw from "rehype-raw";
5
5
  import rehypeSanitize from "rehype-sanitize";
6
+ import { useMemo } from "react";
7
+ import { useChatActions } from "@yext/chat-headless-react";
6
8
  // The Remark and Rehype plugins to use in conjunction with ReactMarkdown.
7
9
  const unifiedPlugins = {
8
10
  remark: [
@@ -17,9 +19,29 @@ const unifiedPlugins = {
17
19
  * Renders Github-Flavored Markdown from the Knowledge Graph. This Markdown can include
18
20
  * arbitrary HTML. Any HTML will be sanitized according to Rehype's default Schema.
19
21
  *
20
- * @public
22
+ * @remarks
23
+ * A link click will send a CHAT_LINK_CLICK analytics event
24
+ *
25
+ * @internal
21
26
  */
22
- export function Markdown({ content }) {
23
- return (_jsx(ReactMarkdown, { children: content, remarkPlugins: unifiedPlugins.remark, rehypePlugins: unifiedPlugins.rehype }));
27
+ export function Markdown({ content, responseId, className }) {
28
+ const action = useChatActions();
29
+ const components = useMemo(() => {
30
+ const createClickHandlerFn = (href) => () => {
31
+ action.report({
32
+ action: "CHAT_LINK_CLICK",
33
+ destinationUrl: href,
34
+ chat: {
35
+ responseId,
36
+ },
37
+ });
38
+ };
39
+ return {
40
+ a: ({ node: _, children, ...props }) => {
41
+ return (_jsx("a", { ...props, onClick: createClickHandlerFn(props.href), target: "_blank", rel: "noopener noreferrer", className: "cursor-pointer", children: children }));
42
+ },
43
+ };
44
+ }, [action, responseId]);
45
+ return (_jsx(ReactMarkdown, { className: className, children: content, remarkPlugins: unifiedPlugins.remark, rehypePlugins: unifiedPlugins.rehype, components: components }));
24
46
  }
25
47
  //# sourceMappingURL=Markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/components/Markdown.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAgC,MAAM,gBAAgB,CAAC;AAC9D,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C,0EAA0E;AAC1E,MAAM,cAAc,GAAsD;IACxE,MAAM,EAAE;QACN,SAAS,EAAE,kCAAkC;KAC9C;IACD,MAAM,EAAE;QACN,SAAS;QACT,cAAc,EAAE,0BAA0B;KAC3C;CACF,CAAC;AAOF;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAAiB;IACjD,OAAO,CACL,KAAC,aAAa,IACZ,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,cAAc,CAAC,MAAM,EACpC,aAAa,EAAE,cAAc,CAAC,MAAM,GACpC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/components/Markdown.tsx"],"names":[],"mappings":";AAAA,OAAO,aAGN,MAAM,gBAAgB,CAAC;AACxB,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,0EAA0E;AAC1E,MAAM,cAAc,GAAsD;IACxE,MAAM,EAAE;QACN,SAAS,EAAE,kCAAkC;KAC9C;IACD,MAAM,EAAE;QACN,SAAS;QACT,cAAc,EAAE,0BAA0B;KAC3C;CACF,CAAC;AAWF;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAiB;IACxE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,UAAU,GAAuC,OAAO,CAAC,GAAG,EAAE;QAClE,MAAM,oBAAoB,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,GAAG,EAAE;YACnD,MAAM,CAAC,MAAM,CAAC;gBACZ,MAAM,EAAE,iBAAiB;gBACzB,cAAc,EAAE,IAAI;gBACpB,IAAI,EAAE;oBACJ,UAAU;iBACX;aACF,CAAC,CAAC;QACL,CAAC,CAAC;QACF,OAAO;YACL,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBACrC,OAAO,CACL,eACM,KAAK,EACT,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,EACzC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,gBAAgB,YAEzB,QAAQ,GACP,CACL,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,KAAC,aAAa,IACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,cAAc,CAAC,MAAM,EACpC,aAAa,EAAE,cAAc,CAAC,MAAM,EACpC,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Message } from "@yext/chat-headless-react";
2
+ import { FeedbackButtonsCssClasses } from "./FeedbackButtons";
2
3
  /**
3
4
  * The CSS class interface for the {@link MessageBubble} component.
4
5
  *
@@ -9,12 +10,16 @@ export interface MessageBubbleCssClasses {
9
10
  subContainer?: string;
10
11
  subContainer__bot?: string;
11
12
  subContainer__user?: string;
12
- message?: string;
13
- message__bot?: string;
14
- message__user?: string;
13
+ bubble?: string;
14
+ bubble__bot?: string;
15
+ bubble__user?: string;
16
+ text?: string;
17
+ text__bot?: string;
18
+ text__user?: string;
15
19
  timestamp?: string;
16
20
  timestamp__bot?: string;
17
21
  timestamp__user?: string;
22
+ feedbackButtonsCssClasses?: FeedbackButtonsCssClasses;
18
23
  }
19
24
  /**
20
25
  * The props for the {@link MessageBubble} component.
@@ -24,6 +29,11 @@ export interface MessageBubbleCssClasses {
24
29
  export interface MessageBubbleProps {
25
30
  /** The message to display. */
26
31
  message: Message;
32
+ /**
33
+ * Whether to show the feedback buttons on the message bubble.
34
+ * Defaults to true.
35
+ */
36
+ showFeedbackButtons?: boolean;
27
37
  /**
28
38
  * Whether to show the timestamp of the message with the message bubble.
29
39
  * Defaults to true.
@@ -45,5 +55,5 @@ export interface MessageBubbleProps {
45
55
  *
46
56
  * @param props - {@link MessageBubbleProps}
47
57
  */
48
- export declare function MessageBubble({ message, showTimestamp, customCssClasses, formatTimestamp, }: MessageBubbleProps): import("react/jsx-runtime").JSX.Element;
58
+ export declare function MessageBubble({ message, showFeedbackButtons, showTimestamp, customCssClasses, formatTimestamp, }: MessageBubbleProps): import("react/jsx-runtime").JSX.Element;
49
59
  //# sourceMappingURL=MessageBubble.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageBubble.d.ts","sourceRoot":"","sources":["../../../src/components/MessageBubble.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,2BAA2B,CAAC;AAMnE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAsBD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,aAAoB,EACpB,gBAAgB,EAChB,eAAwC,GACzC,EAAE,kBAAkB,2CAoCpB"}
1
+ {"version":3,"file":"MessageBubble.d.ts","sourceRoot":"","sources":["../../../src/components/MessageBubble.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,2BAA2B,CAAC;AAKnE,OAAO,EAAmB,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE/E;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;CACvD;AAuBD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,mBAA0B,EAC1B,aAAoB,EACpB,gBAAgB,EAChB,eAAwC,GACzC,EAAE,kBAAkB,2CAoDpB"}
@@ -4,17 +4,22 @@ import { useComposedCssClasses } from "../hooks";
4
4
  import { twMerge } from "tailwind-merge";
5
5
  import { Markdown } from "./Markdown";
6
6
  import { withStylelessCssClasses } from "../utils/withStylelessCssClasses";
7
+ import { FeedbackButtons } from "./FeedbackButtons";
7
8
  const builtInCssClasses = withStylelessCssClasses("MessageBubble", {
8
9
  topContainer: "w-full animate-fade-in @container",
9
10
  subContainer: "flex flex-col @lg:flex-row @lg:items-center @lg:gap-x-2 @lg:m-1",
10
11
  subContainer__bot: "",
11
12
  subContainer__user: "@lg:flex-row-reverse",
12
- message: "peer rounded-2xl text-[13px] @[480px]:text-base p-4 w-fit max-w-[80%] prose overflow-x-auto",
13
- message__bot: "text-slate-900 bg-gradient-to-tr from-slate-50 to-slate-100",
14
- message__user: "ml-auto @lg:ml-0 text-white bg-gradient-to-tr from-blue-600 to-blue-700",
13
+ bubble: "relative group peer w-fit max-w-[80%] rounded-2xl p-4",
14
+ bubble__bot: "bg-gradient-to-tr from-slate-50 to-slate-100",
15
+ bubble__user: "ml-auto @lg:ml-0 bg-gradient-to-tr from-blue-600 to-blue-700 text-white",
16
+ text: "text-[13px] @[480px]:text-base prose overflow-x-auto",
17
+ text__bot: "text-slate-900",
18
+ text__user: "text-white",
15
19
  timestamp: "w-fit my-0.5 ml-4 @lg:ml-0 text-slate-400 text-[10px] @[480px]:text-[13px] opacity-0 peer-hover:opacity-100 duration-200 whitespace-pre-wrap",
16
20
  timestamp__bot: "",
17
21
  timestamp__user: "ml-auto",
22
+ feedbackButtonsCssClasses: {},
18
23
  });
19
24
  /**
20
25
  * A component that displays the provided message.
@@ -23,18 +28,21 @@ const builtInCssClasses = withStylelessCssClasses("MessageBubble", {
23
28
  *
24
29
  * @param props - {@link MessageBubbleProps}
25
30
  */
26
- export function MessageBubble({ message, showTimestamp = true, customCssClasses, formatTimestamp = defaultFormatTimestamp, }) {
31
+ export function MessageBubble({ message, showFeedbackButtons = true, showTimestamp = true, customCssClasses, formatTimestamp = defaultFormatTimestamp, }) {
27
32
  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);
28
- const messageCssClasses = twMerge(cssClasses.message, message.source === MessageSource.USER
29
- ? cssClasses.message__user
30
- : cssClasses.message__bot);
33
+ const bubbleCssClasses = twMerge(cssClasses.bubble, message.source === MessageSource.USER
34
+ ? cssClasses.bubble__user
35
+ : cssClasses.bubble__bot);
36
+ const textCssClasses = twMerge(cssClasses.text, message.source === MessageSource.USER
37
+ ? cssClasses.text__user
38
+ : cssClasses.text__bot);
31
39
  const subContainerCssClasses = twMerge(cssClasses.subContainer, message.source === MessageSource.USER
32
40
  ? cssClasses.subContainer__user
33
41
  : cssClasses.subContainer__bot);
34
42
  const timestampCssClasses = twMerge(cssClasses.timestamp, message.source === MessageSource.USER
35
43
  ? cssClasses.timestamp__user
36
44
  : cssClasses.timestamp__bot);
37
- return (_jsx("div", { className: cssClasses.topContainer, children: _jsxs("div", { className: subContainerCssClasses, children: [_jsx("div", { className: messageCssClasses, children: _jsx(Markdown, { content: message.text }) }), showTimestamp && (_jsx("div", { className: timestampCssClasses, children: message.timestamp ? formatTimestamp(message.timestamp) : " " }))] }) }));
45
+ return (_jsx("div", { className: cssClasses.topContainer, children: _jsxs("div", { className: subContainerCssClasses, children: [_jsxs("div", { className: bubbleCssClasses, children: [showFeedbackButtons && message.source === MessageSource.BOT && (_jsx(FeedbackButtons, { customCssClasses: cssClasses.feedbackButtonsCssClasses, responseId: message.responseId })), _jsx(Markdown, { content: message.text, responseId: message.responseId, className: textCssClasses })] }), showTimestamp && (_jsx("div", { className: timestampCssClasses, children: message.timestamp ? formatTimestamp(message.timestamp) : " " }))] }) }));
38
46
  }
39
47
  /**
40
48
  * Formats message's timestamp from "2023-05-18T19:33:34.553Z" to "7:33 PM"
@@ -1 +1 @@
1
- {"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../../src/components/MessageBubble.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAW,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAoB3E,MAAM,iBAAiB,GAA4B,uBAAuB,CACxE,eAAe,EACf;IACE,YAAY,EAAE,mCAAmC;IACjD,YAAY,EACV,iEAAiE;IACnE,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,sBAAsB;IAC1C,OAAO,EACL,6FAA6F;IAC/F,YAAY,EAAE,6DAA6D;IAC3E,aAAa,EACX,yEAAyE;IAC3E,SAAS,EACP,8IAA8I;IAChJ,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,SAAS;CAC3B,CACF,CAAC;AAyBF;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,aAAa,GAAG,IAAI,EACpB,gBAAgB,EAChB,eAAe,GAAG,sBAAsB,GACrB;IACnB,MAAM,UAAU,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IAC9E,MAAM,iBAAiB,GAAG,OAAO,CAC/B,UAAU,CAAC,OAAO,EAClB,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,IAAI;QACnC,CAAC,CAAC,UAAU,CAAC,aAAa;QAC1B,CAAC,CAAC,UAAU,CAAC,YAAY,CAC5B,CAAC;IACF,MAAM,sBAAsB,GAAG,OAAO,CACpC,UAAU,CAAC,YAAY,EACvB,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,IAAI;QACnC,CAAC,CAAC,UAAU,CAAC,kBAAkB;QAC/B,CAAC,CAAC,UAAU,CAAC,iBAAiB,CACjC,CAAC;IACF,MAAM,mBAAmB,GAAG,OAAO,CACjC,UAAU,CAAC,SAAS,EACpB,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,IAAI;QACnC,CAAC,CAAC,UAAU,CAAC,eAAe;QAC5B,CAAC,CAAC,UAAU,CAAC,cAAc,CAC9B,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAE,UAAU,CAAC,YAAY,YACrC,eAAK,SAAS,EAAE,sBAAsB,aACpC,cAAK,SAAS,EAAE,iBAAiB,YAC/B,KAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,CAAC,IAAI,GAAI,GAC/B,EAEL,aAAa,IAAI,CAChB,cAAK,SAAS,EAAE,mBAAmB,YAChC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,GACzD,CACP,IACG,GACF,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;QACnD,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../../src/components/MessageBubble.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export { ChatHeader } from "./ChatHeader";
4
4
  export type { ChatHeaderCssClasses, ChatHeaderProps } from "./ChatHeader";
5
5
  export { MessageBubble } from "./MessageBubble";
6
6
  export type { MessageBubbleCssClasses, MessageBubbleProps, } from "./MessageBubble";
7
+ export type { FeedbackButtonsCssClasses } from "./FeedbackButtons";
7
8
  export { ChatPanel } from "./ChatPanel";
8
9
  export type { ChatPanelCssClasses, ChatPanelProps } from "./ChatPanel";
9
10
  export { ChatPopUp } from "./ChatPopUp";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare function ThumbsDownIcon({ className, }: {
3
+ className?: string;
4
+ }): JSX.Element;
5
+ //# sourceMappingURL=ThumbsDown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsDown.d.ts","sourceRoot":"","sources":["../../../src/icons/ThumbsDown.tsx"],"names":[],"mappings":";AAAA,wBAAgB,cAAc,CAAC,EAC7B,SAAS,GACV,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,GAAG,CAAC,OAAO,CAgBd"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function ThumbsDownIcon({ className, }) {
3
+ return (_jsx("svg", { width: "100%", height: "100%", viewBox: "0 0 20 20", stroke: "currentColor", className: className, xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M5 6.09088C5.13887 5.73089 5.65964 5.14181 6.9789 4.48727C6.9789 4.48727 7.63854 4.12727 8.61063 4.02909C8.61063 4.02909 9.68687 3.96364 10.6242 4.02909C10.6242 4.02909 12.2907 3.96364 12.3601 5.69816C12.3601 5.69816 13.4711 6.25452 13.1934 7.49814C13.1934 7.49814 14.4779 8.15268 13.9919 9.49448C13.9919 9.49448 14.9639 9.85447 14.9987 10.9672C14.9987 10.9672 15.1028 12.2763 13.4711 12.5708H10.3465C10.3465 12.5708 10.8673 13.6835 10.8673 14.4035C10.8673 14.4035 10.8673 16.2362 8.68007 15.9744C8.68007 15.9744 7.84684 15.8762 7.49967 14.7308C7.49967 14.7308 7.01362 13.3563 6.45814 12.8326C6.45814 12.8326 5.69435 12.0472 5.20831 11.6545C5.20831 11.6545 4.82641 11.2945 5.17359 10.9672C5.17359 10.9672 5.48605 10.7381 5.76379 10.9672C6.11096 11.2945 7.11777 12.2108 7.11777 12.2108C7.11777 12.2108 7.81212 12.8981 8.02043 13.4872L8.40233 14.5017C8.40233 14.5017 8.50648 15.2871 9.3397 15.0908C9.3397 15.0908 10.0688 14.9926 9.96462 14.2071C9.96462 14.2071 9.72159 13.2581 9.54801 12.8981C9.54801 12.8981 9.37442 12.5708 9.30498 12.3744C9.30498 12.3744 9.13139 12.1781 9.23555 11.949C9.23555 11.949 9.27026 11.6217 9.79103 11.6872H13.2975C13.2975 11.6872 14.339 11.5563 14.0266 10.6399C14.0266 10.6399 13.8877 10.2799 13.4364 10.149C13.4364 10.149 12.985 10.1163 12.9156 9.85448C12.9156 9.85448 12.7767 9.62539 13.0545 9.36357C13.0545 9.36357 13.4364 9.00358 13.1239 8.44722C13.1239 8.44722 12.985 8.15268 12.5337 8.08722C12.5337 8.08722 11.9782 7.92359 12.2907 7.43269C12.2907 7.43269 12.6032 6.97451 12.1865 6.54906C12.1865 6.54906 11.7699 6.28725 11.6658 6.25452C11.6658 6.25452 11.388 6.05816 11.5269 5.79634C11.5269 5.79634 11.6658 5.37089 11.2839 5.07635C11.2839 5.07635 11.0756 4.87999 10.7284 4.84726C10.7284 4.84726 8.78422 4.84726 8.40233 4.91272C8.40233 4.91272 7.49967 4.91272 6.28455 6.02543C6.28455 6.02543 5.69435 6.7127 5.3819 6.54906C5.3819 6.54906 5 6.41815 5.06944 6.05816L5 6.09088Z", fill: "currentColor" }) }));
4
+ }
5
+ //# sourceMappingURL=ThumbsDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsDown.js","sourceRoot":"","sources":["../../../src/icons/ThumbsDown.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,cAAc,CAAC,EAC7B,SAAS,GAGV;IACC,OAAO,CACL,cACE,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,4BAA4B,YAElC,eACE,CAAC,EAAC,k3DAAk3D,EACp3D,IAAI,EAAC,cAAc,GACnB,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare function ThumbsDownFillIcon({ className, }: {
3
+ className?: string;
4
+ }): JSX.Element;
5
+ //# sourceMappingURL=ThumbsDownFill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsDownFill.d.ts","sourceRoot":"","sources":["../../../src/icons/ThumbsDownFill.tsx"],"names":[],"mappings":";AAAA,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,GACV,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,GAAG,CAAC,OAAO,CAgBd"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function ThumbsDownFillIcon({ className, }) {
3
+ return (_jsx("svg", { width: "100%", height: "100%", viewBox: "0 0 20 20", fill: "none", className: className, xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M14.059 9.49387C14.5293 8.11226 13.2864 7.48724 13.2864 7.48724C13.5887 6.27011 12.4802 5.67799 12.4802 5.67799C12.413 3.93453 10.8006 4.00032 10.8006 4.00032C9.89359 4.00032 8.85223 4.00032 8.85223 4.00032C7.91166 4.09901 7.27341 4.46086 7.27341 4.46086C6.29924 4.95429 5.79536 5.41483 5.52663 5.77668C5.52663 5.77668 4.51887 8.30963 5.29148 11.1057C5.33673 11.2695 5.35867 11.3031 5.39226 11.3689C5.45944 11.5663 5.52663 11.6321 5.52663 11.6321C6.0641 11.9939 6.73594 12.8163 6.73594 12.8163C7.27341 13.3097 7.7437 14.7242 7.7437 14.7242C8.07962 15.8756 8.88583 15.9743 8.88583 15.9743C11.0357 16.2374 11.0021 14.3953 11.0021 14.3953C11.0021 13.6716 10.4982 12.586 10.4982 12.586H13.5215C15.0668 12.29 14.9996 10.9413 14.9996 10.9413C14.9996 9.82282 14.0254 9.46097 14.0254 9.46097L14.059 9.49387Z", fill: "currentColor" }) }));
4
+ }
5
+ //# sourceMappingURL=ThumbsDownFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsDownFill.js","sourceRoot":"","sources":["../../../src/icons/ThumbsDownFill.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,GAGV;IACC,OAAO,CACL,cACE,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,4BAA4B,YAElC,eACE,CAAC,EAAC,iyBAAiyB,EACnyB,IAAI,EAAC,cAAc,GACnB,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare function ThumbsUpIcon({ className, }: {
3
+ className?: string;
4
+ }): JSX.Element;
5
+ //# sourceMappingURL=ThumbsUp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsUp.d.ts","sourceRoot":"","sources":["../../../src/icons/ThumbsUp.tsx"],"names":[],"mappings":";AAAA,wBAAgB,YAAY,CAAC,EAC3B,SAAS,GACV,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,GAAG,CAAC,OAAO,CAgBd"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function ThumbsUpIcon({ className, }) {
3
+ return (_jsx("svg", { width: "100%", height: "100%", viewBox: "0 0 20 20", stroke: "currentColor", className: className, xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M5 13.9091C5.13887 14.2691 5.65964 14.8582 6.9789 15.5127C6.9789 15.5127 7.63854 15.8727 8.61063 15.9709C8.61063 15.9709 9.68687 16.0364 10.6242 15.9709C10.6242 15.9709 12.2907 16.0364 12.3601 14.3018C12.3601 14.3018 13.4711 13.7455 13.1934 12.5019C13.1934 12.5019 14.4779 11.8473 13.9919 10.5055C13.9919 10.5055 14.9639 10.1455 14.9987 9.03281C14.9987 9.03281 15.1028 7.72374 13.4711 7.42919H10.3465C10.3465 7.42919 10.8673 6.31648 10.8673 5.59649C10.8673 5.59649 10.8673 3.76378 8.68007 4.0256C8.68007 4.0256 7.84684 4.12378 7.49967 5.26922C7.49967 5.26922 7.01362 6.64375 6.45814 7.16738C6.45814 7.16738 5.69435 7.95283 5.20831 8.34555C5.20831 8.34555 4.82641 8.70554 5.17359 9.03281C5.17359 9.03281 5.48605 9.2619 5.76379 9.03281C6.11096 8.70554 7.11777 7.78919 7.11777 7.78919C7.11777 7.78919 7.81212 7.10193 8.02043 6.51284L8.40233 5.49831C8.40233 5.49831 8.50648 4.71286 9.3397 4.90923C9.3397 4.90923 10.0688 5.00741 9.96462 5.79285C9.96462 5.79285 9.72159 6.74193 9.54801 7.10193C9.54801 7.10193 9.37442 7.4292 9.30498 7.62556C9.30498 7.62556 9.13139 7.82192 9.23555 8.05101C9.23555 8.05101 9.27026 8.37827 9.79103 8.31282H13.2975C13.2975 8.31282 14.339 8.44373 14.0266 9.36008C14.0266 9.36008 13.8877 9.72008 13.4364 9.85098C13.4364 9.85098 12.985 9.88371 12.9156 10.1455C12.9156 10.1455 12.7767 10.3746 13.0545 10.6364C13.0545 10.6364 13.4364 10.9964 13.1239 11.5528C13.1239 11.5528 12.985 11.8473 12.5337 11.9128C12.5337 11.9128 11.9782 12.0764 12.2907 12.5673C12.2907 12.5673 12.6032 13.0255 12.1865 13.4509C12.1865 13.4509 11.7699 13.7128 11.6658 13.7455C11.6658 13.7455 11.388 13.9418 11.5269 14.2037C11.5269 14.2037 11.6658 14.6291 11.2839 14.9236C11.2839 14.9236 11.0756 15.12 10.7284 15.1527C10.7284 15.1527 8.78422 15.1527 8.40233 15.0873C8.40233 15.0873 7.49967 15.0873 6.28455 13.9746C6.28455 13.9746 5.69435 13.2873 5.3819 13.4509C5.3819 13.4509 5 13.5818 5.06944 13.9418L5 13.9091Z", fill: "currentColor" }) }));
4
+ }
5
+ //# sourceMappingURL=ThumbsUp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsUp.js","sourceRoot":"","sources":["../../../src/icons/ThumbsUp.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,GAGV;IACC,OAAO,CACL,cACE,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,EACrB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,4BAA4B,YAElC,eACE,CAAC,EAAC,i3DAAi3D,EACn3D,IAAI,EAAC,cAAc,GACnB,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare function ThumbsUpFillIcon({ className, }: {
3
+ className?: string;
4
+ }): JSX.Element;
5
+ //# sourceMappingURL=ThumbsUpFill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsUpFill.d.ts","sourceRoot":"","sources":["../../../src/icons/ThumbsUpFill.tsx"],"names":[],"mappings":";AAAA,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,GACV,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,GAAG,CAAC,OAAO,CAgBd"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function ThumbsUpFillIcon({ className, }) {
3
+ return (_jsx("svg", { width: "100%", height: "100%", viewBox: "0 0 20 20", fill: "none", className: className, xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M14.059 10.5061C14.5293 11.8877 13.2864 12.5128 13.2864 12.5128C13.5887 13.7299 12.4802 14.322 12.4802 14.322C12.413 16.0655 10.8006 15.9997 10.8006 15.9997C9.89359 15.9997 8.85223 15.9997 8.85223 15.9997C7.91166 15.901 7.27341 15.5391 7.27341 15.5391C6.29924 15.0457 5.79536 14.5852 5.52663 14.2233C5.52663 14.2233 4.51887 11.6904 5.29148 8.89426C5.33673 8.73052 5.35867 8.69688 5.39226 8.63109C5.45944 8.43372 5.52663 8.36793 5.52663 8.36793C6.0641 8.00608 6.73594 7.18369 6.73594 7.18369C7.27341 6.69026 7.7437 5.27576 7.7437 5.27576C8.07962 4.12442 8.88583 4.02573 8.88583 4.02573C11.0357 3.76257 11.0021 5.60471 11.0021 5.60471C11.0021 6.32841 10.4982 7.41396 10.4982 7.41396H13.5215C15.0668 7.71002 14.9996 9.05873 14.9996 9.05873C14.9996 10.1772 14.0254 10.539 14.0254 10.539L14.059 10.5061Z", fill: "currentColor" }) }));
4
+ }
5
+ //# sourceMappingURL=ThumbsUpFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThumbsUpFill.js","sourceRoot":"","sources":["../../../src/icons/ThumbsUpFill.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,GAGV;IACC,OAAO,CACL,cACE,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,SAAS,EACpB,KAAK,EAAC,4BAA4B,YAElC,eACE,CAAC,EAAC,gyBAAgyB,EAClyB,IAAI,EAAC,cAAc,GACnB,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -94,7 +94,8 @@ export declare interface ChatInputProps {
94
94
  placeholder?: string;
95
95
  /**
96
96
  * Enable streaming behavior by making a request to Chat Streaming API.
97
- * Defaults to true.
97
+ * This feature is experimental, and is subject to change.
98
+ * Defaults to false.
98
99
  */
99
100
  stream?: boolean;
100
101
  /** Enable auto focus for the input box. Defaults to false. */
@@ -190,6 +191,21 @@ export declare interface ChatPopUpProps extends Omit<ChatHeaderProps, "showClose
190
191
  customCssClasses?: ChatPopUpCssClasses;
191
192
  }
192
193
 
194
+ /**
195
+ * The CSS class interface for the FeedbackButtons component.
196
+ *
197
+ * @public
198
+ */
199
+ export declare interface FeedbackButtonsCssClasses {
200
+ container?: string;
201
+ thumbsUpButton?: string;
202
+ thumbsUpIcon?: string;
203
+ thumbsUpFillIcon?: string;
204
+ thumbsDownButton?: string;
205
+ thumbsDownIcon?: string;
206
+ thumbsDownFillIcon?: string;
207
+ }
208
+
193
209
  /**
194
210
  * A component that displays the provided message.
195
211
  *
@@ -197,7 +213,7 @@ export declare interface ChatPopUpProps extends Omit<ChatHeaderProps, "showClose
197
213
  *
198
214
  * @param props - {@link MessageBubbleProps}
199
215
  */
200
- export declare function MessageBubble({ message, showTimestamp, customCssClasses, formatTimestamp, }: MessageBubbleProps): JSX_2.Element;
216
+ export declare function MessageBubble({ message, showFeedbackButtons, showTimestamp, customCssClasses, formatTimestamp, }: MessageBubbleProps): JSX_2.Element;
201
217
 
202
218
  /**
203
219
  * The CSS class interface for the {@link MessageBubble} component.
@@ -209,12 +225,16 @@ export declare interface MessageBubbleCssClasses {
209
225
  subContainer?: string;
210
226
  subContainer__bot?: string;
211
227
  subContainer__user?: string;
212
- message?: string;
213
- message__bot?: string;
214
- message__user?: string;
228
+ bubble?: string;
229
+ bubble__bot?: string;
230
+ bubble__user?: string;
231
+ text?: string;
232
+ text__bot?: string;
233
+ text__user?: string;
215
234
  timestamp?: string;
216
235
  timestamp__bot?: string;
217
236
  timestamp__user?: string;
237
+ feedbackButtonsCssClasses?: FeedbackButtonsCssClasses;
218
238
  }
219
239
 
220
240
  /**
@@ -225,6 +245,11 @@ export declare interface MessageBubbleCssClasses {
225
245
  export declare interface MessageBubbleProps {
226
246
  /** The message to display. */
227
247
  message: Message;
248
+ /**
249
+ * Whether to show the feedback buttons on the message bubble.
250
+ * Defaults to true.
251
+ */
252
+ showFeedbackButtons?: boolean;
228
253
  /**
229
254
  * Whether to show the timestamp of the message with the message bubble.
230
255
  * Defaults to true.
@@ -13,5 +13,5 @@
13
13
  *
14
14
  * @returns builtInClasses with styleless css classnames
15
15
  */
16
- export declare function withStylelessCssClasses<ClassInterface extends Partial<Record<keyof ClassInterface, string | object>>>(componentName: string, builtInClasses: Readonly<ClassInterface>): ClassInterface;
16
+ export declare function withStylelessCssClasses<ClassInterface extends Partial<Record<keyof ClassInterface, string | object>>>(componentName: string, builtInClasses: Readonly<Required<ClassInterface>>): ClassInterface;
17
17
  //# sourceMappingURL=withStylelessCssClasses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"withStylelessCssClasses.d.ts","sourceRoot":"","sources":["../../../src/utils/withStylelessCssClasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,EAE7E,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,GACvC,cAAc,CAYhB"}
1
+ {"version":3,"file":"withStylelessCssClasses.d.ts","sourceRoot":"","sources":["../../../src/utils/withStylelessCssClasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,EAE7E,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GACjD,cAAc,CAYhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"withStylelessCssClasses.js","sourceRoot":"","sources":["../../../src/utils/withStylelessCssClasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CAGrC,aAAqB,EACrB,cAAwC;IAExC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACnC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,CACrD,aAAa,CACd,KAAK,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;SAC3B;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"withStylelessCssClasses.js","sourceRoot":"","sources":["../../../src/utils/withStylelessCssClasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CAGrC,aAAqB,EACrB,cAAkD;IAElD,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACnC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,CACrD,aAAa,CACd,KAAK,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;SAC3B;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yext/chat-ui-react",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "A library of React Components for powering Yext Chat integrations.",
5
5
  "author": "clippy@yext.com",
6
6
  "main": "./lib/commonjs/index.js",
@@ -80,7 +80,7 @@
80
80
  "typescript": "^5.0.4"
81
81
  },
82
82
  "peerDependencies": {
83
- "@yext/chat-headless-react": "^0.3.3",
83
+ "@yext/chat-headless-react": "^0.4.0",
84
84
  "react": "^16.14 || ^17 || ^18",
85
85
  "react-dom": "^16.14 || ^17 || || ^18"
86
86
  },
@@ -41,7 +41,8 @@ export interface ChatInputProps {
41
41
  placeholder?: string;
42
42
  /**
43
43
  * Enable streaming behavior by making a request to Chat Streaming API.
44
- * Defaults to true.
44
+ * This feature is experimental, and is subject to change.
45
+ * Defaults to false.
45
46
  */
46
47
  stream?: boolean;
47
48
  /** Enable auto focus for the input box. Defaults to false. */
@@ -70,7 +71,7 @@ export interface ChatInputProps {
70
71
  */
71
72
  export function ChatInput({
72
73
  placeholder = "Type a message...",
73
- stream = true,
74
+ stream = false,
74
75
  inputAutoFocus = false,
75
76
  handleError,
76
77
  sendButtonIcon = <ArrowIcon />,
@@ -124,7 +125,7 @@ export function ChatInput({
124
125
  />
125
126
  <button
126
127
  aria-label="Send Message"
127
- disabled={!canSendMessage}
128
+ disabled={!canSendMessage || input.length === 0}
128
129
  onClick={sendMessage}
129
130
  className={cssClasses.sendButton}
130
131
  >
@@ -31,6 +31,9 @@ const builtInCssClasses: ChatPanelCssClasses = withStylelessCssClasses(
31
31
  messagesContainer:
32
32
  "flex flex-col gap-y-1 mt-auto px-4 pb-[85px] overflow-auto",
33
33
  inputContainer: "w-full absolute bottom-0 p-4 backdrop-blur-lg",
34
+ messageBubbleCssClasses: {
35
+ topContainer: "first:mt-4",
36
+ },
34
37
  }
35
38
  );
36
39
 
@@ -70,12 +73,18 @@ export function ChatPanel(props: ChatPanelProps) {
70
73
  const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);
71
74
  const defaultHandleApiError = useDefaultHandleApiError();
72
75
 
76
+ useEffect(() => {
77
+ chat.report({
78
+ action: "CHAT_IMPRESSION",
79
+ });
80
+ }, [chat]);
81
+
73
82
  // Fetch the first message on load, if there are no existing messages or a request being processed
74
83
  useEffect(() => {
75
84
  if (messages.length !== 0 || !canSendMessage) {
76
85
  return;
77
86
  }
78
- const { stream = true, handleError } = props;
87
+ const { stream = false, handleError } = props;
79
88
  const res = stream ? chat.streamNextMessage() : chat.getNextMessage();
80
89
  res.catch((e) => (handleError ? handleError(e) : defaultHandleApiError(e)));
81
90
  }, [chat, props, messages, defaultHandleApiError, canSendMessage]);
@@ -1,4 +1,4 @@
1
- import { useCallback, useState } from "react";
1
+ import { useCallback, useEffect, useState } from "react";
2
2
  import { ChatIcon } from "../icons/Chat";
3
3
  import { ChatPanel, ChatPanelCssClasses, ChatPanelProps } from "./ChatPanel";
4
4
  import {
@@ -9,6 +9,7 @@ import {
9
9
  import { twMerge } from "tailwind-merge";
10
10
  import { useComposedCssClasses } from "../hooks";
11
11
  import { withStylelessCssClasses } from "../utils/withStylelessCssClasses";
12
+ import { useChatActions } from "@yext/chat-headless-react";
12
13
 
13
14
  /**
14
15
  * The CSS class interface for the {@link ChatPopUp} component.
@@ -49,7 +50,7 @@ const builtInCssClasses: ChatPopUpCssClasses = withStylelessCssClasses(
49
50
  container: "max-[480px]:rounded-none rounded-t-3xl",
50
51
  },
51
52
  panelCssClasses: {
52
- container: "max-[480px]:rounded-none rounded-b-3xl",
53
+ container: "max-[480px]:rounded-none rounded-3xl",
53
54
  inputContainer: "max-[480px]:rounded-none rounded-b-3xl",
54
55
  },
55
56
  }
@@ -87,6 +88,14 @@ export function ChatPopUp(props: ChatPopUpProps) {
87
88
  onClose: customOnClose,
88
89
  title,
89
90
  } = props;
91
+
92
+ const actions = useChatActions();
93
+ useEffect(() => {
94
+ actions.report({
95
+ action: "CHAT_IMPRESSION",
96
+ });
97
+ }, [actions]);
98
+
90
99
  const [showChat, setShowChat] = useState(false);
91
100
  const onClick = useCallback(() => {
92
101
  setShowChat(!showChat);
@@ -0,0 +1,107 @@
1
+ import { ThumbsDownIcon } from "../icons/ThumbsDown";
2
+ import { ThumbsUpIcon } from "../icons/ThumbsUp";
3
+ import { useCallback, useState } from "react";
4
+ import { ThumbsUpFillIcon } from "../icons/ThumbsUpFill";
5
+ import { ThumbsDownFillIcon } from "../icons/ThumbsDownFill";
6
+ import { withStylelessCssClasses } from "../utils/withStylelessCssClasses";
7
+ import { useComposedCssClasses } from "../hooks";
8
+ import { useChatActions } from "@yext/chat-headless-react";
9
+
10
+ /**
11
+ * The CSS class interface for the FeedbackButtons component.
12
+ *
13
+ * @public
14
+ */
15
+ export interface FeedbackButtonsCssClasses {
16
+ container?: string;
17
+ thumbsUpButton?: string;
18
+ thumbsUpIcon?: string;
19
+ thumbsUpFillIcon?: string;
20
+ thumbsDownButton?: string;
21
+ thumbsDownIcon?: string;
22
+ thumbsDownFillIcon?: string;
23
+ }
24
+
25
+ const builtInCssClasses: FeedbackButtonsCssClasses =
26
+ withStylelessCssClasses<FeedbackButtonsCssClasses>("FeedbackButtons", {
27
+ container:
28
+ "flex gap-x-1 absolute -right-1 -top-3 opacity-0 group-hover:opacity-100 duration-200",
29
+ thumbsUpButton:
30
+ "w-6 h-6 bg-gray-700 rounded-md flex justify-center items-center",
31
+ thumbsUpIcon: "text-white w-[22px] h-[22px] stroke-[0.2]",
32
+ thumbsUpFillIcon: "text-white w-[22px] h-[22px] stroke-[0.2]",
33
+ thumbsDownButton:
34
+ "w-6 h-6 bg-gray-700 rounded-md flex justify-center items-center",
35
+ thumbsDownIcon: "text-white w-[22px] h-[22px] stroke-[0.2]",
36
+ thumbsDownFillIcon: "text-white w-[22px] h-[22px] stroke-[0.2]",
37
+ });
38
+
39
+ /**
40
+ * The props for the FeedbackButtons component.
41
+ *
42
+ * @internal
43
+ */
44
+ interface FeedbackButtonsProps {
45
+ /** The response ID correlates to the current message to give feedback on. */
46
+ responseId?: string;
47
+ /** CSS classes for customizing the component styling. */
48
+ customCssClasses?: FeedbackButtonsCssClasses;
49
+ }
50
+
51
+ /**
52
+ * Displays feedback buttons (e.g. thumbs up and thumbs down) that will
53
+ * report analytic events on click.
54
+ *
55
+ * @internal
56
+ */
57
+ export function FeedbackButtons({
58
+ customCssClasses,
59
+ responseId,
60
+ }: FeedbackButtonsProps) {
61
+ const actions = useChatActions();
62
+ const cssClasses = useComposedCssClasses(builtInCssClasses, customCssClasses);
63
+ const [selectedThumb, setSelectedThumb] = useState<
64
+ "UP" | "DOWN" | undefined
65
+ >();
66
+ const onClickThumbsUp = useCallback(() => {
67
+ setSelectedThumb("UP");
68
+ actions.report({
69
+ action: "THUMBS_UP",
70
+ chat: {
71
+ responseId,
72
+ },
73
+ });
74
+ }, [actions, responseId]);
75
+
76
+ const onClickThumbsDown = useCallback(() => {
77
+ setSelectedThumb("DOWN");
78
+ actions.report({
79
+ action: "THUMBS_DOWN",
80
+ chat: {
81
+ responseId,
82
+ },
83
+ });
84
+ }, [actions, responseId]);
85
+
86
+ return (
87
+ <div className={cssClasses.container}>
88
+ <button className={cssClasses.thumbsUpButton} onClick={onClickThumbsUp}>
89
+ {selectedThumb === "UP" ? (
90
+ <ThumbsUpFillIcon className={cssClasses.thumbsUpFillIcon} />
91
+ ) : (
92
+ <ThumbsUpIcon className={cssClasses.thumbsUpIcon} />
93
+ )}
94
+ </button>
95
+ <button
96
+ className={cssClasses.thumbsDownButton}
97
+ onClick={onClickThumbsDown}
98
+ >
99
+ {selectedThumb === "DOWN" ? (
100
+ <ThumbsDownFillIcon className={cssClasses.thumbsDownFillIcon} />
101
+ ) : (
102
+ <ThumbsDownIcon className={cssClasses.thumbsDownIcon} />
103
+ )}
104
+ </button>
105
+ </div>
106
+ );
107
+ }