@gooddata/sdk-ui-gen-ai 10.13.0-alpha.2 → 10.13.0-alpha.20

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 (222) hide show
  1. package/NOTICE +3 -3
  2. package/esm/components/EmptyState.d.ts +3 -3
  3. package/esm/components/EmptyState.d.ts.map +1 -1
  4. package/esm/components/EmptyState.js +10 -8
  5. package/esm/components/EmptyState.js.map +1 -1
  6. package/esm/components/ErrorBoundary.d.ts +11 -3
  7. package/esm/components/ErrorBoundary.d.ts.map +1 -1
  8. package/esm/components/ErrorBoundary.js +26 -7
  9. package/esm/components/ErrorBoundary.js.map +1 -1
  10. package/esm/components/GenAIChatOverlay.d.ts +3 -3
  11. package/esm/components/GenAIChatOverlay.d.ts.map +1 -1
  12. package/esm/components/GenAIChatOverlay.js +4 -4
  13. package/esm/components/GenAIChatOverlay.js.map +1 -1
  14. package/esm/components/GenAIChatWrapper.d.ts +7 -5
  15. package/esm/components/GenAIChatWrapper.d.ts.map +1 -1
  16. package/esm/components/GenAIChatWrapper.js +14 -1
  17. package/esm/components/GenAIChatWrapper.js.map +1 -1
  18. package/esm/components/GlobalError.d.ts +6 -15
  19. package/esm/components/GlobalError.d.ts.map +1 -1
  20. package/esm/components/GlobalError.js +12 -18
  21. package/esm/components/GlobalError.js.map +1 -1
  22. package/esm/components/Input.d.ts +2 -1
  23. package/esm/components/Input.d.ts.map +1 -1
  24. package/esm/components/Input.js +15 -13
  25. package/esm/components/Input.js.map +1 -1
  26. package/esm/components/Messages.d.ts +3 -3
  27. package/esm/components/Messages.d.ts.map +1 -1
  28. package/esm/components/Messages.js +21 -33
  29. package/esm/components/Messages.js.map +1 -1
  30. package/esm/components/messages/AgentIcon.d.ts.map +1 -1
  31. package/esm/components/messages/AgentIcon.js +10 -4
  32. package/esm/components/messages/AgentIcon.js.map +1 -1
  33. package/esm/components/messages/AssistantMessage.d.ts +8 -0
  34. package/esm/components/messages/AssistantMessage.d.ts.map +1 -0
  35. package/esm/components/messages/AssistantMessage.js +14 -0
  36. package/esm/components/messages/AssistantMessage.js.map +1 -0
  37. package/esm/components/messages/MessageContents.d.ts +11 -0
  38. package/esm/components/messages/MessageContents.d.ts.map +1 -0
  39. package/esm/components/messages/MessageContents.js +37 -0
  40. package/esm/components/messages/MessageContents.js.map +1 -0
  41. package/esm/components/messages/UserMessage.d.ts +8 -0
  42. package/esm/components/messages/UserMessage.d.ts.map +1 -0
  43. package/esm/components/messages/UserMessage.js +10 -0
  44. package/esm/components/messages/UserMessage.js.map +1 -0
  45. package/esm/components/messages/contents/ErrorContents.d.ts +8 -0
  46. package/esm/components/messages/contents/ErrorContents.d.ts.map +1 -0
  47. package/esm/components/messages/contents/ErrorContents.js +10 -0
  48. package/esm/components/messages/contents/ErrorContents.js.map +1 -0
  49. package/esm/components/messages/contents/Markdown.d.ts +8 -0
  50. package/esm/components/messages/contents/Markdown.d.ts.map +1 -0
  51. package/esm/components/messages/contents/Markdown.js +18 -0
  52. package/esm/components/messages/contents/Markdown.js.map +1 -0
  53. package/esm/components/messages/contents/RoutingContents.d.ts +8 -0
  54. package/esm/components/messages/contents/RoutingContents.d.ts.map +1 -0
  55. package/esm/components/messages/contents/RoutingContents.js +10 -0
  56. package/esm/components/messages/contents/RoutingContents.js.map +1 -0
  57. package/esm/components/messages/contents/SearchContents.d.ts +8 -0
  58. package/esm/components/messages/contents/SearchContents.d.ts.map +1 -0
  59. package/esm/components/messages/contents/SearchContents.js +14 -0
  60. package/esm/components/messages/contents/SearchContents.js.map +1 -0
  61. package/esm/components/messages/contents/TextContents.d.ts +8 -0
  62. package/esm/components/messages/contents/TextContents.d.ts.map +1 -0
  63. package/esm/components/messages/contents/TextContents.js +10 -0
  64. package/esm/components/messages/contents/TextContents.js.map +1 -0
  65. package/esm/components/messages/contents/VisualizationContents.d.ts +8 -0
  66. package/esm/components/messages/contents/VisualizationContents.d.ts.map +1 -0
  67. package/esm/components/messages/contents/VisualizationContents.js +53 -0
  68. package/esm/components/messages/contents/VisualizationContents.js.map +1 -0
  69. package/esm/components/messages/contents/VisualizationErrorBoundary.d.ts +10 -0
  70. package/esm/components/messages/contents/VisualizationErrorBoundary.d.ts.map +1 -0
  71. package/esm/components/messages/contents/VisualizationErrorBoundary.js +22 -0
  72. package/esm/components/messages/contents/VisualizationErrorBoundary.js.map +1 -0
  73. package/esm/components/messages/contents/replaceLinks.d.ts +3 -0
  74. package/esm/components/messages/contents/replaceLinks.d.ts.map +1 -0
  75. package/esm/components/messages/contents/replaceLinks.js +30 -0
  76. package/esm/components/messages/contents/replaceLinks.js.map +1 -0
  77. package/esm/components/messages/contents/useExecution.d.ts +6 -0
  78. package/esm/components/messages/contents/useExecution.d.ts.map +1 -0
  79. package/esm/components/messages/{useExecution.js → contents/useExecution.js} +9 -4
  80. package/esm/components/messages/contents/useExecution.js.map +1 -0
  81. package/esm/components/messages/index.d.ts +2 -4
  82. package/esm/components/messages/index.d.ts.map +1 -1
  83. package/esm/components/messages/index.js +2 -4
  84. package/esm/components/messages/index.js.map +1 -1
  85. package/esm/hooks/useGenAIStore.d.ts +8 -10
  86. package/esm/hooks/useGenAIStore.d.ts.map +1 -1
  87. package/esm/index.d.ts +1 -1
  88. package/esm/index.d.ts.map +1 -1
  89. package/esm/localization/bundles/de-DE.json +22 -1
  90. package/esm/localization/bundles/en-AU.json +22 -1
  91. package/esm/localization/bundles/en-GB.json +22 -1
  92. package/esm/localization/bundles/en-US.json +11 -11
  93. package/esm/localization/bundles/es-419.json +22 -1
  94. package/esm/localization/bundles/es-ES.json +22 -1
  95. package/esm/localization/bundles/fi-FI.json +22 -1
  96. package/esm/localization/bundles/fr-CA.json +22 -1
  97. package/esm/localization/bundles/fr-FR.json +22 -1
  98. package/esm/localization/bundles/it-IT.json +22 -1
  99. package/esm/localization/bundles/ja-JP.json +22 -1
  100. package/esm/localization/bundles/nl-NL.json +22 -1
  101. package/esm/localization/bundles/pt-BR.json +22 -1
  102. package/esm/localization/bundles/pt-PT.json +22 -1
  103. package/esm/localization/bundles/zh-HK.json +22 -1
  104. package/esm/localization/bundles/zh-Hans.json +22 -1
  105. package/esm/localization/bundles/zh-Hant.json +22 -1
  106. package/esm/model.d.ts +70 -53
  107. package/esm/model.d.ts.map +1 -1
  108. package/esm/model.js +46 -43
  109. package/esm/model.js.map +1 -1
  110. package/esm/sdk-ui-gen-ai.d.ts +59 -46
  111. package/esm/store/index.d.ts +2 -4
  112. package/esm/store/index.d.ts.map +1 -1
  113. package/esm/store/index.js +2 -4
  114. package/esm/store/index.js.map +1 -1
  115. package/esm/store/messages/messagesSelectors.d.ts +6 -3
  116. package/esm/store/messages/messagesSelectors.d.ts.map +1 -1
  117. package/esm/store/messages/messagesSelectors.js +6 -12
  118. package/esm/store/messages/messagesSelectors.js.map +1 -1
  119. package/esm/store/messages/messagesSlice.d.ts +49 -4
  120. package/esm/store/messages/messagesSlice.d.ts.map +1 -1
  121. package/esm/store/messages/messagesSlice.js +96 -23
  122. package/esm/store/messages/messagesSlice.js.map +1 -1
  123. package/esm/store/sideEffects/converters/interactionsToMessages.d.ts +9 -0
  124. package/esm/store/sideEffects/converters/interactionsToMessages.d.ts.map +1 -0
  125. package/esm/store/sideEffects/converters/interactionsToMessages.js +36 -0
  126. package/esm/store/sideEffects/converters/interactionsToMessages.js.map +1 -0
  127. package/esm/store/sideEffects/index.d.ts.map +1 -1
  128. package/esm/store/sideEffects/index.js +10 -5
  129. package/esm/store/sideEffects/index.js.map +1 -1
  130. package/esm/store/sideEffects/onThreadClear.d.ts +18 -0
  131. package/esm/store/sideEffects/onThreadClear.d.ts.map +1 -0
  132. package/esm/store/sideEffects/onThreadClear.js +31 -0
  133. package/esm/store/sideEffects/onThreadClear.js.map +1 -0
  134. package/esm/store/sideEffects/onThreadLoad.d.ts +20 -0
  135. package/esm/store/sideEffects/onThreadLoad.d.ts.map +1 -0
  136. package/esm/store/sideEffects/onThreadLoad.js +41 -0
  137. package/esm/store/sideEffects/onThreadLoad.js.map +1 -0
  138. package/esm/store/sideEffects/onUserMessage.d.ts +21 -0
  139. package/esm/store/sideEffects/onUserMessage.d.ts.map +1 -0
  140. package/esm/store/sideEffects/onUserMessage.js +53 -0
  141. package/esm/store/sideEffects/onUserMessage.js.map +1 -0
  142. package/esm/store/sideEffects/threadPolling.d.ts +11 -0
  143. package/esm/store/sideEffects/threadPolling.d.ts.map +1 -0
  144. package/esm/store/sideEffects/threadPolling.js +82 -0
  145. package/esm/store/sideEffects/threadPolling.js.map +1 -0
  146. package/esm/store/store.d.ts +8 -10
  147. package/esm/store/store.d.ts.map +1 -1
  148. package/esm/store/store.js +2 -4
  149. package/esm/store/store.js.map +1 -1
  150. package/esm/store/types.d.ts +0 -2
  151. package/esm/store/types.d.ts.map +1 -1
  152. package/esm/store/types.js +0 -1
  153. package/esm/store/types.js.map +1 -1
  154. package/package.json +15 -12
  155. package/styles/css/main.css +68 -43
  156. package/styles/css/main.css.map +1 -1
  157. package/styles/css/messages.css +55 -26
  158. package/styles/css/messages.css.map +1 -1
  159. package/styles/scss/main.scss +24 -6
  160. package/styles/scss/messages.scss +126 -97
  161. package/esm/components/messages/AgentState.d.ts +0 -3
  162. package/esm/components/messages/AgentState.d.ts.map +0 -1
  163. package/esm/components/messages/AgentState.js +0 -12
  164. package/esm/components/messages/AgentState.js.map +0 -1
  165. package/esm/components/messages/AssistantCancelledMessage.d.ts +0 -8
  166. package/esm/components/messages/AssistantCancelledMessage.d.ts.map +0 -1
  167. package/esm/components/messages/AssistantCancelledMessage.js +0 -12
  168. package/esm/components/messages/AssistantCancelledMessage.js.map +0 -1
  169. package/esm/components/messages/AssistantErrorMessage.d.ts +0 -11
  170. package/esm/components/messages/AssistantErrorMessage.d.ts.map +0 -1
  171. package/esm/components/messages/AssistantErrorMessage.js +0 -14
  172. package/esm/components/messages/AssistantErrorMessage.js.map +0 -1
  173. package/esm/components/messages/AssistantSearchCreateMessage.d.ts +0 -8
  174. package/esm/components/messages/AssistantSearchCreateMessage.d.ts.map +0 -1
  175. package/esm/components/messages/AssistantSearchCreateMessage.js +0 -16
  176. package/esm/components/messages/AssistantSearchCreateMessage.js.map +0 -1
  177. package/esm/components/messages/AssistantTextMessage.d.ts +0 -8
  178. package/esm/components/messages/AssistantTextMessage.d.ts.map +0 -1
  179. package/esm/components/messages/AssistantTextMessage.js +0 -10
  180. package/esm/components/messages/AssistantTextMessage.js.map +0 -1
  181. package/esm/components/messages/FoundObjects.d.ts +0 -8
  182. package/esm/components/messages/FoundObjects.d.ts.map +0 -1
  183. package/esm/components/messages/FoundObjects.js +0 -28
  184. package/esm/components/messages/FoundObjects.js.map +0 -1
  185. package/esm/components/messages/SystemMessage.d.ts +0 -8
  186. package/esm/components/messages/SystemMessage.d.ts.map +0 -1
  187. package/esm/components/messages/SystemMessage.js +0 -7
  188. package/esm/components/messages/SystemMessage.js.map +0 -1
  189. package/esm/components/messages/UserTextMessage.d.ts +0 -8
  190. package/esm/components/messages/UserTextMessage.d.ts.map +0 -1
  191. package/esm/components/messages/UserTextMessage.js +0 -10
  192. package/esm/components/messages/UserTextMessage.js.map +0 -1
  193. package/esm/components/messages/Visualization.d.ts +0 -8
  194. package/esm/components/messages/Visualization.d.ts.map +0 -1
  195. package/esm/components/messages/Visualization.js +0 -39
  196. package/esm/components/messages/Visualization.js.map +0 -1
  197. package/esm/components/messages/useExecution.d.ts +0 -6
  198. package/esm/components/messages/useExecution.d.ts.map +0 -1
  199. package/esm/components/messages/useExecution.js.map +0 -1
  200. package/esm/store/agent/agentSelectors.d.ts +0 -3
  201. package/esm/store/agent/agentSelectors.d.ts.map +0 -1
  202. package/esm/store/agent/agentSelectors.js +0 -6
  203. package/esm/store/agent/agentSelectors.js.map +0 -1
  204. package/esm/store/agent/agentSlice.d.ts +0 -8
  205. package/esm/store/agent/agentSlice.d.ts.map +0 -1
  206. package/esm/store/agent/agentSlice.js +0 -21
  207. package/esm/store/agent/agentSlice.js.map +0 -1
  208. package/esm/store/sideEffects/converters/evalToMessage.d.ts +0 -7
  209. package/esm/store/sideEffects/converters/evalToMessage.d.ts.map +0 -1
  210. package/esm/store/sideEffects/converters/evalToMessage.js +0 -14
  211. package/esm/store/sideEffects/converters/evalToMessage.js.map +0 -1
  212. package/esm/store/sideEffects/converters/messagesToHistory.d.ts +0 -4
  213. package/esm/store/sideEffects/converters/messagesToHistory.d.ts.map +0 -1
  214. package/esm/store/sideEffects/converters/messagesToHistory.js +0 -83
  215. package/esm/store/sideEffects/converters/messagesToHistory.js.map +0 -1
  216. package/esm/store/sideEffects/onNewMessage.d.ts +0 -13
  217. package/esm/store/sideEffects/onNewMessage.d.ts.map +0 -1
  218. package/esm/store/sideEffects/onNewMessage.js +0 -81
  219. package/esm/store/sideEffects/onNewMessage.js.map +0 -1
  220. package/styles/css/agentState.css +0 -29
  221. package/styles/css/agentState.css.map +0 -1
  222. package/styles/scss/agentState.scss +0 -31
@@ -1,55 +1,43 @@
1
1
  // (C) 2024 GoodData Corporation
2
2
  import React from "react";
3
3
  import { connect } from "react-redux";
4
- import { agentLoadingSelector, visibleMessagesSelector } from "../store/index.js";
5
- import { AssistantTextMessageComponent, SystemMessageComponent, UserTextMessageComponent, AssistantCancelledMessageComponent, } from "./messages/index.js";
6
- import { AgentState } from "./messages/AgentState.js";
7
- import { isAssistantErrorMessage, isAssistantSearchCreateMessage, isAssistantTextMessage, isAssistantCancelledMessage, isUserTextMessage, isSystemTextMessage, } from "../model.js";
4
+ import { asyncProcessSelector, messagesSelector } from "../store/index.js";
5
+ import { AssistantMessageComponent, UserMessageComponent } from "./messages/index.js";
8
6
  import { EmptyState } from "./EmptyState.js";
9
- import { AssistantErrorMessageComponent } from "./messages/AssistantErrorMessage.js";
10
- import { AssistantSearchCreateMessageComponent } from "./messages/AssistantSearchCreateMessage.js";
7
+ import { isAssistantMessage, isUserMessage } from "../model.js";
8
+ import Skeleton from "react-loading-skeleton";
11
9
  const MessagesComponent = ({ messages, loading }) => {
12
10
  const scrollRef = React.useRef(null);
13
11
  const lastMessage = messages[messages.length - 1];
14
12
  React.useLayoutEffect(() => {
15
- // If either last message or loading state changes, scroll to the bottom
13
+ // Last message will also change when it's loading state is updated
16
14
  scrollRef.current?.scrollTo({
17
15
  top: scrollRef.current?.scrollHeight,
18
16
  behavior: "smooth",
19
17
  });
20
- }, [lastMessage, loading]);
18
+ }, [lastMessage]);
21
19
  return (React.createElement("div", { className: "gd-gen-ai-chat__messages", ref: scrollRef },
22
20
  React.createElement("div", { className: "gd-gen-ai-chat__messages__scroll" },
23
- !messages.length ? React.createElement(EmptyState, null) : null,
24
- messages.map((message) => {
25
- if (isAssistantTextMessage(message)) {
26
- return React.createElement(AssistantTextMessageComponent, { key: message.id, message: message });
27
- }
28
- if (isAssistantErrorMessage(message)) {
29
- return React.createElement(AssistantErrorMessageComponent, { key: message.id, message: message });
30
- }
31
- if (isAssistantSearchCreateMessage(message)) {
32
- return React.createElement(AssistantSearchCreateMessageComponent, { key: message.id, message: message });
33
- }
34
- if (isUserTextMessage(message)) {
35
- return React.createElement(UserTextMessageComponent, { key: message.id, message: message });
36
- }
37
- if (isAssistantCancelledMessage(message)) {
38
- return React.createElement(AssistantCancelledMessageComponent, { key: message.id, message: message });
39
- }
40
- if (isSystemTextMessage(message)) {
41
- return React.createElement(SystemMessageComponent, { key: message.id, message: message });
42
- }
43
- return assertNever(message);
44
- }),
45
- loading ? React.createElement(AgentState, null) : null)));
21
+ !messages.length && !loading ? React.createElement(EmptyState, null) : null,
22
+ loading === "loading" || loading === "clearing" ? React.createElement(Skeleton, { count: 3, height: "2em" }) : null,
23
+ loading !== "loading" && loading !== "clearing"
24
+ ? messages.map((message) => {
25
+ if (isUserMessage(message)) {
26
+ return React.createElement(UserMessageComponent, { key: message.localId, message: message });
27
+ }
28
+ if (isAssistantMessage(message)) {
29
+ return React.createElement(AssistantMessageComponent, { key: message.localId, message: message });
30
+ }
31
+ return assertNever(message);
32
+ })
33
+ : null)));
46
34
  };
47
35
  const assertNever = (value) => {
48
36
  throw new Error(`Unhandled message role: ${value}`);
49
37
  };
50
38
  const mapStateToProps = (state) => ({
51
- messages: visibleMessagesSelector(state),
52
- loading: agentLoadingSelector(state),
39
+ messages: messagesSelector(state),
40
+ loading: asyncProcessSelector(state),
53
41
  });
54
42
  export const Messages = connect(mapStateToProps)(MessagesComponent);
55
43
  //# sourceMappingURL=Messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../src/components/Messages.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../src/components/Messages.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAa,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAO9C,MAAM,iBAAiB,GAAqC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IAClF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACvB,mEAAmE;QACnE,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;YACxB,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,YAAY;YACpC,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACH,6BAAK,SAAS,EAAC,0BAA0B,EAAC,GAAG,EAAE,SAAS;QACpD,6BAAK,SAAS,EAAC,kCAAkC;YAC5C,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAC,UAAU,OAAG,CAAC,CAAC,CAAC,IAAI;YACpD,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;YAC5F,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,UAAU;gBAC5C,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBACrB,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;wBACzB,OAAO,oBAAC,oBAAoB,IAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;oBAC5E,CAAC;oBAED,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC9B,OAAO,oBAAC,yBAAyB,IAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;oBACjF,CAAC;oBAED,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC,CAAC;gBACJ,CAAC,CAAC,IAAI,CACR,CACJ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAS,EAAE;IACxC,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAgB,EAA0B,EAAE,CAAC,CAAC;IACnE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC;IACjC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,iBAAiB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AgentIcon.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AgentIcon.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,KAAK,mBAAmB,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsEnD,CAAC"}
1
+ {"version":3,"file":"AgentIcon.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AgentIcon.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,KAAK,mBAAmB,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA4EnD,CAAC"}
@@ -6,15 +6,21 @@ export const AgentIcon = ({ loading = false, error = false, cancelled = false, }
6
6
  // A precaution in case there are multiple instances of the component on the same page
7
7
  // In-line SVGs must obey the unique ID rule as any other HTML element
8
8
  const instanceId = React.useMemo(() => INSTANCE_COUNTER++, []);
9
+ const isLoading = loading && !cancelled && !error;
10
+ // We are adding only one modifier class at a time
9
11
  const className = cx("gd-gen-ai-chat__agent_icon", {
10
- "gd-gen-ai-chat__agent_icon--loading": loading,
12
+ // Error state has the top priority
13
+ "gd-gen-ai-chat__agent_icon--error": error,
14
+ // Cancelled state
15
+ "gd-gen-ai-chat__agent_icon--cancelled": !error && cancelled,
16
+ // Loading state
17
+ "gd-gen-ai-chat__agent_icon--loading": isLoading,
18
+ // The default state with animation on first appearance
11
19
  "gd-gen-ai-chat__agent_icon--appear": !loading && !error && !cancelled,
12
- "gd-gen-ai-chat__agent_icon--error": !loading && error,
13
- "gd-gen-ai-chat__agent_icon--cancelled": !loading && !error && cancelled,
14
20
  });
15
21
  return (React.createElement("svg", { className: className, viewBox: "0 0 32 32", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
16
22
  React.createElement("g", { clipPath: `url(#clip_mask_${instanceId})` },
17
- loading ? (React.createElement("g", { className: "gd-gen-ai-chat__agent_icon__circle" },
23
+ isLoading ? (React.createElement("g", { className: "gd-gen-ai-chat__agent_icon__circle" },
18
24
  React.createElement("path", { d: "M 0 -16 A 16 16 0 0 1 0 16", stroke: `url(#first_half_${instanceId})` }),
19
25
  React.createElement("path", { d: "M 0 16 A 16 16 0 0 1 0 -16", stroke: `url(#second_half_${instanceId})` }))) : (React.createElement("circle", { cx: "16", cy: "16", r: "16", className: "gd-gen-ai-chat__agent_icon__background" })),
20
26
  React.createElement("path", { className: "gd-gen-ai-chat__agent_icon__star", d: "M16.2317 7.76912C16.2737 7.51389 16.6407 7.5139 16.6827 7.76913L17.1108 10.368C17.493 12.6883 19.3116 14.507 21.632 14.8892L24.2308 15.3172C24.4861 15.3593 24.4861 15.7263 24.2308 15.7683L21.632 16.1964C19.3116 16.5786 17.493 18.3972 17.1108 20.7176L16.6827 23.3164C16.6407 23.5716 16.2737 23.5716 16.2317 23.3164L15.8036 20.7176C15.4214 18.3972 13.6027 16.5786 11.2824 16.1964L8.68355 15.7683C8.42832 15.7263 8.42832 15.3593 8.68355 15.3172L11.2824 14.8892C13.6027 14.507 15.4214 12.6883 15.8036 10.368L16.2317 7.76912Z" }),
@@ -1 +1 @@
1
- {"version":3,"file":"AgentIcon.js","sourceRoot":"","sources":["../../../src/components/messages/AgentIcon.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAQzB,MAAM,CAAC,MAAM,SAAS,GAAkC,CAAC,EACrD,OAAO,GAAG,KAAK,EACf,KAAK,GAAG,KAAK,EACb,SAAS,GAAG,KAAK,GACpB,EAAE,EAAE;IACD,sFAAsF;IACtF,sEAAsE;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,EAAE,CAAC,4BAA4B,EAAE;QAC/C,qCAAqC,EAAE,OAAO;QAC9C,oCAAoC,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;QACtE,mCAAmC,EAAE,CAAC,OAAO,IAAI,KAAK;QACtD,uCAAuC,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,SAAS;KAC3E,CAAC,CAAC;IAEH,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;QACzF,2BAAG,QAAQ,EAAE,kBAAkB,UAAU,GAAG;YACvC,OAAO,CAAC,CAAC,CAAC,CACP,2BAAG,SAAS,EAAC,oCAAoC;gBAC7C,8BAAM,CAAC,EAAC,4BAA4B,EAAC,MAAM,EAAE,mBAAmB,UAAU,GAAG,GAAI;gBACjF,8BAAM,CAAC,EAAC,4BAA4B,EAAC,MAAM,EAAE,oBAAoB,UAAU,GAAG,GAAI,CAClF,CACP,CAAC,CAAC,CAAC,CACA,gCAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,SAAS,EAAC,wCAAwC,GAAG,CACvF;YACD,8BACI,SAAS,EAAC,kCAAkC,EAC5C,CAAC,EAAC,0gBAA0gB,GAC9gB;YACF,8BACI,SAAS,EAAC,2EAA2E,EACrF,CAAC,EAAC,6YAA6Y,GACjZ;YACF,8BACI,SAAS,EAAC,2HAA2H,EACrI,CAAC,EAAC,+YAA+Y,GACnZ,CACF;QACJ;YACI,wCACI,EAAE,EAAE,cAAc,UAAU,EAAE,EAC9B,aAAa,EAAC,mBAAmB,EACjC,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG;gBAEN,8BAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,wCAAwC,GAAG;gBACvE,8BAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,uCAAuC,GAAG,CAC3D;YACjB,wCACI,SAAS,EAAC,mCAAmC,EAC7C,EAAE,EAAE,eAAe,UAAU,EAAE,EAC/B,aAAa,EAAC,mBAAmB,EACjC,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG;gBAEN,8BAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,uCAAuC,GAAG;gBACtE,8BAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,sCAAsC,GAAG,CAC1D;YACjB,kCAAU,EAAE,EAAE,aAAa,UAAU,EAAE;gBACnC,8BAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,CAChC,CACR,CACL,CACT,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"AgentIcon.js","sourceRoot":"","sources":["../../../src/components/messages/AgentIcon.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAQzB,MAAM,CAAC,MAAM,SAAS,GAAkC,CAAC,EACrD,OAAO,GAAG,KAAK,EACf,KAAK,GAAG,KAAK,EACb,SAAS,GAAG,KAAK,GACpB,EAAE,EAAE;IACD,sFAAsF;IACtF,sEAAsE;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC;IAElD,kDAAkD;IAClD,MAAM,SAAS,GAAG,EAAE,CAAC,4BAA4B,EAAE;QAC/C,mCAAmC;QACnC,mCAAmC,EAAE,KAAK;QAC1C,kBAAkB;QAClB,uCAAuC,EAAE,CAAC,KAAK,IAAI,SAAS;QAC5D,gBAAgB;QAChB,qCAAqC,EAAE,SAAS;QAChD,uDAAuD;QACvD,oCAAoC,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;KACzE,CAAC,CAAC;IAEH,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B;QACzF,2BAAG,QAAQ,EAAE,kBAAkB,UAAU,GAAG;YACvC,SAAS,CAAC,CAAC,CAAC,CACT,2BAAG,SAAS,EAAC,oCAAoC;gBAC7C,8BAAM,CAAC,EAAC,4BAA4B,EAAC,MAAM,EAAE,mBAAmB,UAAU,GAAG,GAAI;gBACjF,8BAAM,CAAC,EAAC,4BAA4B,EAAC,MAAM,EAAE,oBAAoB,UAAU,GAAG,GAAI,CAClF,CACP,CAAC,CAAC,CAAC,CACA,gCAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,SAAS,EAAC,wCAAwC,GAAG,CACvF;YACD,8BACI,SAAS,EAAC,kCAAkC,EAC5C,CAAC,EAAC,0gBAA0gB,GAC9gB;YACF,8BACI,SAAS,EAAC,2EAA2E,EACrF,CAAC,EAAC,6YAA6Y,GACjZ;YACF,8BACI,SAAS,EAAC,2HAA2H,EACrI,CAAC,EAAC,+YAA+Y,GACnZ,CACF;QACJ;YACI,wCACI,EAAE,EAAE,cAAc,UAAU,EAAE,EAC9B,aAAa,EAAC,mBAAmB,EACjC,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG;gBAEN,8BAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,wCAAwC,GAAG;gBACvE,8BAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,uCAAuC,GAAG,CAC3D;YACjB,wCACI,SAAS,EAAC,mCAAmC,EAC7C,EAAE,EAAE,eAAe,UAAU,EAAE,EAC/B,aAAa,EAAC,mBAAmB,EACjC,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG;gBAEN,8BAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,uCAAuC,GAAG;gBACtE,8BAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,sCAAsC,GAAG,CAC1D;YACjB,kCAAU,EAAE,EAAE,aAAa,UAAU,EAAE;gBACnC,8BAAM,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,CAChC,CACR,CACL,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { AssistantMessage } from "../../model.js";
3
+ type AssistantMessageProps = {
4
+ message: AssistantMessage;
5
+ };
6
+ export declare const AssistantMessageComponent: React.FC<AssistantMessageProps>;
7
+ export {};
8
+ //# sourceMappingURL=AssistantMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantMessage.d.ts","sourceRoot":"","sources":["../../../src/components/messages/AssistantMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAC;AAInE,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAmBrE,CAAC"}
@@ -0,0 +1,14 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { isErrorContents } from "../../model.js";
5
+ import { AgentIcon } from "./AgentIcon.js";
6
+ import { MessageContents } from "./MessageContents.js";
7
+ export const AssistantMessageComponent = ({ message }) => {
8
+ const classNames = cx("gd-gen-ai-chat__messages__message", "gd-gen-ai-chat__messages__message--assistant", message.cancelled && "gd-gen-ai-chat__messages__message--cancelled");
9
+ const hasError = message.content.some(isErrorContents);
10
+ return (React.createElement("div", { className: classNames },
11
+ React.createElement(AgentIcon, { loading: !message.complete, error: hasError, cancelled: message.cancelled }),
12
+ React.createElement(MessageContents, { useMarkdown: true, content: message.content, isComplete: Boolean(message.complete || message.cancelled), isCancelled: message.cancelled })));
13
+ };
14
+ //# sourceMappingURL=AssistantMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantMessage.js","sourceRoot":"","sources":["../../../src/components/messages/AssistantMessage.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAoB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,MAAM,CAAC,MAAM,yBAAyB,GAAoC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IACtF,MAAM,UAAU,GAAG,EAAE,CACjB,mCAAmC,EACnC,8CAA8C,EAC9C,OAAO,CAAC,SAAS,IAAI,8CAA8C,CACtE,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEvD,OAAO,CACH,6BAAK,SAAS,EAAE,UAAU;QACtB,oBAAC,SAAS,IAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,GAAI;QACxF,oBAAC,eAAe,IACZ,WAAW,QACX,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,EAC1D,WAAW,EAAE,OAAO,CAAC,SAAS,GAChC,CACA,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { Contents } from "../../model.js";
3
+ type MessageContentsProps = {
4
+ content: Contents[];
5
+ isComplete?: boolean;
6
+ isCancelled?: boolean;
7
+ useMarkdown?: boolean;
8
+ };
9
+ export declare const MessageContents: React.FC<MessageContentsProps>;
10
+ export {};
11
+ //# sourceMappingURL=MessageContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageContents.d.ts","sourceRoot":"","sources":["../../../src/components/messages/MessageContents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAS1C,KAAK,oBAAoB,GAAG;IACxB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA6C1D,CAAC"}
@@ -0,0 +1,37 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import Skeleton from "react-loading-skeleton";
4
+ import { TextContentsComponent } from "./contents/TextContents.js";
5
+ import { ErrorContentsComponent } from "./contents/ErrorContents.js";
6
+ import { RoutingContentsComponent } from "./contents/RoutingContents.js";
7
+ import { SearchContentsComponent } from "./contents/SearchContents.js";
8
+ import { VisualizationContentsComponent } from "./contents/VisualizationContents.js";
9
+ import { Typography } from "@gooddata/sdk-ui-kit";
10
+ import { FormattedMessage } from "react-intl";
11
+ export const MessageContents = ({ content, isComplete = true, isCancelled = false, useMarkdown = false, }) => {
12
+ return (React.createElement("div", { className: "gd-gen-ai-chat__messages__contents" },
13
+ content.map((item, index) => {
14
+ const type = item.type;
15
+ switch (type) {
16
+ case "text":
17
+ return React.createElement(TextContentsComponent, { useMarkdown: useMarkdown, content: item, key: index });
18
+ case "error":
19
+ return (React.createElement(ErrorContentsComponent, { useMarkdown: useMarkdown, content: item, key: index }));
20
+ case "routing":
21
+ return (React.createElement(RoutingContentsComponent, { useMarkdown: useMarkdown, content: item, key: index }));
22
+ case "search":
23
+ return (React.createElement(SearchContentsComponent, { useMarkdown: useMarkdown, content: item, key: index }));
24
+ case "visualization":
25
+ return (React.createElement(VisualizationContentsComponent, { useMarkdown: useMarkdown, content: item, key: index }));
26
+ default:
27
+ return assertNever(type);
28
+ }
29
+ }),
30
+ !isComplete ? React.createElement(Skeleton, null) : null,
31
+ isCancelled ? (React.createElement(Typography, { tagName: "p" },
32
+ React.createElement(FormattedMessage, { id: "gd.gen-ai.state.cancelled" }))) : null));
33
+ };
34
+ const assertNever = (value) => {
35
+ throw new Error(`Unknown content type: ${value}`);
36
+ };
37
+ //# sourceMappingURL=MessageContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageContents.js","sourceRoot":"","sources":["../../../src/components/messages/MessageContents.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAS9C,MAAM,CAAC,MAAM,eAAe,GAAmC,CAAC,EAC5D,OAAO,EACP,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,KAAK,EACnB,WAAW,GAAG,KAAK,GACtB,EAAE,EAAE;IACD,OAAO,CACH,6BAAK,SAAS,EAAC,oCAAoC;QAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,QAAQ,IAAI,EAAE,CAAC;gBACX,KAAK,MAAM;oBACP,OAAO,oBAAC,qBAAqB,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAI,CAAC;gBAC1F,KAAK,OAAO;oBACR,OAAO,CACH,oBAAC,sBAAsB,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAI,CAClF,CAAC;gBACN,KAAK,SAAS;oBACV,OAAO,CACH,oBAAC,wBAAwB,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAI,CACpF,CAAC;gBACN,KAAK,QAAQ;oBACT,OAAO,CACH,oBAAC,uBAAuB,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAI,CACnF,CAAC;gBACN,KAAK,eAAe;oBAChB,OAAO,CACH,oBAAC,8BAA8B,IAC3B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,IAAI,EACb,GAAG,EAAE,KAAK,GACZ,CACL,CAAC;gBACN;oBACI,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACL,CAAC,CAAC;QACD,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAC,QAAQ,OAAG,CAAC,CAAC,CAAC,IAAI;QACjC,WAAW,CAAC,CAAC,CAAC,CACX,oBAAC,UAAU,IAAC,OAAO,EAAC,GAAG;YACnB,oBAAC,gBAAgB,IAAC,EAAE,EAAC,2BAA2B,GAAG,CAC1C,CAChB,CAAC,CAAC,CAAC,IAAI,CACN,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAS,EAAE;IACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { UserMessage } from "../../model.js";
3
+ type UserMessageProps = {
4
+ message: UserMessage;
5
+ };
6
+ export declare const UserMessageComponent: React.FC<UserMessageProps>;
7
+ export {};
8
+ //# sourceMappingURL=UserMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMessage.d.ts","sourceRoot":"","sources":["../../../src/components/messages/UserMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,KAAK,gBAAgB,GAAG;IACpB,OAAO,EAAE,WAAW,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAY3D,CAAC"}
@@ -0,0 +1,10 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { MessageContents } from "./MessageContents.js";
5
+ export const UserMessageComponent = ({ message }) => {
6
+ const classNames = cx("gd-gen-ai-chat__messages__message", "gd-gen-ai-chat__messages__message--user", message.cancelled && "gd-gen-ai-chat__messages__message--cancelled");
7
+ return (React.createElement("div", { className: classNames },
8
+ React.createElement(MessageContents, { content: message.content })));
9
+ };
10
+ //# sourceMappingURL=UserMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMessage.js","sourceRoot":"","sources":["../../../src/components/messages/UserMessage.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD,MAAM,CAAC,MAAM,oBAAoB,GAA+B,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5E,MAAM,UAAU,GAAG,EAAE,CACjB,mCAAmC,EACnC,yCAAyC,EACzC,OAAO,CAAC,SAAS,IAAI,8CAA8C,CACtE,CAAC;IAEF,OAAO,CACH,6BAAK,SAAS,EAAE,UAAU;QACtB,oBAAC,eAAe,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAI,CAC3C,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { ErrorContents } from "../../../model.js";
3
+ export type ErrorContentsProps = {
4
+ content: ErrorContents;
5
+ useMarkdown?: boolean;
6
+ };
7
+ export declare const ErrorContentsComponent: React.FC<ErrorContentsProps>;
8
+ //# sourceMappingURL=ErrorContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/ErrorContents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAQ/D,CAAC"}
@@ -0,0 +1,10 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { MarkdownComponent } from "./Markdown.js";
5
+ export const ErrorContentsComponent = ({ content, useMarkdown }) => {
6
+ const className = cx("gd-gen-ai-chat__messages__content", "gd-gen-ai-chat__messages__content--error");
7
+ return (React.createElement("div", { className: className },
8
+ React.createElement(MarkdownComponent, { allowMarkdown: useMarkdown }, content.text)));
9
+ };
10
+ //# sourceMappingURL=ErrorContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorContents.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/ErrorContents.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,MAAM,CAAC,MAAM,sBAAsB,GAAiC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;IAC7F,MAAM,SAAS,GAAG,EAAE,CAAC,mCAAmC,EAAE,0CAA0C,CAAC,CAAC;IAEtG,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS;QACrB,oBAAC,iBAAiB,IAAC,aAAa,EAAE,WAAW,IAAG,OAAO,CAAC,IAAI,CAAqB,CAC/E,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ type MarkdownComponentProps = {
3
+ children: string;
4
+ allowMarkdown?: boolean;
5
+ };
6
+ export declare const MarkdownComponent: React.FC<MarkdownComponentProps>;
7
+ export {};
8
+ //# sourceMappingURL=Markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/Markdown.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,KAAK,sBAAsB,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAM9D,CAAC"}
@@ -0,0 +1,18 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import Markdown from "react-markdown";
4
+ import { Hyperlink, Typography } from "@gooddata/sdk-ui-kit";
5
+ const componentMap = {
6
+ p: ({ children }) => React.createElement(Typography, { tagName: "p" }, children),
7
+ a: ({ children, href }) => React.createElement(Hyperlink, { href: href ?? "", text: children }),
8
+ h1: ({ children }) => React.createElement(Typography, { tagName: "h1" }, children),
9
+ h2: ({ children }) => React.createElement(Typography, { tagName: "h2" }, children),
10
+ h3: ({ children }) => React.createElement(Typography, { tagName: "h3" }, children),
11
+ };
12
+ export const MarkdownComponent = ({ children, allowMarkdown = false }) => {
13
+ if (allowMarkdown) {
14
+ return React.createElement(Markdown, { components: componentMap }, children);
15
+ }
16
+ return React.createElement(Typography, { tagName: "p" }, children);
17
+ };
18
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/Markdown.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAwB,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,YAAY,GAAe;IAC7B,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,oBAAC,UAAU,IAAC,OAAO,EAAC,GAAG,IAAE,QAAQ,CAAc;IACpE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,oBAAC,SAAS,IAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,QAAkB,GAAI;IACpF,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,oBAAC,UAAU,IAAC,OAAO,EAAC,IAAI,IAAE,QAAQ,CAAc;IACtE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,oBAAC,UAAU,IAAC,OAAO,EAAC,IAAI,IAAE,QAAQ,CAAc;IACtE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,oBAAC,UAAU,IAAC,OAAO,EAAC,IAAI,IAAE,QAAQ,CAAc;CACzE,CAAC;AAOF,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,EAAE,EAAE,EAAE;IACvG,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,oBAAC,QAAQ,IAAC,UAAU,EAAE,YAAY,IAAG,QAAQ,CAAY,CAAC;IACrE,CAAC;IAED,OAAO,oBAAC,UAAU,IAAC,OAAO,EAAC,GAAG,IAAE,QAAQ,CAAc,CAAC;AAC3D,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { RoutingContents } from "../../../model.js";
3
+ export type RoutingContentsProps = {
4
+ content: RoutingContents;
5
+ useMarkdown?: boolean;
6
+ };
7
+ export declare const RoutingContentsComponent: React.FC<RoutingContentsProps>;
8
+ //# sourceMappingURL=RoutingContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/RoutingContents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAQnE,CAAC"}
@@ -0,0 +1,10 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { MarkdownComponent } from "./Markdown.js";
5
+ export const RoutingContentsComponent = ({ content, useMarkdown }) => {
6
+ const className = cx("gd-gen-ai-chat__messages__content", "gd-gen-ai-chat__messages__content--routing");
7
+ return (React.createElement("div", { className: className },
8
+ React.createElement(MarkdownComponent, { allowMarkdown: useMarkdown }, content.text)));
9
+ };
10
+ //# sourceMappingURL=RoutingContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingContents.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/RoutingContents.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,MAAM,CAAC,MAAM,wBAAwB,GAAmC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;IACjG,MAAM,SAAS,GAAG,EAAE,CAAC,mCAAmC,EAAE,4CAA4C,CAAC,CAAC;IAExG,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS;QACrB,oBAAC,iBAAiB,IAAC,aAAa,EAAE,WAAW,IAAG,OAAO,CAAC,IAAI,CAAqB,CAC/E,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { SearchContents } from "../../../model.js";
3
+ export type SearchContentsProps = {
4
+ content: SearchContents;
5
+ useMarkdown?: boolean;
6
+ };
7
+ export declare const SearchContentsComponent: React.FC<SearchContentsProps>;
8
+ //# sourceMappingURL=SearchContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/SearchContents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnD,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAWjE,CAAC"}
@@ -0,0 +1,14 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { replaceLinks } from "./replaceLinks.js";
5
+ import { MarkdownComponent } from "./Markdown.js";
6
+ export const SearchContentsComponent = ({ content, useMarkdown }) => {
7
+ const className = cx("gd-gen-ai-chat__messages__content", "gd-gen-ai-chat__messages__content--search");
8
+ const text = React.useMemo(() => {
9
+ return replaceLinks(content.text, content.searchResults);
10
+ }, [content.text, content.searchResults]);
11
+ return (React.createElement("div", { className: className },
12
+ React.createElement(MarkdownComponent, { allowMarkdown: useMarkdown }, text)));
13
+ };
14
+ //# sourceMappingURL=SearchContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchContents.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/SearchContents.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,MAAM,CAAC,MAAM,uBAAuB,GAAkC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;IAC/F,MAAM,SAAS,GAAG,EAAE,CAAC,mCAAmC,EAAE,2CAA2C,CAAC,CAAC;IACvG,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5B,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAE1C,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS;QACrB,oBAAC,iBAAiB,IAAC,aAAa,EAAE,WAAW,IAAG,IAAI,CAAqB,CACvE,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { TextContents } from "../../../model.js";
3
+ export type TextContentsProps = {
4
+ content: TextContents;
5
+ useMarkdown?: boolean;
6
+ };
7
+ export declare const TextContentsComponent: React.FC<TextContentsProps>;
8
+ //# sourceMappingURL=TextContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/TextContents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAQ7D,CAAC"}
@@ -0,0 +1,10 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { MarkdownComponent } from "./Markdown.js";
5
+ export const TextContentsComponent = ({ content, useMarkdown = false }) => {
6
+ const className = cx("gd-gen-ai-chat__messages__content", "gd-gen-ai-chat__messages__content--text");
7
+ return (React.createElement("div", { className: className },
8
+ React.createElement(MarkdownComponent, { allowMarkdown: useMarkdown }, content.text)));
9
+ };
10
+ //# sourceMappingURL=TextContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextContents.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/TextContents.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,MAAM,CAAC,MAAM,qBAAqB,GAAgC,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK,EAAE,EAAE,EAAE;IACnG,MAAM,SAAS,GAAG,EAAE,CAAC,mCAAmC,EAAE,yCAAyC,CAAC,CAAC;IAErG,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS;QACrB,oBAAC,iBAAiB,IAAC,aAAa,EAAE,WAAW,IAAG,OAAO,CAAC,IAAI,CAAqB,CAC/E,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { VisualizationContents } from "../../../model.js";
3
+ export type VisualizationContentsProps = {
4
+ content: VisualizationContents;
5
+ useMarkdown?: boolean;
6
+ };
7
+ export declare const VisualizationContentsComponent: React.FC<VisualizationContentsProps>;
8
+ //# sourceMappingURL=VisualizationContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualizationContents.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/VisualizationContents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA+C/E,CAAC"}
@@ -0,0 +1,53 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import cx from "classnames";
4
+ import { PivotTable } from "@gooddata/sdk-ui-pivot";
5
+ import { BarChart, ColumnChart, Headline, LineChart, PieChart } from "@gooddata/sdk-ui-charts";
6
+ import { useExecution } from "./useExecution.js";
7
+ import { VisualizationErrorBoundary } from "./VisualizationErrorBoundary.js";
8
+ import { MarkdownComponent } from "./Markdown.js";
9
+ export const VisualizationContentsComponent = ({ content, useMarkdown, }) => {
10
+ const className = cx("gd-gen-ai-chat__messages__content", "gd-gen-ai-chat__messages__content--visualization");
11
+ const visualization = content.createdVisualizations?.[0];
12
+ const { metrics, dimensions } = useExecution(visualization);
13
+ return (React.createElement("div", { className: className },
14
+ React.createElement(MarkdownComponent, { allowMarkdown: useMarkdown }, content.text),
15
+ visualization ? (React.createElement("div", { className: "gd-gen-ai-chat__visualization" },
16
+ React.createElement("div", { className: "gd-gen-ai-chat__visualization__wrapper" },
17
+ React.createElement(VisualizationErrorBoundary, null, (() => {
18
+ switch (visualization.visualizationType) {
19
+ case "BAR":
20
+ return renderBarChart(metrics, dimensions);
21
+ case "COLUMN":
22
+ return renderColumnChart(metrics, dimensions);
23
+ case "LINE":
24
+ return renderLineChart(metrics, dimensions);
25
+ case "PIE":
26
+ return renderPieChart(metrics, dimensions);
27
+ case "TABLE":
28
+ return renderTable(metrics, dimensions);
29
+ case "HEADLINE":
30
+ return renderHeadline(metrics, dimensions);
31
+ default:
32
+ return assertNever(visualization.visualizationType);
33
+ }
34
+ })())),
35
+ React.createElement("div", { className: "gd-gen-ai-chat__messages__visualization__title" },
36
+ React.createElement(MarkdownComponent, { allowMarkdown: useMarkdown }, visualization.title)))) : null));
37
+ };
38
+ const assertNever = (value) => {
39
+ throw new Error("Unknown visualization type: " + value);
40
+ };
41
+ const renderBarChart = (metrics, dimensions) => (React.createElement(BarChart, { height: 300, measures: metrics, viewBy: [dimensions[0], dimensions[1]].filter(Boolean), stackBy: metrics.length <= 1 ? dimensions[2] : undefined, config: {
42
+ // Better visibility with stacked bars if there are multiple metrics and dimensions
43
+ stackMeasures: metrics.length > 1 && dimensions.length === 2,
44
+ } }));
45
+ const renderColumnChart = (metrics, dimensions) => (React.createElement(ColumnChart, { height: 300, measures: metrics, viewBy: [dimensions[0], dimensions[1]].filter(Boolean), stackBy: metrics.length <= 1 ? dimensions[2] : undefined, config: {
46
+ // Better visibility with stacked bars if there are multiple metrics and dimensions
47
+ stackMeasures: metrics.length > 1 && dimensions.length === 2,
48
+ } }));
49
+ const renderLineChart = (metrics, dimensions) => (React.createElement(LineChart, { height: 300, measures: metrics, trendBy: dimensions[0], segmentBy: metrics.length <= 1 ? dimensions[1] : undefined }));
50
+ const renderPieChart = (metrics, dimensions) => (React.createElement(PieChart, { height: 300, measures: metrics, viewBy: metrics.length <= 1 ? dimensions[0] : undefined }));
51
+ const renderTable = (metrics, dimensions) => (React.createElement(PivotTable, { measures: metrics, rows: dimensions }));
52
+ const renderHeadline = (metrics, _dimensions) => (React.createElement(Headline, { height: 300, primaryMeasure: metrics[0], secondaryMeasures: [metrics[1], metrics[2]].filter(Boolean) }));
53
+ //# sourceMappingURL=VisualizationContents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualizationContents.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/VisualizationContents.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE/F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,MAAM,CAAC,MAAM,8BAA8B,GAAyC,CAAC,EACjF,OAAO,EACP,WAAW,GACd,EAAE,EAAE;IACD,MAAM,SAAS,GAAG,EAAE,CAChB,mCAAmC,EACnC,kDAAkD,CACrD,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAE5D,OAAO,CACH,6BAAK,SAAS,EAAE,SAAS;QACrB,oBAAC,iBAAiB,IAAC,aAAa,EAAE,WAAW,IAAG,OAAO,CAAC,IAAI,CAAqB;QAChF,aAAa,CAAC,CAAC,CAAC,CACb,6BAAK,SAAS,EAAC,+BAA+B;YAC1C,6BAAK,SAAS,EAAC,wCAAwC;gBACnD,oBAAC,0BAA0B,QACtB,CAAC,GAAG,EAAE;oBACH,QAAQ,aAAa,CAAC,iBAAiB,EAAE,CAAC;wBACtC,KAAK,KAAK;4BACN,OAAO,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC/C,KAAK,QAAQ;4BACT,OAAO,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAClD,KAAK,MAAM;4BACP,OAAO,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAChD,KAAK,KAAK;4BACN,OAAO,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC/C,KAAK,OAAO;4BACR,OAAO,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC5C,KAAK,UAAU;4BACX,OAAO,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC/C;4BACI,OAAO,WAAW,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBAC5D,CAAC;gBACL,CAAC,CAAC,EAAE,CACqB,CAC3B;YACN,6BAAK,SAAS,EAAC,gDAAgD;gBAC3D,oBAAC,iBAAiB,IAAC,aAAa,EAAE,WAAW,IACxC,aAAa,CAAC,KAAK,CACJ,CAClB,CACJ,CACT,CAAC,CAAC,CAAC,IAAI,CACN,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAY,EAAS,EAAE;IACxC,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,KAAK,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAmB,EAAE,UAAwB,EAAE,EAAE,CAAC,CACtE,oBAAC,QAAQ,IACL,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EACtD,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACxD,MAAM,EAAE;QACJ,mFAAmF;QACnF,aAAa,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;KAC/D,GACH,CACL,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,OAAmB,EAAE,UAAwB,EAAE,EAAE,CAAC,CACzE,oBAAC,WAAW,IACR,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EACtD,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACxD,MAAM,EAAE;QACJ,mFAAmF;QACnF,aAAa,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;KAC/D,GACH,CACL,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAE,UAAwB,EAAE,EAAE,CAAC,CACvE,oBAAC,SAAS,IACN,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EACtB,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAC5D,CACL,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAmB,EAAE,UAAwB,EAAE,EAAE,CAAC,CACtE,oBAAC,QAAQ,IAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAI,CACxG,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAmB,EAAE,UAAwB,EAAE,EAAE,CAAC,CACnE,oBAAC,UAAU,IAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAI,CACtD,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAmB,EAAE,WAAyB,EAAE,EAAE,CAAC,CACvE,oBAAC,QAAQ,IACL,MAAM,EAAE,GAAG,EACX,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,EAC1B,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAC7D,CACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import { WrappedComponentProps } from "react-intl";
3
+ type ErrorBoundaryProps = WrappedComponentProps & {
4
+ children: React.ReactNode;
5
+ };
6
+ export declare const VisualizationErrorBoundary: React.FC<import("react-intl").WithIntlProps<ErrorBoundaryProps>> & {
7
+ WrappedComponent: React.ComponentType<ErrorBoundaryProps>;
8
+ };
9
+ export {};
10
+ //# sourceMappingURL=VisualizationErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualizationErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/VisualizationErrorBoundary.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAc,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/D,KAAK,kBAAkB,GAAG,qBAAqB,GAAG;IAC9C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AA2BF,eAAO,MAAM,0BAA0B;;CAAkD,CAAC"}
@@ -0,0 +1,22 @@
1
+ // (C) 2024 GoodData Corporation
2
+ import React from "react";
3
+ import { extractError } from "../../../store/sideEffects/utils.js";
4
+ import { ErrorComponent } from "@gooddata/sdk-ui";
5
+ import { injectIntl } from "react-intl";
6
+ class VisualizationErrorBoundaryComponent extends React.Component {
7
+ constructor(props) {
8
+ super(props);
9
+ this.state = { error: "" };
10
+ }
11
+ static getDerivedStateFromError(error) {
12
+ return { error: extractError(error) };
13
+ }
14
+ render() {
15
+ if (this.state.error) {
16
+ return (React.createElement(ErrorComponent, { message: this.props.intl.formatMessage({ id: "gd.gen-ai.global-error" }) }));
17
+ }
18
+ return this.props.children;
19
+ }
20
+ }
21
+ export const VisualizationErrorBoundary = injectIntl(VisualizationErrorBoundaryComponent);
22
+ //# sourceMappingURL=VisualizationErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisualizationErrorBoundary.js","sourceRoot":"","sources":["../../../../src/components/messages/contents/VisualizationErrorBoundary.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAyB,MAAM,YAAY,CAAC;AAU/D,MAAM,mCAAoC,SAAQ,KAAK,CAAC,SAAiD;IACrG,YAAY,KAAyB;QACjC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,KAAc;QAC1C,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CACH,oBAAC,cAAc,IAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,wBAAwB,EAAE,CAAC,GAAI,CAC/F,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC,mCAAmC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ISemanticSearchResultItem } from "@gooddata/sdk-model";
2
+ export declare const replaceLinks: (text: string, foundObjects: ISemanticSearchResultItem[]) => string;
3
+ //# sourceMappingURL=replaceLinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replaceLinks.d.ts","sourceRoot":"","sources":["../../../../src/components/messages/contents/replaceLinks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAgBhE,eAAO,MAAM,YAAY,SAAU,MAAM,gBAAgB,yBAAyB,EAAE,KAAG,MAmBtF,CAAC"}
@@ -0,0 +1,30 @@
1
+ // (C) 2024 GoodData Corporation
2
+ const getFoundObjectLink = (obj) => {
3
+ switch (obj.type) {
4
+ case "visualization":
5
+ return `/analyze/#/${obj.workspaceId}/${obj.id}/edit`;
6
+ case "dashboard":
7
+ return `/dashboards/#/workspace/${obj.workspaceId}/dashboard/${obj.id}`;
8
+ case "metric":
9
+ return `/metrics/#/${obj.workspaceId}/metric/${obj.id}`;
10
+ default:
11
+ return null;
12
+ }
13
+ };
14
+ const rx = /\{[^}][^.}]*\.[^}]+\}/g;
15
+ export const replaceLinks = (text, foundObjects) => {
16
+ return text.replace(rx, (chunk) => {
17
+ const [objectType, ...objectIdChunks] = chunk.replace("{", "").replace("}", "").split(".");
18
+ const objectId = objectIdChunks.join(".");
19
+ const obj = foundObjects.find((foundObj) => foundObj.type === objectType && foundObj.id === objectId);
20
+ if (!obj) {
21
+ return chunk;
22
+ }
23
+ const href = getFoundObjectLink(obj);
24
+ if (!href) {
25
+ return chunk;
26
+ }
27
+ return `[${obj.title}](${href})`;
28
+ });
29
+ };
30
+ //# sourceMappingURL=replaceLinks.js.map