intellinum-chatbot 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +2 -0
  2. package/dist/index.d.mts +2 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +61 -59
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +62 -60
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +4 -1
  9. package/packagejson-dev.json +0 -43
  10. package/packagejson-prod.json +0 -43
  11. package/src/TesHello.tsx +0 -12
  12. package/src/assets/icons/AttachIcon.tsx +0 -29
  13. package/src/assets/icons/ChatActionCardIcon.tsx +0 -31
  14. package/src/assets/icons/ClockIcon.tsx +0 -33
  15. package/src/assets/icons/DeleteIcon.tsx +0 -22
  16. package/src/assets/icons/EditIcon.tsx +0 -29
  17. package/src/assets/icons/FlexaIcon.tsx +0 -36
  18. package/src/assets/icons/MenuFoldLineIcon.tsx +0 -31
  19. package/src/assets/icons/MessageIcon.tsx +0 -39
  20. package/src/assets/icons/SearchIcon.tsx +0 -23
  21. package/src/assets/icons/SendIcon.tsx +0 -29
  22. package/src/assets/icons/SettingGearIcon.tsx +0 -31
  23. package/src/atoms/AdminChatResponse.tsx +0 -36
  24. package/src/atoms/Button.tsx +0 -9
  25. package/src/atoms/ChatAction.tsx +0 -112
  26. package/src/atoms/CustomLoading/CustomLoading.test.tsx +0 -44
  27. package/src/atoms/CustomLoading/customLoading.css +0 -43
  28. package/src/atoms/CustomLoading/index.tsx +0 -12
  29. package/src/atoms/InputForm.tsx +0 -31
  30. package/src/atoms/SuggestionChat.tsx +0 -9
  31. package/src/atoms/UserChatResponse.tsx +0 -20
  32. package/src/chat-lib.css +0 -983
  33. package/src/index.css +0 -18
  34. package/src/index.css.d.ts +0 -2
  35. package/src/index.tsx +0 -21
  36. package/src/molecules/ChatHistory.tsx +0 -127
  37. package/src/molecules/ChatSender.tsx +0 -100
  38. package/src/molecules/Chatting.tsx +0 -106
  39. package/src/molecules/ChattingStream.tsx +0 -114
  40. package/src/organisms/IntellinumChat.tsx +0 -9
  41. package/src/providers/ChatCotextType.tsx +0 -31
  42. package/src/providers/ChatProvider.tsx +0 -142
  43. package/src/providers/ChatStreamProvider.tsx +0 -99
  44. package/src/utils/TwMerge.tsx +0 -6
  45. package/src/utils/api.tsx +0 -116
  46. package/src/utils/stream.ts +0 -76
  47. package/tailwind.config.js +0 -71
  48. package/tsconfig.json +0 -13
  49. package/tsup.config.ts +0 -11
package/README.md CHANGED
@@ -22,6 +22,8 @@ export default function Home() {
22
22
  return (
23
23
  <div className="w-full">
24
24
  <ChatStreamProvider
25
+ COMPANY="Your company name"
26
+ USERNAME="Your username"
25
27
  STREAM_URL="Your stream url"
26
28
  PROXY_URL="your proxy url"
27
29
  TOKEN="your token"
package/dist/index.d.mts CHANGED
@@ -75,6 +75,8 @@ type Props$1 = {
75
75
  PROXY_URL: string;
76
76
  STREAM_URL: string;
77
77
  TOKEN: string;
78
+ COMPANY: string;
79
+ USERNAME: string;
78
80
  children: React$1.ReactNode;
79
81
  };
80
82
  declare const ChatStreamProvider: (props: Props$1) => react_jsx_runtime.JSX.Element;
package/dist/index.d.ts CHANGED
@@ -75,6 +75,8 @@ type Props$1 = {
75
75
  PROXY_URL: string;
76
76
  STREAM_URL: string;
77
77
  TOKEN: string;
78
+ COMPANY: string;
79
+ USERNAME: string;
78
80
  children: React$1.ReactNode;
79
81
  };
80
82
  declare const ChatStreamProvider: (props: Props$1) => react_jsx_runtime.JSX.Element;
package/dist/index.js CHANGED
@@ -1067,6 +1067,9 @@ var handleCreateApiStream = (PROXY_URL, TOKEN) => {
1067
1067
  console.log("parse error:", data);
1068
1068
  }
1069
1069
  }
1070
+ if (event === "end") {
1071
+ onChunk(event, data);
1072
+ }
1070
1073
  }
1071
1074
  }
1072
1075
  return "done";
@@ -1081,6 +1084,7 @@ var API_STREAM = {
1081
1084
  var stream_default = API_STREAM;
1082
1085
 
1083
1086
  // src/providers/ChatStreamProvider.tsx
1087
+ var import_uuid2 = require("uuid");
1084
1088
  var import_jsx_runtime20 = require("react/jsx-runtime");
1085
1089
  var ChatStreamContext = import_react6.default.createContext(null);
1086
1090
  var ChatStreamProvider = (props) => {
@@ -1090,55 +1094,64 @@ var ChatStreamProvider = (props) => {
1090
1094
  const [chats, setChats] = (0, import_react6.useState)([]);
1091
1095
  const [isLoading, setIsLoading] = (0, import_react6.useState)(true);
1092
1096
  const [isLoadingResponse, setIsLoadingResponse] = (0, import_react6.useState)(false);
1097
+ const chatUuid = (0, import_react6.useMemo)(() => (0, import_uuid2.v4)(), []);
1093
1098
  const handleSendChat = (message) => __async(null, null, function* () {
1099
+ let lastEventData = "";
1100
+ let isReponseError = false;
1101
+ let errorMessage = "";
1102
+ setChats((prev) => [
1103
+ ...prev,
1104
+ {
1105
+ message,
1106
+ type: "user",
1107
+ createDate: /* @__PURE__ */ new Date(),
1108
+ status: "COMPLETE"
1109
+ },
1110
+ {
1111
+ type: "bot",
1112
+ status: "RUNNING",
1113
+ createDate: /* @__PURE__ */ new Date(),
1114
+ message: ""
1115
+ }
1116
+ ]);
1094
1117
  setIsLoadingResponse(true);
1095
1118
  try {
1096
- const res = yield apiStream.post(
1119
+ yield apiStream.post(
1097
1120
  STREAM_URL,
1098
1121
  {
1099
1122
  input: {
1100
1123
  question: message,
1101
- company: "SIMMONS_WMS_DEV",
1102
- username: "Saikumar.Kenduri"
1124
+ company: props.COMPANY,
1125
+ username: props.USERNAME
1103
1126
  },
1104
1127
  config: {
1105
1128
  configurable: {
1106
- thread_id: "thread123"
1129
+ thread_id: chatUuid
1107
1130
  }
1108
1131
  }
1109
1132
  },
1110
1133
  (event, data) => {
1111
1134
  var _a;
1112
- if (event === "status") {
1113
- const status = data.status;
1114
- if (status === "RUNNING" && !isChatCreated.current) {
1115
- isChatCreated.current = true;
1116
- setChats((prev) => [
1117
- ...prev,
1118
- {
1119
- input: message,
1120
- output: "",
1121
- jobId: data.jobId,
1122
- status,
1123
- createDate: /* @__PURE__ */ new Date(),
1124
- endDate: null
1125
- }
1126
- ]);
1135
+ if (event === "end") {
1136
+ if (!isReponseError) {
1137
+ setChats((prev) => {
1138
+ const updated = [...prev].slice(0, -1);
1139
+ return [...updated, { message: lastEventData, status: "COMPLETE", createDate: /* @__PURE__ */ new Date(), type: "bot" }];
1140
+ });
1141
+ } else {
1142
+ setChats((prev) => {
1143
+ const updated = [...prev].slice(0, -1);
1144
+ return [...updated, { message: errorMessage, status: "COMPLETE", createDate: /* @__PURE__ */ new Date(), type: "bot" }];
1145
+ });
1127
1146
  }
1147
+ isChatCreated.current = false;
1128
1148
  }
1129
1149
  if (event === "data") {
1130
- const content = (_a = data[0]) == null ? void 0 : _a.content;
1131
- if (!content || content[0].text) return;
1132
- setChats((prev) => {
1133
- const updated = [...prev];
1134
- const lastIndex = updated.length - 1;
1135
- if (!updated[lastIndex]) return prev;
1136
- updated[lastIndex].output = content;
1137
- updated[lastIndex].status = "COMPLETE";
1138
- updated[lastIndex].endDate = /* @__PURE__ */ new Date();
1139
- return updated;
1140
- });
1141
- isChatCreated.current = false;
1150
+ lastEventData = (_a = data[0]) == null ? void 0 : _a.content;
1151
+ }
1152
+ if (event === "error") {
1153
+ isReponseError = true;
1154
+ errorMessage = (data == null ? void 0 : data.error) || "Something went wrong";
1142
1155
  }
1143
1156
  }
1144
1157
  );
@@ -1186,14 +1199,6 @@ var ChattingStream = (props) => {
1186
1199
  el.scrollTop = el.scrollHeight;
1187
1200
  }
1188
1201
  }, [chats, isUserAtBottom]);
1189
- (0, import_react7.useEffect)(() => {
1190
- if (!isLoadingResponse && chats.length > 0) {
1191
- const lastChat = chats[chats.length - 1];
1192
- if (lastChat.status === "COMPLETE") {
1193
- props.onResponseChat && props.onResponseChat(lastChat);
1194
- }
1195
- }
1196
- }, [chats, isLoadingResponse]);
1197
1202
  (0, import_react7.useEffect)(() => {
1198
1203
  var _a;
1199
1204
  (_a = bottomRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
@@ -1214,30 +1219,27 @@ var ChattingStream = (props) => {
1214
1219
  "How i can assist you today?"
1215
1220
  ] })
1216
1221
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "ic-w-full ic-max-w-5xl ic-flex ic-flex-col ic-space-y-4 ", children: [
1217
- chats.map((item) => {
1218
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1222
+ chats.map((item, i) => {
1223
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1219
1224
  "div",
1220
1225
  {
1221
1226
  className: " ic-flex ic-flex-col ic-space-y-4 ic-w-full ",
1222
- children: [
1223
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: " ic-w-full ic-flex ic-justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "ic-w-full ic-flex ic-justify-end ic-max-w-4xl ic-pr-4 ic-pl-20", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1224
- UserChatResponse_default,
1225
- {
1226
- message: item.input,
1227
- time: (0, import_dayjs2.default)(item.createDate).format("HH:mm")
1228
- }
1229
- ) }) }),
1230
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: " ic-w-full ic-flex ic-justify-start ic-pr-20", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "ic-w-full ic-max-w-4xl", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1231
- AdminChatResponse_default,
1232
- {
1233
- message: item.output,
1234
- isLoading: item.status === "RUNNING",
1235
- time: (0, import_dayjs2.default)(item.endDate).format("HH:mm")
1236
- }
1237
- ) }) })
1238
- ]
1227
+ children: item.type === "user" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: " ic-w-full ic-flex ic-justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "ic-w-full ic-flex ic-justify-end ic-max-w-4xl ic-pr-4 ic-pl-20", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1228
+ UserChatResponse_default,
1229
+ {
1230
+ message: item.message,
1231
+ time: (0, import_dayjs2.default)(item.createDate).format("HH:mm")
1232
+ }
1233
+ ) }) }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: " ic-w-full ic-flex ic-justify-start ic-pr-20", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "ic-w-full ic-max-w-4xl", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1234
+ AdminChatResponse_default,
1235
+ {
1236
+ message: item.message,
1237
+ isLoading: item.status === "RUNNING",
1238
+ time: (0, import_dayjs2.default)(item.createDate).format("HH:mm")
1239
+ }
1240
+ ) }) })
1239
1241
  },
1240
- `chat-response-${item.jobId}`
1242
+ `chat-response-${i}`
1241
1243
  );
1242
1244
  }),
1243
1245
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref: bottomRef })
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/organisms/IntellinumChat.tsx","../src/molecules/ChatSender.tsx","../src/assets/icons/SendIcon.tsx","../src/atoms/CustomLoading/index.tsx","../src/molecules/ChatHistory.tsx","../src/assets/icons/MenuFoldLineIcon.tsx","../src/utils/TwMerge.tsx","../src/atoms/InputForm.tsx","../src/assets/icons/SearchIcon.tsx","../src/atoms/ChatAction.tsx","../src/assets/icons/MessageIcon.tsx","../src/assets/icons/EditIcon.tsx","../src/assets/icons/DeleteIcon.tsx","../src/atoms/SuggestionChat.tsx","../src/molecules/Chatting.tsx","../src/assets/icons/FlexaIcon.tsx","../src/assets/icons/ClockIcon.tsx","../src/atoms/AdminChatResponse.tsx","../src/atoms/UserChatResponse.tsx","../src/providers/ChatProvider.tsx","../src/utils/api.tsx","../src/providers/ChatStreamProvider.tsx","../src/utils/stream.ts","../src/molecules/ChattingStream.tsx"],"sourcesContent":["import \"./chat-lib.css\";\r\nimport IntellinumChat from \"./organisms/IntellinumChat\";\r\nimport ChatSender from \"./molecules/ChatSender\";\r\nimport ChatHistory from \"./molecules/ChatHistory\";\r\nimport SuggestionChat from \"./atoms/SuggestionChat\";\r\nimport Chatting from \"./molecules/Chatting\";\r\nimport ChatProvider from \"./providers/ChatProvider\";\r\nimport ChatStreamProvider from \"./providers/ChatStreamProvider\";\r\nimport ChattingStream from \"./molecules/ChattingStream\";\r\nimport { useChat } from \"./providers/ChatProvider\";\r\nexport {\r\n ChatSender,\r\n ChatHistory,\r\n SuggestionChat,\r\n Chatting,\r\n ChatProvider,\r\n useChat,\r\n ChatStreamProvider,\r\n ChattingStream,\r\n};\r\nexport default IntellinumChat;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst IntellinumChat = (props: Props) => {\r\n return <div>IntellinumChat</div>;\r\n};\r\n\r\nexport default IntellinumChat;\r\n","import { useRef, useState } from \"react\";\r\nimport AttachIcon from \"../assets/icons/AttachIcon\";\r\nimport SendIcon from \"../assets/icons/SendIcon\";\r\nimport CustomLoading from \"../atoms/CustomLoading\";\r\ntype Props = {\r\n handleSendChat: (message: string) => Promise<void>;\r\n isLoadingResponse: boolean;\r\n bottomRef?: any;\r\n};\r\n\r\nconst ChatSender = (props: Props) => {\r\n const textareaRef = useRef<any>(null);\r\n const { handleSendChat, isLoadingResponse, bottomRef } = props;\r\n const [message, setMessage] = useState(\"\");\r\n\r\n const handleInput = () => {\r\n const el = textareaRef.current;\r\n if (!el) return;\r\n\r\n el.style.height = \"auto\"; // reset dulu\r\n\r\n if (!el.value) {\r\n // kosong → kembali ke default\r\n el.style.height = \"40px\"; // misal default tinggi 1 baris\r\n el.style.overflowY = \"hidden\";\r\n return;\r\n }\r\n\r\n if (el.scrollHeight > 200) {\r\n el.style.height = \"200px\";\r\n el.style.overflowY = \"auto\"; // muncul scroll\r\n } else {\r\n el.style.height = `${el.scrollHeight}px`;\r\n el.style.overflowY = \"hidden\"; // hilang scroll\r\n }\r\n };\r\n\r\n const sendChat = async () => {\r\n if (message.length > 0 && !isLoadingResponse) {\r\n setMessage(\"\");\r\n setTimeout(() => {\r\n handleInput(); // reset height setelah message kosong\r\n }, 0);\r\n await handleSendChat(message);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={`ic-pt-4 ic-pb-2 ic-px-4 ic-w-full ic-max-w-2xl ic-bg-white ic-rounded-md ic-border ic-border-gray-200 ic-flex ic-items-start ic-justify-between ic-gap-3`}\r\n >\r\n {/* <div className=\"ic-w-9 ic-h-9 ic-shrink-0 ic-grow-0 ic-rounded-md ic-flex ic-justify-center ic-items-center ic-border ic-border-gray-300\">\r\n <AttachIcon />\r\n </div> */}\r\n <div className=\"ic-w-full \">\r\n <textarea\r\n ref={textareaRef}\r\n placeholder=\"Ask anything\"\r\n value={message}\r\n // disabled={isLoadingResponse}\r\n rows={1}\r\n onInput={handleInput}\r\n className={`w-full ic-text-sm ic-text-gray-700 ic-py-2 ic-w-full ic-px-3 focus:ic-outline-none ic-rounded-md ic-border\r\n ic-border-gray-300 ic-overflow-auto\r\n \r\n `}\r\n onChange={(e) => {\r\n setMessage(e.target.value);\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n if (e.shiftKey || isLoadingResponse) return; // Shift+Enter → baris baru\r\n\r\n e.preventDefault(); // cegah \\n\r\n sendChat();\r\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }}\r\n />\r\n </div>\r\n {isLoadingResponse ? (\r\n <div className=\"ic-mt-4\">\r\n <CustomLoading size=\"8px\" />\r\n </div>\r\n ) : (\r\n <div\r\n className={`${message.length < 1 || isLoadingResponse ? \"ic-bg-gray-400\" : \"ic-bg-primary-500\"} ic-mt-1 ic-shrink-0 ic-grow-0 ic-w-9 ic-h-9 ic-rounded-md ic-flex ic-justify-center ic-items-center ic-border ic-border-gray-300`}\r\n onClick={() => {\r\n sendChat();\r\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }}\r\n >\r\n <SendIcon />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatSender;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SendIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1096_2365)\">\r\n <path\r\n d=\"M1.60252 7.80845C1.17752 7.63761 1.18252 7.38345 1.63085 7.23428L17.5358 1.93261C17.9767 1.78595 18.2292 2.03262 18.1059 2.46428L13.5608 18.3693C13.4358 18.8101 13.165 18.8301 12.9633 18.4276L9.16668 10.8334L1.60252 7.80845ZM5.67752 7.64178L10.3742 9.52095L12.9075 14.5893L15.8625 4.24762L5.67668 7.64178H5.67752Z\"\r\n fill=\"#FBFBFD\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1096_2365\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default SendIcon;\r\n","import \"./customLoading.css\";\r\nfunction CustomLoading({ size = \"12px\" }) {\r\n return (\r\n <div className=\"typing-dots\">\r\n <span style={{ width: size, height: size }}></span>\r\n <span style={{ width: size, height: size }}></span>\r\n <span style={{ width: size, height: size }}></span>\r\n </div>\r\n );\r\n}\r\n\r\nexport default CustomLoading;\r\n","import React, { useMemo, useState } from \"react\";\r\nimport MenuFoldLineIcon from \"../assets/icons/MenuFoldLineIcon\";\r\nimport SettingGearIcon from \"../assets/icons/SettingGearIcon\";\r\nimport InputForm from \"../atoms/InputForm\";\r\nimport SearchIcon from \"../assets/icons/SearchIcon\";\r\nimport MessageIcon from \"../assets/icons/MessageIcon\";\r\nimport ChatAction from \"../atoms/ChatAction\";\r\nimport _ from \"lodash\";\r\nimport cn from \"../utils/TwMerge\";\r\nimport EditIcon from \"../assets/icons/EditIcon\";\r\ntype Props = {\r\n data: {\r\n id: number;\r\n date: string;\r\n title: string;\r\n }[];\r\n};\r\n\r\nconst ChatHistory = (props: Props) => {\r\n const { data } = props;\r\n const [activeId, setActiveId] = useState<number | string>(0);\r\n const [isWide, setIsWide] = useState(true);\r\n const groupedData = useMemo(() => {\r\n const now = new Date();\r\n\r\n const grouped = _.groupBy(data, (item) => {\r\n const d = new Date(item.date);\r\n\r\n const isSameMonth =\r\n d.getMonth() === now.getMonth() &&\r\n d.getFullYear() === now.getFullYear();\r\n\r\n if (isSameMonth) return \"This month\";\r\n\r\n // ambil nama bulan (Feb, Mar, dll)\r\n return d.toLocaleString(\"en-US\", { month: \"short\" });\r\n });\r\n\r\n // ubah jadi array format yang kamu mau\r\n return (Object as any).entries(grouped).map(([key, value]: any) => ({\r\n date: key,\r\n data: value,\r\n }));\r\n }, [data]);\r\n return (\r\n <div\r\n className={`\r\n ic-transition-all ic-duration-300\r\n ${isWide ? \"ic-max-w-screen-lg\" : \"ic-max-w-12\"}\r\n ic-w-full `}\r\n >\r\n <div className=\" ic-sticky ic-top-0 ic-bg-white ic-py-2 ic-z-20\">\r\n <div\r\n className={`ic-flex ic-justify-between ic-w-full\r\n ${cn({ \"ic-flex-col ic-gap-4\": !isWide })}\r\n `}\r\n >\r\n <div\r\n className={`clickable\r\n ${!isWide && \"ic-transform ic-scale-x-[-1]\"}\r\n `}\r\n onClick={() => {\r\n setIsWide(!isWide);\r\n }}\r\n >\r\n <MenuFoldLineIcon />\r\n </div>\r\n {!isWide && (\r\n <div className=\"clickable ic-rounded-sm ic-p-1 ic-mt-5 hover:ic-bg-dark-primary-300\">\r\n <EditIcon />\r\n </div>\r\n )}\r\n {isWide && <div className=\"clickable\">New Chat</div>}\r\n <div className=\"clickable ic-rounded-sm ic-p-1 hover:ic-bg-dark-primary-300\">\r\n {/* <SettingGearIcon /> */}\r\n </div>\r\n </div>\r\n {isWide && (\r\n <div className=\"ic-mt-7 ic-w-full\">\r\n <InputForm\r\n type=\"text\"\r\n name=\"keyword\"\r\n placeholder=\"Search history\"\r\n autoCorrect=\"off\"\r\n autoCapitalize=\"off\"\r\n spellCheck=\"false\"\r\n rightIcon={<SearchIcon />}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n {isWide && (\r\n <>\r\n {groupedData.map(\r\n (\r\n r: { date: string; data: { id: number; title: string }[] },\r\n i: number,\r\n ) => {\r\n return (\r\n <div className=\"ic-mt-5\" key={`chat-history-${r.date}-${i}`}>\r\n <p className=\"ic-font-bold ic-text-sm\">{r.date}</p>\r\n <div className=\"ic-px-2\">\r\n {r.data.map((item, index) => (\r\n <ChatAction\r\n key={`chat-action-${item.id}-${index}`}\r\n title={item.title}\r\n id={item.id}\r\n activeId={activeId}\r\n onEdit={(id) => {}}\r\n onDelete={(id) => {}}\r\n onActiveChange={(id) => {\r\n setActiveId(id);\r\n }}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n },\r\n )}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatHistory;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst MenuFoldLineIcon = (props: Props) => {\r\n return (\r\n <>\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1081_1936)\">\r\n <path\r\n d=\"M17.4993 15.0001V16.6668H2.49935V15.0001H17.4993ZM5.49602 3.25342L6.67435 4.43175L4.02268 7.08342L6.67435 9.73509L5.49602 10.9134L1.66602 7.08342L5.49602 3.25342ZM17.4993 9.16675V10.8334H9.99935V9.16675H17.4993ZM17.4993 3.33342V5.00008H9.99935V3.33342H17.4993Z\"\r\n fill=\"#21305F\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1081_1936\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </>\r\n );\r\n};\r\n\r\nexport default MenuFoldLineIcon;\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport default function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import React, { InputHTMLAttributes } from \"react\";\r\nimport cn from \"../utils/TwMerge\";\r\n\r\ntype Props = InputHTMLAttributes<HTMLInputElement> & {\r\n rightIcon?: React.ReactNode;\r\n};\r\n\r\nconst InputForm = (props: Props) => {\r\n const { rightIcon, ...rest } = props;\r\n return (\r\n <div\r\n className={`ic-border ic-border-gray-300 ic-w-full ic-rounded-md ic-flex ic-items-center\r\n focus-within:ic-border-dark-primary-500 focus-within:ic-border-2\r\n \r\n `}\r\n >\r\n <input\r\n {...rest}\r\n className={`ic-py-2 ic-w-full ic-px-3 focus:ic-outline-none\r\n ${cn({ \"ic-pr-3 ic-border-r ic-border-gray-300\": props.rightIcon })}\r\n ${cn({ \"ic-rounded-r-md\": !props.rightIcon })}\r\n `}\r\n />\r\n {props.rightIcon && (\r\n <div className=\"ic-py-2 ic-px-3 ic-pl-2\">{props.rightIcon}</div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default InputForm;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SearchIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"17\"\r\n height=\"17\"\r\n viewBox=\"0 0 17 17\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M16.0232 14.9163L10.806 9.69911C11.6156 8.65246 12.0536 7.37277 12.0536 6.02679C12.0536 4.41563 11.4248 2.90491 10.2877 1.76585C9.15067 0.626786 7.63594 0 6.02679 0C4.41763 0 2.9029 0.628795 1.76585 1.76585C0.626786 2.9029 0 4.41563 0 6.02679C0 7.63594 0.628795 9.15067 1.76585 10.2877C2.9029 11.4268 4.41563 12.0536 6.02679 12.0536C7.37277 12.0536 8.65045 11.6156 9.6971 10.808L14.9143 16.0232C14.9296 16.0385 14.9477 16.0507 14.9677 16.0589C14.9877 16.0672 15.0092 16.0715 15.0308 16.0715C15.0524 16.0715 15.0739 16.0672 15.0939 16.0589C15.1139 16.0507 15.132 16.0385 15.1473 16.0232L16.0232 15.1493C16.0385 15.134 16.0507 15.1159 16.0589 15.0959C16.0672 15.0759 16.0715 15.0545 16.0715 15.0328C16.0715 15.0112 16.0672 14.9897 16.0589 14.9697C16.0507 14.9498 16.0385 14.9316 16.0232 14.9163ZM9.20893 9.20893C8.35714 10.0587 7.22813 10.5268 6.02679 10.5268C4.82545 10.5268 3.69643 10.0587 2.84464 9.20893C1.99487 8.35714 1.52679 7.22813 1.52679 6.02679C1.52679 4.82545 1.99487 3.69442 2.84464 2.84464C3.69643 1.99487 4.82545 1.52679 6.02679 1.52679C7.22813 1.52679 8.35915 1.99286 9.20893 2.84464C10.0587 3.69643 10.5268 4.82545 10.5268 6.02679C10.5268 7.22813 10.0587 8.35915 9.20893 9.20893Z\"\r\n fill=\"black\"\r\n fillOpacity=\"0.45\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default SearchIcon;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport MessageIcon from \"../assets/icons/MessageIcon\";\r\nimport EditIcon from \"../assets/icons/EditIcon\";\r\nimport DeleteIcon from \"../assets/icons/DeleteIcon\";\r\n\r\ntype Props = {\r\n id: number | string;\r\n title: string;\r\n onEdit: (id: number | string) => void;\r\n onDelete: (id: number | string) => void;\r\n activeId: number | string;\r\n onActiveChange: (id: number | string) => void;\r\n};\r\n\r\nconst ChatAction = (props: Props) => {\r\n const { id, title, onEdit, onDelete, activeId, onActiveChange } = props;\r\n const [open, setOpen] = useState<number | string>(0);\r\n const actionRef: any = useRef(null);\r\n const dotRef: any = useRef(null);\r\n useEffect(() => {\r\n function handleClickOutside(event: any) {\r\n if (\r\n actionRef.current &&\r\n !actionRef.current?.contains(event.target) &&\r\n dotRef.current &&\r\n !dotRef.current?.contains(event.target) &&\r\n open == 0\r\n ) {\r\n setOpen(0);\r\n }\r\n }\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n return (\r\n <div className=\"ic-w-full ic-relative\">\r\n <div\r\n className={`ic-w-full clickable hover:ic-bg-dark-primary-100 hover:ic-font-bold ic-px-2 ic-rounded-md\r\n ${activeId == id ? \"ic-bg-dark-primary-100 ic-font-bold \" : \"\"}\r\n `}\r\n onClick={(e) => {\r\n onActiveChange(id);\r\n }}\r\n >\r\n <div className=\"ic-flex ic-justify-between hover:font-bold hover:ic-text-dark-primary-500 ic-w-full ic-py-2 ic-gap-2 ic-items-center\">\r\n <div className=\"ic-flex ic-text-center ic-w-full ic-gap-2 ic-items-center ic-truncate\">\r\n <div>\r\n <MessageIcon\r\n color={`${activeId == id ? \"#20305f\" : \"#737373\"} `}\r\n />\r\n </div>\r\n <p\r\n className={` ic-text-sm ic-truncate \r\n ${activeId == id ? \"ic-text-dark-primary-500\" : \"\"}\r\n `}\r\n >\r\n {title}\r\n </p>\r\n </div>\r\n <div>\r\n <p\r\n ref={dotRef}\r\n className=\"\r\n ic-select-none\r\n ic-flex ic-justify-center ic-items-center ic-w-10\r\n ic-font-bold ic-rounded-md\r\n ic-pb-2 clickable hover:ic-bg-slate-200 \r\n \"\r\n onClick={() => {\r\n setOpen(id == open ? 0 : id);\r\n }}\r\n >\r\n ...\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n {open === id && (\r\n <div\r\n className=\"ic-absolute ic-z-40 ic-top-10 ic-right-2 ic-p-2 ic-bg-white ic-shadow-md\"\r\n ref={actionRef}\r\n onMouseEnter={(e) => {\r\n e.preventDefault();\r\n }}\r\n >\r\n <div\r\n className=\"ic-p-2 ic-flex ic-text-center ic-gap-2 clickable hover:ic-bg-slate-200\"\r\n onClick={() => {\r\n onEdit(id);\r\n }}\r\n >\r\n <EditIcon />\r\n <p className=\"ic-text-sm ic-font-bold\">Edit</p>\r\n </div>\r\n <div\r\n className=\"ic-p-2 ic-flex ic-text-center ic-gap-2 clickable hover:ic-bg-slate-200 \"\r\n onClick={() => {\r\n onDelete(id);\r\n }}\r\n >\r\n <DeleteIcon />\r\n <p className=\"ic-text-sm ic-font-bold ic-text-red-500 \">Delete</p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatAction;\r\n","import React from \"react\";\r\n\r\ntype Props = {\r\n color?: string;\r\n};\r\n\r\nconst MessageIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1092_4826)\">\r\n <path\r\n d=\"M11.3619 7.9687C10.8463 7.9687 10.4468 8.36825 10.4468 8.86156C10.4468 9.35486 10.8463 9.75441 11.3619 9.75441C11.8329 9.75441 12.2325 9.35486 12.2325 8.86156C12.2325 8.36825 11.8329 7.9687 11.3619 7.9687ZM5.11194 7.9687C4.59631 7.9687 4.19676 8.36825 4.19676 8.86156C4.19676 9.35486 4.59631 9.75441 5.11194 9.75441C5.58292 9.75441 5.98247 9.35486 5.98247 8.86156C5.98247 8.36825 5.58292 7.9687 5.11194 7.9687Z\"\r\n fill={`${props.color || \"#5F79C8\"}`}\r\n />\r\n <path\r\n d=\"M18.5265 6.27053C17.4938 4.84897 16.0046 3.8247 14.3077 3.36874V3.37098C13.926 2.94687 13.4952 2.55624 13.0131 2.20803C9.35908 -0.44822 4.22961 0.362048 1.5622 4.01607C-0.587352 6.98482 -0.495834 10.9781 1.69613 13.8152L1.71399 16.775C1.71399 16.8464 1.72515 16.9179 1.74747 16.9848C1.77555 17.0743 1.82098 17.1573 1.88118 17.2292C1.94138 17.301 2.01515 17.3603 2.09829 17.4037C2.18142 17.447 2.27229 17.4735 2.36568 17.4817C2.45907 17.4899 2.55316 17.4795 2.64256 17.4513L5.46845 16.5607C6.21622 16.8263 6.98854 16.9781 7.7564 17.0205L7.74524 17.0295C9.73408 18.4781 12.3412 18.9134 14.7318 18.1232L17.5689 19.0473C17.6403 19.0696 17.714 19.083 17.7899 19.083C18.185 19.083 18.5042 18.7638 18.5042 18.3687V15.3777C20.4707 12.708 20.522 9.0183 18.5265 6.27053ZM5.78095 14.9759L5.5131 14.8643L3.30327 15.5562L3.28095 13.2348L3.10238 13.0339C1.21399 10.7304 1.08899 7.41115 2.85685 4.97589C5.00863 2.02499 9.13363 1.37321 12.0756 3.50267C15.0265 5.64776 15.6805 9.76607 13.5488 12.6991C11.7609 15.1522 8.55997 16.0585 5.78095 14.9759ZM17.0533 14.5964L16.8747 14.8196L16.897 17.1411L14.7095 16.4045L14.4417 16.5161C13.1917 16.9804 11.8591 17.0183 10.6247 16.6723L10.6202 16.6701C12.3167 16.1498 13.7987 15.0932 14.8435 13.6589C16.5488 11.3085 16.8256 8.35535 15.8345 5.83749L15.8479 5.84642C16.3613 6.21473 16.8323 6.67455 17.2318 7.23035C18.8524 9.45356 18.7609 12.4804 17.0533 14.5964Z\"\r\n fill={`${props.color || \"#5F79C8\"}`}\r\n />\r\n <path\r\n d=\"M8.23694 7.9687C7.72131 7.9687 7.32176 8.36825 7.32176 8.86156C7.32176 9.35486 7.72131 9.75441 8.23694 9.75441C8.70792 9.75441 9.10747 9.35486 9.10747 8.86156C9.10747 8.36825 8.70792 7.9687 8.23694 7.9687Z\"\r\n fill={`${props.color || \"#5F79C8\"}`}\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1092_4826\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default MessageIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst EditIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1096_2009)\">\r\n <path\r\n d=\"M3.45921 12.284C3.49492 12.284 3.53064 12.2805 3.56635 12.2751L6.56992 11.7483C6.60564 11.7412 6.63957 11.7251 6.66457 11.6983L14.2342 4.12868C14.2508 4.11216 14.2639 4.09254 14.2729 4.07094C14.2818 4.04934 14.2864 4.02618 14.2864 4.00279C14.2864 3.9794 14.2818 3.95625 14.2729 3.93464C14.2639 3.91304 14.2508 3.89342 14.2342 3.8769L11.2664 0.907254C11.2324 0.873326 11.1878 0.855469 11.1396 0.855469C11.0914 0.855469 11.0467 0.873326 11.0128 0.907254L3.44314 8.4769C3.41635 8.50368 3.40028 8.53583 3.39314 8.57154L2.86635 11.5751C2.84898 11.6708 2.85519 11.7692 2.88443 11.862C2.91368 11.9547 2.96509 12.0389 3.03421 12.1073C3.15207 12.2215 3.30028 12.284 3.45921 12.284ZM4.66278 9.16975L11.1396 2.69475L12.4485 4.00368L5.97171 10.4787L4.38421 10.759L4.66278 9.16975ZM14.5717 13.784H1.42885C1.11278 13.784 0.857422 14.0394 0.857422 14.3555V14.9983C0.857422 15.0769 0.921708 15.1412 1.00028 15.1412H15.0003C15.0789 15.1412 15.1431 15.0769 15.1431 14.9983V14.3555C15.1431 14.0394 14.8878 13.784 14.5717 13.784Z\"\r\n fill=\"#16203F\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1096_2009\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default EditIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst DeleteIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.28544 2.14118H5.14258C5.22115 2.14118 5.28544 2.0769 5.28544 1.99833V2.14118H10.714V1.99833C10.714 2.0769 10.7783 2.14118 10.8569 2.14118H10.714V3.4269H11.9997V1.99833C11.9997 1.36797 11.4872 0.855469 10.8569 0.855469H5.14258C4.51222 0.855469 3.99972 1.36797 3.99972 1.99833V3.4269H5.28544V2.14118ZM14.2854 3.4269H1.71401C1.39794 3.4269 1.14258 3.68225 1.14258 3.99833V4.56975C1.14258 4.64833 1.20686 4.71261 1.28544 4.71261H2.36401L2.80508 14.0519C2.83365 14.6608 3.33722 15.1412 3.94615 15.1412H12.0533C12.664 15.1412 13.1658 14.6626 13.1944 14.0519L13.6354 4.71261H14.714C14.7926 4.71261 14.8569 4.64833 14.8569 4.56975V3.99833C14.8569 3.68225 14.6015 3.4269 14.2854 3.4269ZM11.9158 13.8555H4.08365L3.65151 4.71261H12.3479L11.9158 13.8555Z\"\r\n fill=\"#FF4D4F\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default DeleteIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SuggestionChat = (props: Props) => {\r\n return <div>SuggestionChat</div>;\r\n};\r\n\r\nexport default SuggestionChat;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ChatSender from \"./ChatSender\";\r\nimport FlexaIcon from \"../assets/icons/FlexaIcon\";\r\nimport AdminChatResponse from \"../atoms/AdminChatResponse\";\r\nimport UserChatResponse from \"../atoms/UserChatResponse\";\r\nimport { useChat } from \"../providers/ChatProvider\";\r\nimport dayjs from \"dayjs\";\r\nimport { ChatType } from \"../providers/ChatCotextType\";\r\n\r\ntype Props = {\r\n onResponseChat?: (output: ChatType) => void;\r\n};\r\n\r\nconst Chatting = (props: Props) => {\r\n const { chats, isLoadingResponse, handleSendChat } = useChat();\r\n const chatCanvasRef = useRef<HTMLDivElement>(null!);\r\n const [isUserAtBottom, setIsUserAtBottom] = useState(true);\r\n\r\n // update scroll status saat user scroll\r\n const handleScroll = () => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n setIsUserAtBottom(el.scrollHeight - el.scrollTop - el.clientHeight < 10);\r\n };\r\n\r\n useEffect(() => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n\r\n if (isUserAtBottom) {\r\n el.scrollTop = el.scrollHeight;\r\n }\r\n }, [chats, isUserAtBottom]);\r\n\r\n useEffect(() => {\r\n if (!isLoadingResponse && chats.length > 0) {\r\n const lastChat = chats[chats.length - 1];\r\n if (lastChat.status === \"COMPLETE\") {\r\n props.onResponseChat && props.onResponseChat(lastChat);\r\n // console.log(\"TT\", lastChat);\r\n }\r\n }\r\n }, [chats, isLoadingResponse]);\r\n\r\n return (\r\n <div\r\n ref={chatCanvasRef}\r\n onScroll={handleScroll}\r\n className=\"ic-h-full ic-overflow-auto ic-relative ic-w-full ic-flex-col ic-items-center ic-justify-between ic-flex \"\r\n >\r\n {chats.length < 1 && <div></div>}\r\n <div className=\"ic-w-full ic-flex ic-justify-center\">\r\n {chats.length < 1 ? (\r\n <div className=\"ic-flex ic-flex-col ic-text-center ic-items-center ic-gap-4\">\r\n <FlexaIcon />\r\n <p className=\"ic-text-dark-primary-500 ic-font-bold ic-text-xl ic-text-center\">\r\n Welcome to FlexA Copilot\r\n <br />\r\n How i can assist you today?\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"ic-w-full ic-max-w-5xl ic-flex ic-flex-col ic-space-y-4 \">\r\n {chats.map((item) => {\r\n const input: { message: string; output: string } = JSON.parse(\r\n item.input,\r\n );\r\n return (\r\n <div\r\n className=\" ic-flex ic-flex-col ic-space-y-4 ic-w-full \"\r\n key={`chat-response-${item.jobId}`}\r\n >\r\n <div className=\" ic-w-full ic-flex ic-justify-end\">\r\n <div className=\"ic-w-full ic-flex ic-justify-end ic-max-w-4xl ic-pr-4 ic-pl-20\">\r\n <UserChatResponse\r\n message={input.message}\r\n time={dayjs(item.createDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n <div className=\" ic-w-full ic-flex ic-justify-start ic-pr-20\">\r\n <div className=\"ic-w-full ic-max-w-4xl\">\r\n <AdminChatResponse\r\n message={item.output}\r\n isLoading={item.status === \"RUNNING\"}\r\n time={dayjs(item.endDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"ic-sticky ic-mt-4 ic-bottom-0 ic-w-full ic-flex ic-justify-center\">\r\n <ChatSender\r\n isLoadingResponse={isLoadingResponse}\r\n handleSendChat={handleSendChat}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Chatting;\r\n","import React from \"react\";\r\n\r\ntype Props = {\r\n w?: number;\r\n h?: number;\r\n};\r\n\r\nconst FlexaIcon = (props: Props) => {\r\n const { w, h } = props;\r\n return (\r\n <>\r\n <svg\r\n width={w || 40}\r\n height={h || 40}\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.8513 8.02435C5.0388 5.44935 7.53255 3.3806 10.445 3.27435C15.295 3.0306 20.1638 3.14935 25.02 3.3431C22.8638 4.94935 20.5388 6.91185 20.1638 9.74935C19.7013 13.1244 19.9763 16.5494 19.97 19.9494C15.5638 20.0306 10.6825 19.1244 6.7138 21.5181C3.3513 23.5869 3.0263 27.9494 3.38255 31.4994C2.89505 25.8994 3.34505 20.2806 3.15755 14.6744C3.20755 12.4556 2.9388 10.1119 3.8513 8.02435Z\"\r\n fill=\"#24315E\"\r\n />\r\n <path\r\n d=\"M25.02 3.343C28.1325 2.87425 31.8013 2.993 34.1388 5.41175C38.2263 9.1555 37.1888 17.0617 31.945 19.2367C28.1263 20.6492 23.945 20.0117 19.97 19.9492C19.9763 16.5492 19.7013 13.1242 20.1638 9.74925C20.5388 6.91175 22.8638 4.94925 25.02 3.343Z\"\r\n fill=\"#F37C21\"\r\n />\r\n <path\r\n d=\"M6.71366 21.518C10.6824 19.1243 15.5637 20.0305 19.9699 19.9493C19.9637 23.6805 20.4199 27.5118 19.4012 31.1618C18.3949 34.7118 14.7887 37.243 11.0949 36.9243C7.65741 36.9493 4.91991 34.3493 3.38241 31.4993C2.66357 28.1118 3.35116 23.5868 6.71366 21.518Z\"\r\n fill=\"#189DD8\"\r\n />\r\n </svg>\r\n </>\r\n );\r\n};\r\n\r\nexport default FlexaIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst ClockIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1096_17248)\">\r\n <path\r\n d=\"M6 0C2.68661 0 0 2.68661 0 6C0 9.31339 2.68661 12 6 12C9.31339 12 12 9.31339 12 6C12 2.68661 9.31339 0 6 0ZM6 10.9821C3.24911 10.9821 1.01786 8.75089 1.01786 6C1.01786 3.24911 3.24911 1.01786 6 1.01786C8.75089 1.01786 10.9821 3.24911 10.9821 6C10.9821 8.75089 8.75089 10.9821 6 10.9821Z\"\r\n fill=\"#8C8C8C\"\r\n />\r\n <path\r\n d=\"M8.33984 7.69428L6.43002 6.31348V2.99874C6.43002 2.93982 6.3818 2.8916 6.32287 2.8916H5.67868C5.61975 2.8916 5.57153 2.93982 5.57153 2.99874V6.68714C5.57153 6.72196 5.5876 6.7541 5.61573 6.77419L7.83091 8.38937C7.87912 8.42419 7.94609 8.41348 7.98091 8.3666L8.36394 7.84428C8.39877 7.79473 8.38805 7.72776 8.33984 7.69428Z\"\r\n fill=\"#8C8C8C\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1096_17248\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default ClockIcon;\r\n","import React from \"react\";\r\nimport ClockIcon from \"../assets/icons/ClockIcon\";\r\nimport FlexaIcon from \"../assets/icons/FlexaIcon\";\r\nimport CustomLoading from \"./CustomLoading\";\r\n\r\ntype Props = {\r\n message?: string;\r\n isLoading?: boolean;\r\n time?: string;\r\n};\r\n\r\nconst AdminChatResponse = (props: Props) => {\r\n return (\r\n <div className=\"ic-flex ic-gap-4\">\r\n <div className=\"\">\r\n <div className=\"ic-h-10 ic-w-10 ic-bg-white ic-shrink-0 ic-grow-0 ic-shadow-sm ic-rounded-md ic-flex ic-justify-center ic-items-center\">\r\n <FlexaIcon w={24} h={24} />\r\n </div>\r\n </div>\r\n {props.isLoading ? (\r\n <div className=\"ic-mt-4\">\r\n <CustomLoading size=\"8px\" />\r\n </div>\r\n ) : (\r\n <div className=\"ic-bg-white ic-shadow-sm ic-p-3 ic-text-gray-700 ic-rounded-md\">\r\n <p className=\"ic-text-sm ic-whitespace-pre-line \">{props.message || \"\"}</p>\r\n <p className=\"ic-mt-2 ic-w-full ic-items-center ic-text-sm ic-flex ic-gap-1 ic-justify-start\">\r\n <ClockIcon /> {props.time}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AdminChatResponse;\r\n","import React from \"react\";\r\nimport ClockIcon from \"../assets/icons/ClockIcon\";\r\n\r\ntype Props = {\r\n message: string;\r\n time: string;\r\n};\r\n\r\nconst UserChatResponse = (props: Props) => {\r\n return (\r\n <div className=\"ic-bg-white ic-shadow-sm ic-p-3 ic-rounded-md ic-w-fit ic-text-gray-700\">\r\n <p className=\"ic-text-sm \">{props.message}</p>\r\n <p className=\"ic-mt-2 ic-w-full ic-items-center ic-text-sm ic-flex ic-gap-1 ic-justify-end\">\r\n <ClockIcon /> {props.time}\r\n </p>\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserChatResponse;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport API from \"../utils/api\";\r\nimport { ChatContextType, ChatType } from \"./ChatCotextType\";\r\n\r\ntype Props = {\r\n ORACLE_TOKEN_URL: string;\r\n ORACLE_BASE_URL: string;\r\n ORACLE_CLIENT_ID: string;\r\n ORACLE_CLIENT_SECRET: string;\r\n ORACLE_SCOPE: string;\r\n PROXY_URL: string;\r\n WORKFLOW_CODE: string;\r\n children: React.ReactNode;\r\n};\r\nconst ChatContext = React.createContext<ChatContextType>(null!);\r\nfunction ChatProvider(props: Props) {\r\n const {\r\n ORACLE_TOKEN_URL,\r\n ORACLE_BASE_URL,\r\n ORACLE_CLIENT_ID,\r\n ORACLE_CLIENT_SECRET,\r\n ORACLE_SCOPE,\r\n PROXY_URL,\r\n WORKFLOW_CODE,\r\n } = props;\r\n const ApiReq = API.create(\r\n PROXY_URL,\r\n ORACLE_TOKEN_URL,\r\n ORACLE_CLIENT_ID,\r\n ORACLE_CLIENT_SECRET,\r\n ORACLE_SCOPE,\r\n );\r\n const [chatHistories, setChatHistories] = useState([]);\r\n const [chats, setChats] = useState<ChatType[]>([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isLoadingResponse, setIsLoadingResponse] = useState(false);\r\n const [disallowChattingMessage, setDisallowChattingMessage] = useState(\"\");\r\n\r\n const handleNewChat = async () => {};\r\n const handleSendChat = async (message: string) => {\r\n setIsLoadingResponse(true);\r\n try {\r\n const res = await ApiReq.post(\r\n `${ORACLE_BASE_URL}/${WORKFLOW_CODE}/invokeAsync`,\r\n {\r\n message: message,\r\n conversational: true,\r\n invocationMode: \"ADMIN\",\r\n conversationId: chats[chats.length - 1]?.conversationId || uuidv4(),\r\n },\r\n );\r\n setChats((prev) => [...prev, res.data]);\r\n const jobId = res.data.jobId;\r\n let jobStatus = res.data.status;\r\n while (jobStatus === \"RUNNING\") {\r\n const resCheck = await ApiReq.get(\r\n `${ORACLE_BASE_URL}/${WORKFLOW_CODE}/status/${jobId}?invocationMode=ADMIN`,\r\n );\r\n jobStatus = resCheck.data.status;\r\n setChats((prev) => {\r\n return prev.map((chat) => {\r\n if (chat.jobId === jobId) {\r\n return resCheck.data;\r\n }\r\n return chat;\r\n });\r\n });\r\n if (resCheck.data.status == \"RUNNING\") {\r\n await new Promise((resolve) => setTimeout(resolve, 2000));\r\n }\r\n\r\n if (\r\n resCheck.data.status !== \"RUNNING\" &&\r\n resCheck.data.status !== \"COMPLETE\"\r\n ) {\r\n setChats((prev) => {\r\n return prev.map((chat) => {\r\n if (chat.jobId === jobId) {\r\n return {\r\n ...resCheck.data,\r\n output: \"Something went wrong\",\r\n };\r\n }\r\n return chat;\r\n });\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n }\r\n setIsLoadingResponse(false);\r\n };\r\n const handleResponseChat = async () => {};\r\n const handleChangeTopic = async () => {};\r\n const handleAttachFile = async () => {};\r\n const handleDeleteChat = async () => {};\r\n const handleGetHistoryChat = async () => {};\r\n\r\n useEffect(() => {\r\n // init();\r\n // handleSendChat();\r\n // handleGenerateToken(\r\n // PROXY_URL,\r\n // ORACLE_TOKEN_URL,\r\n // ORACLE_CLIENT_ID,\r\n // ORACLE_CLIENT_SECRET,\r\n // ORACLE_SCOPE,\r\n // );\r\n }, []);\r\n\r\n return (\r\n <ChatContext.Provider\r\n value={{\r\n chatHistories,\r\n setChatHistories,\r\n chats,\r\n setChats,\r\n isLoading,\r\n setIsLoading,\r\n isLoadingResponse,\r\n setIsLoadingResponse,\r\n disallowChattingMessage,\r\n setDisallowChattingMessage,\r\n handleNewChat,\r\n handleSendChat,\r\n handleResponseChat,\r\n handleChangeTopic,\r\n handleAttachFile,\r\n handleDeleteChat,\r\n handleGetHistoryChat,\r\n }}\r\n >\r\n {props.children}\r\n </ChatContext.Provider>\r\n );\r\n}\r\nexport const useChat = () => React.useContext(ChatContext);\r\n\r\nexport default ChatProvider;\r\n","import axios, { AxiosRequestConfig } from \"axios\";\r\nconst handleGenerateToken = async (\r\n PROXY_URL: string,\r\n ORACLE_TOKEN_URL: string,\r\n ORACLE_CLIENT_ID: string,\r\n ORACLE_CLIENT_SECRET: string,\r\n ORACLE_SCOPE: string,\r\n) => {\r\n try {\r\n const res = await axios.post(PROXY_URL, {\r\n url: ORACLE_TOKEN_URL,\r\n payload: {\r\n grant_type: \"client_credentials\",\r\n client_id: ORACLE_CLIENT_ID,\r\n client_secret: ORACLE_CLIENT_SECRET,\r\n scope: ORACLE_SCOPE,\r\n },\r\n config: {\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n },\r\n });\r\n localStorage.setItem(\"intellinum-chatbot-token\", res.data.access_token);\r\n } catch (error) {}\r\n};\r\nconst handleCreateApi = (\r\n PROXY_URL: string,\r\n ORACLE_TOKEN_URL: string,\r\n ORACLE_CLIENT_ID: string,\r\n ORACLE_CLIENT_SECRET: string,\r\n ORACLE_SCOPE: string,\r\n) => {\r\n const apiRequest = axios.create({\r\n baseURL: PROXY_URL,\r\n });\r\n\r\n apiRequest.interceptors.request.use(\r\n (config) => {\r\n const token = localStorage.getItem(\"intellinum-chatbot-token\");\r\n if (token) {\r\n if (config.method == \"post\") {\r\n config.data = {\r\n ...config.data,\r\n config: {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n },\r\n };\r\n } else if (config.method == \"get\") {\r\n config.params = {\r\n ...config.params,\r\n auth: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n apiRequest.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n async (error) => {\r\n let originalConfig = error.config;\r\n //when token expired or unauthorize, it should re-generate token and retry request again.\r\n if (error.response.status === 401 && !originalConfig._retry) {\r\n await handleGenerateToken(\r\n PROXY_URL,\r\n ORACLE_TOKEN_URL,\r\n ORACLE_CLIENT_ID,\r\n ORACLE_CLIENT_SECRET,\r\n ORACLE_SCOPE,\r\n );\r\n if (originalConfig.method == \"post\") {\r\n try {\r\n originalConfig.data = JSON.parse(originalConfig.data);\r\n } catch (error) {}\r\n }\r\n return apiRequest.request(originalConfig);\r\n }\r\n },\r\n );\r\n\r\n const handlePost = (\r\n url: string,\r\n payload?: any,\r\n config?: AxiosRequestConfig,\r\n ) => {\r\n const res = apiRequest.post(\"/\", {\r\n url,\r\n payload,\r\n config,\r\n });\r\n return res;\r\n };\r\n\r\n const handleGet = (url: string) => {\r\n const res = apiRequest.get(\"/?url=\" + url);\r\n return res;\r\n };\r\n return {\r\n post: handlePost,\r\n get: handleGet,\r\n };\r\n};\r\nconst API = {\r\n create: handleCreateApi,\r\n};\r\nexport { handleGenerateToken };\r\nexport default API;\r\n","import React, { useRef, useState } from \"react\";\r\nimport API_STREAM from \"../utils/stream\";\r\n// import { v4 as uuidv4 } from 'uuid';\r\ntype Props = {\r\n PROXY_URL: string;\r\n STREAM_URL: string;\r\n TOKEN: string;\r\n children: React.ReactNode;\r\n};\r\nconst ChatStreamContext = React.createContext<any>(null!);\r\nconst ChatStreamProvider = (props: Props) => {\r\n const isChatCreated = useRef(false);\r\n const { PROXY_URL, STREAM_URL, TOKEN, children } = props;\r\n const apiStream = API_STREAM.create(PROXY_URL, TOKEN);\r\n const [chats, setChats] = useState<any[]>([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isLoadingResponse, setIsLoadingResponse] = useState(false);\r\n const handleSendChat = async (message: string) => {\r\n setIsLoadingResponse(true);\r\n try {\r\n const res = await apiStream.post(\r\n STREAM_URL,\r\n {\r\n input: {\r\n question: message,\r\n company: \"SIMMONS_WMS_DEV\",\r\n username: \"Saikumar.Kenduri\",\r\n },\r\n config: {\r\n configurable: {\r\n thread_id: \"thread123\",\r\n },\r\n },\r\n },\r\n (event, data) => {\r\n // console.log(\"event:\", event);\r\n // console.log(\"data:\", data);\r\n if (event === \"status\") {\r\n const status = data.status;\r\n if (status === \"RUNNING\" && !isChatCreated.current) {\r\n // console.log(\"pasti masuk dua kali\");\r\n isChatCreated.current = true;\r\n\r\n setChats((prev) => [\r\n ...prev,\r\n {\r\n input: message,\r\n output: \"\",\r\n jobId: data.jobId,\r\n status: status,\r\n createDate: new Date(),\r\n endDate: null,\r\n },\r\n ]);\r\n // console.log(chats, \"check chats ini\");\r\n }\r\n }\r\n if (event === \"data\") {\r\n const content = data[0]?.content;\r\n\r\n if (!content || content[0].text) return;\r\n\r\n setChats((prev) => {\r\n const updated = [...prev];\r\n const lastIndex = updated.length - 1;\r\n\r\n if (!updated[lastIndex]) return prev;\r\n\r\n updated[lastIndex].output = content;\r\n updated[lastIndex].status = \"COMPLETE\";\r\n updated[lastIndex].endDate = new Date();\r\n\r\n return updated;\r\n });\r\n isChatCreated.current = false;\r\n }\r\n },\r\n );\r\n } catch (error) {}\r\n setIsLoadingResponse(false);\r\n };\r\n return (\r\n <ChatStreamContext.Provider\r\n value={{\r\n chats,\r\n isLoading,\r\n isLoadingResponse,\r\n handleSendChat,\r\n }}\r\n >\r\n {children}\r\n </ChatStreamContext.Provider>\r\n );\r\n};\r\nexport const useChatStream = () => {\r\n const context = React.useContext(ChatStreamContext);\r\n return context;\r\n};\r\nexport default ChatStreamProvider;\r\n","const handleCreateApiStream = (PROXY_URL: string, TOKEN: string) => {\r\n const handlePost = async (\r\n url: string,\r\n payload: any,\r\n onChunk: (event: any, data: any) => void\r\n ) => {\r\n const res = await fetch(PROXY_URL + \"/\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${TOKEN}`,\r\n },\r\n body: JSON.stringify({\r\n url,\r\n data: payload,\r\n }),\r\n });\r\n\r\n if (!res.body) {\r\n throw new Error(\"No stream body\");\r\n }\r\n\r\n const reader = res.body.getReader();\r\n const decoder = new TextDecoder(\"utf-8\");\r\n\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n const parts = buffer.split(\"\\n\\n\");\r\n buffer = parts.pop() || \"\";\r\n // console.log(parts, \"parts\");\r\n for (const part of parts) {\r\n const lines = part.split(\"\\n\");\r\n\r\n let event = \"\";\r\n let data = \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"event:\")) {\r\n event = line.replace(\"event:\", \"\").trim();\r\n }\r\n\r\n if (line.startsWith(\"data:\")) {\r\n data += line.replace(\"data:\", \"\").trim();\r\n }\r\n }\r\n\r\n if (event && data) {\r\n try {\r\n const json = JSON.parse(data);\r\n onChunk(event, json);\r\n } catch (e) {\r\n console.log(\"parse error:\", data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return \"done\";\r\n };\r\n\r\n return {\r\n post: handlePost,\r\n };\r\n};\r\nconst API_STREAM = {\r\n create: handleCreateApiStream,\r\n};\r\nexport default API_STREAM;\r\n\r\n\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ChatSender from \"./ChatSender\";\r\nimport FlexaIcon from \"../assets/icons/FlexaIcon\";\r\nimport AdminChatResponse from \"../atoms/AdminChatResponse\";\r\nimport UserChatResponse from \"../atoms/UserChatResponse\";\r\nimport dayjs from \"dayjs\";\r\nimport { ChatType } from \"../providers/ChatCotextType\";\r\nimport { useChatStream } from \"../providers/ChatStreamProvider\";\r\n\r\ntype Props = {\r\n onResponseChat?: (output: ChatType) => void;\r\n};\r\n\r\nconst ChattingStream = (props: Props) => {\r\n const { chats, isLoadingResponse, handleSendChat } = useChatStream();\r\n const chatCanvasRef = useRef<HTMLDivElement>(null!);\r\n const bottomRef: any = useRef(null);\r\n const [isUserAtBottom, setIsUserAtBottom] = useState(true);\r\n\r\n // update scroll status saat user scroll\r\n const handleScroll = () => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n setIsUserAtBottom(el.scrollHeight - el.scrollTop - el.clientHeight < 10);\r\n };\r\n\r\n useEffect(() => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n\r\n if (isUserAtBottom) {\r\n el.scrollTop = el.scrollHeight;\r\n }\r\n }, [chats, isUserAtBottom]);\r\n\r\n useEffect(() => {\r\n // console.log(\"harus masuk chat\", chats);\r\n if (!isLoadingResponse && chats.length > 0) {\r\n const lastChat = chats[chats.length - 1];\r\n if (lastChat.status === \"COMPLETE\") {\r\n props.onResponseChat && props.onResponseChat(lastChat);\r\n // console.log(\"TT\", lastChat);\r\n }\r\n }\r\n }, [chats, isLoadingResponse]);\r\n\r\n useEffect(() => {\r\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [chats]);\r\n\r\n return (\r\n <div\r\n ref={chatCanvasRef}\r\n onScroll={handleScroll}\r\n className=\"ic-h-full ic-overflow-auto ic-relative ic-w-full ic-flex-col ic-items-center ic-justify-between ic-flex \"\r\n >\r\n {chats.length < 1 && <div></div>}\r\n <div className=\"ic-w-full ic-flex ic-justify-center\">\r\n {chats.length < 1 ? (\r\n <div className=\"ic-flex ic-flex-col ic-text-center ic-items-center ic-gap-4\">\r\n <FlexaIcon />\r\n <p className=\"ic-text-dark-primary-500 ic-font-bold ic-text-xl ic-text-center\">\r\n Welcome to FlexA Copilot\r\n <br />\r\n How i can assist you today?\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"ic-w-full ic-max-w-5xl ic-flex ic-flex-col ic-space-y-4 \">\r\n {chats.map((item: any) => {\r\n // const input: { message: string; output: string } = JSON.parse(\r\n // item.input,\r\n // );\r\n return (\r\n <div\r\n className=\" ic-flex ic-flex-col ic-space-y-4 ic-w-full \"\r\n key={`chat-response-${item.jobId}`}\r\n >\r\n <div className=\" ic-w-full ic-flex ic-justify-end\">\r\n <div className=\"ic-w-full ic-flex ic-justify-end ic-max-w-4xl ic-pr-4 ic-pl-20\">\r\n <UserChatResponse\r\n message={item.input}\r\n time={dayjs(item.createDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n <div className=\" ic-w-full ic-flex ic-justify-start ic-pr-20\">\r\n <div className=\"ic-w-full ic-max-w-4xl\">\r\n <AdminChatResponse\r\n message={item.output}\r\n isLoading={item.status === \"RUNNING\"}\r\n time={dayjs(item.endDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n <div ref={bottomRef} />\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"ic-sticky ic-mt-4 ic-bottom-0 ic-w-full ic-flex ic-justify-center\">\r\n <ChatSender\r\n isLoadingResponse={isLoadingResponse}\r\n handleSendChat={handleSendChat}\r\n bottomRef={bottomRef}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChattingStream;\r\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","axios","error","import_jsx_runtime","React","uuidv4","import_jsx_runtime","dayjs","import_react","import_jsx_runtime","React","import_react","import_dayjs","import_jsx_runtime","dayjs"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/organisms/IntellinumChat.tsx","../src/molecules/ChatSender.tsx","../src/assets/icons/SendIcon.tsx","../src/atoms/CustomLoading/index.tsx","../src/molecules/ChatHistory.tsx","../src/assets/icons/MenuFoldLineIcon.tsx","../src/utils/TwMerge.tsx","../src/atoms/InputForm.tsx","../src/assets/icons/SearchIcon.tsx","../src/atoms/ChatAction.tsx","../src/assets/icons/MessageIcon.tsx","../src/assets/icons/EditIcon.tsx","../src/assets/icons/DeleteIcon.tsx","../src/atoms/SuggestionChat.tsx","../src/molecules/Chatting.tsx","../src/assets/icons/FlexaIcon.tsx","../src/assets/icons/ClockIcon.tsx","../src/atoms/AdminChatResponse.tsx","../src/atoms/UserChatResponse.tsx","../src/providers/ChatProvider.tsx","../src/utils/api.tsx","../src/providers/ChatStreamProvider.tsx","../src/utils/stream.ts","../src/molecules/ChattingStream.tsx"],"sourcesContent":["import \"./chat-lib.css\";\r\nimport IntellinumChat from \"./organisms/IntellinumChat\";\r\nimport ChatSender from \"./molecules/ChatSender\";\r\nimport ChatHistory from \"./molecules/ChatHistory\";\r\nimport SuggestionChat from \"./atoms/SuggestionChat\";\r\nimport Chatting from \"./molecules/Chatting\";\r\nimport ChatProvider from \"./providers/ChatProvider\";\r\nimport ChatStreamProvider from \"./providers/ChatStreamProvider\";\r\nimport ChattingStream from \"./molecules/ChattingStream\";\r\nimport { useChat } from \"./providers/ChatProvider\";\r\nexport {\r\n ChatSender,\r\n ChatHistory,\r\n SuggestionChat,\r\n Chatting,\r\n ChatProvider,\r\n useChat,\r\n ChatStreamProvider,\r\n ChattingStream,\r\n};\r\nexport default IntellinumChat;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst IntellinumChat = (props: Props) => {\r\n return <div>IntellinumChat</div>;\r\n};\r\n\r\nexport default IntellinumChat;\r\n","import { useRef, useState } from \"react\";\r\nimport AttachIcon from \"../assets/icons/AttachIcon\";\r\nimport SendIcon from \"../assets/icons/SendIcon\";\r\nimport CustomLoading from \"../atoms/CustomLoading\";\r\ntype Props = {\r\n handleSendChat: (message: string) => Promise<void>;\r\n isLoadingResponse: boolean;\r\n bottomRef?: any;\r\n};\r\n\r\nconst ChatSender = (props: Props) => {\r\n const textareaRef = useRef<any>(null);\r\n const { handleSendChat, isLoadingResponse, bottomRef } = props;\r\n const [message, setMessage] = useState(\"\");\r\n\r\n const handleInput = () => {\r\n const el = textareaRef.current;\r\n if (!el) return;\r\n\r\n el.style.height = \"auto\"; // reset dulu\r\n\r\n if (!el.value) {\r\n // kosong → kembali ke default\r\n el.style.height = \"40px\"; // misal default tinggi 1 baris\r\n el.style.overflowY = \"hidden\";\r\n return;\r\n }\r\n\r\n if (el.scrollHeight > 200) {\r\n el.style.height = \"200px\";\r\n el.style.overflowY = \"auto\"; // muncul scroll\r\n } else {\r\n el.style.height = `${el.scrollHeight}px`;\r\n el.style.overflowY = \"hidden\"; // hilang scroll\r\n }\r\n };\r\n\r\n const sendChat = async () => {\r\n if (message.length > 0 && !isLoadingResponse) {\r\n setMessage(\"\");\r\n setTimeout(() => {\r\n handleInput(); // reset height setelah message kosong\r\n }, 0);\r\n await handleSendChat(message);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={`ic-pt-4 ic-pb-2 ic-px-4 ic-w-full ic-max-w-2xl ic-bg-white ic-rounded-md ic-border ic-border-gray-200 ic-flex ic-items-start ic-justify-between ic-gap-3`}\r\n >\r\n {/* <div className=\"ic-w-9 ic-h-9 ic-shrink-0 ic-grow-0 ic-rounded-md ic-flex ic-justify-center ic-items-center ic-border ic-border-gray-300\">\r\n <AttachIcon />\r\n </div> */}\r\n <div className=\"ic-w-full \">\r\n <textarea\r\n ref={textareaRef}\r\n placeholder=\"Ask anything\"\r\n value={message}\r\n // disabled={isLoadingResponse}\r\n rows={1}\r\n onInput={handleInput}\r\n className={`w-full ic-text-sm ic-text-gray-700 ic-py-2 ic-w-full ic-px-3 focus:ic-outline-none ic-rounded-md ic-border\r\n ic-border-gray-300 ic-overflow-auto\r\n \r\n `}\r\n onChange={(e) => {\r\n setMessage(e.target.value);\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\") {\r\n if (e.shiftKey || isLoadingResponse) return; // Shift+Enter → baris baru\r\n\r\n e.preventDefault(); // cegah \\n\r\n sendChat();\r\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }}\r\n />\r\n </div>\r\n {isLoadingResponse ? (\r\n <div className=\"ic-mt-4\">\r\n <CustomLoading size=\"8px\" />\r\n </div>\r\n ) : (\r\n <div\r\n className={`${message.length < 1 || isLoadingResponse ? \"ic-bg-gray-400\" : \"ic-bg-primary-500\"} ic-mt-1 ic-shrink-0 ic-grow-0 ic-w-9 ic-h-9 ic-rounded-md ic-flex ic-justify-center ic-items-center ic-border ic-border-gray-300`}\r\n onClick={() => {\r\n sendChat();\r\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }}\r\n >\r\n <SendIcon />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatSender;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SendIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1096_2365)\">\r\n <path\r\n d=\"M1.60252 7.80845C1.17752 7.63761 1.18252 7.38345 1.63085 7.23428L17.5358 1.93261C17.9767 1.78595 18.2292 2.03262 18.1059 2.46428L13.5608 18.3693C13.4358 18.8101 13.165 18.8301 12.9633 18.4276L9.16668 10.8334L1.60252 7.80845ZM5.67752 7.64178L10.3742 9.52095L12.9075 14.5893L15.8625 4.24762L5.67668 7.64178H5.67752Z\"\r\n fill=\"#FBFBFD\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1096_2365\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default SendIcon;\r\n","import \"./customLoading.css\";\r\nfunction CustomLoading({ size = \"12px\" }) {\r\n return (\r\n <div className=\"typing-dots\">\r\n <span style={{ width: size, height: size }}></span>\r\n <span style={{ width: size, height: size }}></span>\r\n <span style={{ width: size, height: size }}></span>\r\n </div>\r\n );\r\n}\r\n\r\nexport default CustomLoading;\r\n","import React, { useMemo, useState } from \"react\";\r\nimport MenuFoldLineIcon from \"../assets/icons/MenuFoldLineIcon\";\r\nimport SettingGearIcon from \"../assets/icons/SettingGearIcon\";\r\nimport InputForm from \"../atoms/InputForm\";\r\nimport SearchIcon from \"../assets/icons/SearchIcon\";\r\nimport MessageIcon from \"../assets/icons/MessageIcon\";\r\nimport ChatAction from \"../atoms/ChatAction\";\r\nimport _ from \"lodash\";\r\nimport cn from \"../utils/TwMerge\";\r\nimport EditIcon from \"../assets/icons/EditIcon\";\r\ntype Props = {\r\n data: {\r\n id: number;\r\n date: string;\r\n title: string;\r\n }[];\r\n};\r\n\r\nconst ChatHistory = (props: Props) => {\r\n const { data } = props;\r\n const [activeId, setActiveId] = useState<number | string>(0);\r\n const [isWide, setIsWide] = useState(true);\r\n const groupedData = useMemo(() => {\r\n const now = new Date();\r\n\r\n const grouped = _.groupBy(data, (item) => {\r\n const d = new Date(item.date);\r\n\r\n const isSameMonth =\r\n d.getMonth() === now.getMonth() &&\r\n d.getFullYear() === now.getFullYear();\r\n\r\n if (isSameMonth) return \"This month\";\r\n\r\n // ambil nama bulan (Feb, Mar, dll)\r\n return d.toLocaleString(\"en-US\", { month: \"short\" });\r\n });\r\n\r\n // ubah jadi array format yang kamu mau\r\n return (Object as any).entries(grouped).map(([key, value]: any) => ({\r\n date: key,\r\n data: value,\r\n }));\r\n }, [data]);\r\n return (\r\n <div\r\n className={`\r\n ic-transition-all ic-duration-300\r\n ${isWide ? \"ic-max-w-screen-lg\" : \"ic-max-w-12\"}\r\n ic-w-full `}\r\n >\r\n <div className=\" ic-sticky ic-top-0 ic-bg-white ic-py-2 ic-z-20\">\r\n <div\r\n className={`ic-flex ic-justify-between ic-w-full\r\n ${cn({ \"ic-flex-col ic-gap-4\": !isWide })}\r\n `}\r\n >\r\n <div\r\n className={`clickable\r\n ${!isWide && \"ic-transform ic-scale-x-[-1]\"}\r\n `}\r\n onClick={() => {\r\n setIsWide(!isWide);\r\n }}\r\n >\r\n <MenuFoldLineIcon />\r\n </div>\r\n {!isWide && (\r\n <div className=\"clickable ic-rounded-sm ic-p-1 ic-mt-5 hover:ic-bg-dark-primary-300\">\r\n <EditIcon />\r\n </div>\r\n )}\r\n {isWide && <div className=\"clickable\">New Chat</div>}\r\n <div className=\"clickable ic-rounded-sm ic-p-1 hover:ic-bg-dark-primary-300\">\r\n {/* <SettingGearIcon /> */}\r\n </div>\r\n </div>\r\n {isWide && (\r\n <div className=\"ic-mt-7 ic-w-full\">\r\n <InputForm\r\n type=\"text\"\r\n name=\"keyword\"\r\n placeholder=\"Search history\"\r\n autoCorrect=\"off\"\r\n autoCapitalize=\"off\"\r\n spellCheck=\"false\"\r\n rightIcon={<SearchIcon />}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n {isWide && (\r\n <>\r\n {groupedData.map(\r\n (\r\n r: { date: string; data: { id: number; title: string }[] },\r\n i: number,\r\n ) => {\r\n return (\r\n <div className=\"ic-mt-5\" key={`chat-history-${r.date}-${i}`}>\r\n <p className=\"ic-font-bold ic-text-sm\">{r.date}</p>\r\n <div className=\"ic-px-2\">\r\n {r.data.map((item, index) => (\r\n <ChatAction\r\n key={`chat-action-${item.id}-${index}`}\r\n title={item.title}\r\n id={item.id}\r\n activeId={activeId}\r\n onEdit={(id) => {}}\r\n onDelete={(id) => {}}\r\n onActiveChange={(id) => {\r\n setActiveId(id);\r\n }}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n },\r\n )}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatHistory;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst MenuFoldLineIcon = (props: Props) => {\r\n return (\r\n <>\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1081_1936)\">\r\n <path\r\n d=\"M17.4993 15.0001V16.6668H2.49935V15.0001H17.4993ZM5.49602 3.25342L6.67435 4.43175L4.02268 7.08342L6.67435 9.73509L5.49602 10.9134L1.66602 7.08342L5.49602 3.25342ZM17.4993 9.16675V10.8334H9.99935V9.16675H17.4993ZM17.4993 3.33342V5.00008H9.99935V3.33342H17.4993Z\"\r\n fill=\"#21305F\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1081_1936\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </>\r\n );\r\n};\r\n\r\nexport default MenuFoldLineIcon;\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport default function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import React, { InputHTMLAttributes } from \"react\";\r\nimport cn from \"../utils/TwMerge\";\r\n\r\ntype Props = InputHTMLAttributes<HTMLInputElement> & {\r\n rightIcon?: React.ReactNode;\r\n};\r\n\r\nconst InputForm = (props: Props) => {\r\n const { rightIcon, ...rest } = props;\r\n return (\r\n <div\r\n className={`ic-border ic-border-gray-300 ic-w-full ic-rounded-md ic-flex ic-items-center\r\n focus-within:ic-border-dark-primary-500 focus-within:ic-border-2\r\n \r\n `}\r\n >\r\n <input\r\n {...rest}\r\n className={`ic-py-2 ic-w-full ic-px-3 focus:ic-outline-none\r\n ${cn({ \"ic-pr-3 ic-border-r ic-border-gray-300\": props.rightIcon })}\r\n ${cn({ \"ic-rounded-r-md\": !props.rightIcon })}\r\n `}\r\n />\r\n {props.rightIcon && (\r\n <div className=\"ic-py-2 ic-px-3 ic-pl-2\">{props.rightIcon}</div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default InputForm;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SearchIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"17\"\r\n height=\"17\"\r\n viewBox=\"0 0 17 17\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M16.0232 14.9163L10.806 9.69911C11.6156 8.65246 12.0536 7.37277 12.0536 6.02679C12.0536 4.41563 11.4248 2.90491 10.2877 1.76585C9.15067 0.626786 7.63594 0 6.02679 0C4.41763 0 2.9029 0.628795 1.76585 1.76585C0.626786 2.9029 0 4.41563 0 6.02679C0 7.63594 0.628795 9.15067 1.76585 10.2877C2.9029 11.4268 4.41563 12.0536 6.02679 12.0536C7.37277 12.0536 8.65045 11.6156 9.6971 10.808L14.9143 16.0232C14.9296 16.0385 14.9477 16.0507 14.9677 16.0589C14.9877 16.0672 15.0092 16.0715 15.0308 16.0715C15.0524 16.0715 15.0739 16.0672 15.0939 16.0589C15.1139 16.0507 15.132 16.0385 15.1473 16.0232L16.0232 15.1493C16.0385 15.134 16.0507 15.1159 16.0589 15.0959C16.0672 15.0759 16.0715 15.0545 16.0715 15.0328C16.0715 15.0112 16.0672 14.9897 16.0589 14.9697C16.0507 14.9498 16.0385 14.9316 16.0232 14.9163ZM9.20893 9.20893C8.35714 10.0587 7.22813 10.5268 6.02679 10.5268C4.82545 10.5268 3.69643 10.0587 2.84464 9.20893C1.99487 8.35714 1.52679 7.22813 1.52679 6.02679C1.52679 4.82545 1.99487 3.69442 2.84464 2.84464C3.69643 1.99487 4.82545 1.52679 6.02679 1.52679C7.22813 1.52679 8.35915 1.99286 9.20893 2.84464C10.0587 3.69643 10.5268 4.82545 10.5268 6.02679C10.5268 7.22813 10.0587 8.35915 9.20893 9.20893Z\"\r\n fill=\"black\"\r\n fillOpacity=\"0.45\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default SearchIcon;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport MessageIcon from \"../assets/icons/MessageIcon\";\r\nimport EditIcon from \"../assets/icons/EditIcon\";\r\nimport DeleteIcon from \"../assets/icons/DeleteIcon\";\r\n\r\ntype Props = {\r\n id: number | string;\r\n title: string;\r\n onEdit: (id: number | string) => void;\r\n onDelete: (id: number | string) => void;\r\n activeId: number | string;\r\n onActiveChange: (id: number | string) => void;\r\n};\r\n\r\nconst ChatAction = (props: Props) => {\r\n const { id, title, onEdit, onDelete, activeId, onActiveChange } = props;\r\n const [open, setOpen] = useState<number | string>(0);\r\n const actionRef: any = useRef(null);\r\n const dotRef: any = useRef(null);\r\n useEffect(() => {\r\n function handleClickOutside(event: any) {\r\n if (\r\n actionRef.current &&\r\n !actionRef.current?.contains(event.target) &&\r\n dotRef.current &&\r\n !dotRef.current?.contains(event.target) &&\r\n open == 0\r\n ) {\r\n setOpen(0);\r\n }\r\n }\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n return (\r\n <div className=\"ic-w-full ic-relative\">\r\n <div\r\n className={`ic-w-full clickable hover:ic-bg-dark-primary-100 hover:ic-font-bold ic-px-2 ic-rounded-md\r\n ${activeId == id ? \"ic-bg-dark-primary-100 ic-font-bold \" : \"\"}\r\n `}\r\n onClick={(e) => {\r\n onActiveChange(id);\r\n }}\r\n >\r\n <div className=\"ic-flex ic-justify-between hover:font-bold hover:ic-text-dark-primary-500 ic-w-full ic-py-2 ic-gap-2 ic-items-center\">\r\n <div className=\"ic-flex ic-text-center ic-w-full ic-gap-2 ic-items-center ic-truncate\">\r\n <div>\r\n <MessageIcon\r\n color={`${activeId == id ? \"#20305f\" : \"#737373\"} `}\r\n />\r\n </div>\r\n <p\r\n className={` ic-text-sm ic-truncate \r\n ${activeId == id ? \"ic-text-dark-primary-500\" : \"\"}\r\n `}\r\n >\r\n {title}\r\n </p>\r\n </div>\r\n <div>\r\n <p\r\n ref={dotRef}\r\n className=\"\r\n ic-select-none\r\n ic-flex ic-justify-center ic-items-center ic-w-10\r\n ic-font-bold ic-rounded-md\r\n ic-pb-2 clickable hover:ic-bg-slate-200 \r\n \"\r\n onClick={() => {\r\n setOpen(id == open ? 0 : id);\r\n }}\r\n >\r\n ...\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n {open === id && (\r\n <div\r\n className=\"ic-absolute ic-z-40 ic-top-10 ic-right-2 ic-p-2 ic-bg-white ic-shadow-md\"\r\n ref={actionRef}\r\n onMouseEnter={(e) => {\r\n e.preventDefault();\r\n }}\r\n >\r\n <div\r\n className=\"ic-p-2 ic-flex ic-text-center ic-gap-2 clickable hover:ic-bg-slate-200\"\r\n onClick={() => {\r\n onEdit(id);\r\n }}\r\n >\r\n <EditIcon />\r\n <p className=\"ic-text-sm ic-font-bold\">Edit</p>\r\n </div>\r\n <div\r\n className=\"ic-p-2 ic-flex ic-text-center ic-gap-2 clickable hover:ic-bg-slate-200 \"\r\n onClick={() => {\r\n onDelete(id);\r\n }}\r\n >\r\n <DeleteIcon />\r\n <p className=\"ic-text-sm ic-font-bold ic-text-red-500 \">Delete</p>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatAction;\r\n","import React from \"react\";\r\n\r\ntype Props = {\r\n color?: string;\r\n};\r\n\r\nconst MessageIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1092_4826)\">\r\n <path\r\n d=\"M11.3619 7.9687C10.8463 7.9687 10.4468 8.36825 10.4468 8.86156C10.4468 9.35486 10.8463 9.75441 11.3619 9.75441C11.8329 9.75441 12.2325 9.35486 12.2325 8.86156C12.2325 8.36825 11.8329 7.9687 11.3619 7.9687ZM5.11194 7.9687C4.59631 7.9687 4.19676 8.36825 4.19676 8.86156C4.19676 9.35486 4.59631 9.75441 5.11194 9.75441C5.58292 9.75441 5.98247 9.35486 5.98247 8.86156C5.98247 8.36825 5.58292 7.9687 5.11194 7.9687Z\"\r\n fill={`${props.color || \"#5F79C8\"}`}\r\n />\r\n <path\r\n d=\"M18.5265 6.27053C17.4938 4.84897 16.0046 3.8247 14.3077 3.36874V3.37098C13.926 2.94687 13.4952 2.55624 13.0131 2.20803C9.35908 -0.44822 4.22961 0.362048 1.5622 4.01607C-0.587352 6.98482 -0.495834 10.9781 1.69613 13.8152L1.71399 16.775C1.71399 16.8464 1.72515 16.9179 1.74747 16.9848C1.77555 17.0743 1.82098 17.1573 1.88118 17.2292C1.94138 17.301 2.01515 17.3603 2.09829 17.4037C2.18142 17.447 2.27229 17.4735 2.36568 17.4817C2.45907 17.4899 2.55316 17.4795 2.64256 17.4513L5.46845 16.5607C6.21622 16.8263 6.98854 16.9781 7.7564 17.0205L7.74524 17.0295C9.73408 18.4781 12.3412 18.9134 14.7318 18.1232L17.5689 19.0473C17.6403 19.0696 17.714 19.083 17.7899 19.083C18.185 19.083 18.5042 18.7638 18.5042 18.3687V15.3777C20.4707 12.708 20.522 9.0183 18.5265 6.27053ZM5.78095 14.9759L5.5131 14.8643L3.30327 15.5562L3.28095 13.2348L3.10238 13.0339C1.21399 10.7304 1.08899 7.41115 2.85685 4.97589C5.00863 2.02499 9.13363 1.37321 12.0756 3.50267C15.0265 5.64776 15.6805 9.76607 13.5488 12.6991C11.7609 15.1522 8.55997 16.0585 5.78095 14.9759ZM17.0533 14.5964L16.8747 14.8196L16.897 17.1411L14.7095 16.4045L14.4417 16.5161C13.1917 16.9804 11.8591 17.0183 10.6247 16.6723L10.6202 16.6701C12.3167 16.1498 13.7987 15.0932 14.8435 13.6589C16.5488 11.3085 16.8256 8.35535 15.8345 5.83749L15.8479 5.84642C16.3613 6.21473 16.8323 6.67455 17.2318 7.23035C18.8524 9.45356 18.7609 12.4804 17.0533 14.5964Z\"\r\n fill={`${props.color || \"#5F79C8\"}`}\r\n />\r\n <path\r\n d=\"M8.23694 7.9687C7.72131 7.9687 7.32176 8.36825 7.32176 8.86156C7.32176 9.35486 7.72131 9.75441 8.23694 9.75441C8.70792 9.75441 9.10747 9.35486 9.10747 8.86156C9.10747 8.36825 8.70792 7.9687 8.23694 7.9687Z\"\r\n fill={`${props.color || \"#5F79C8\"}`}\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1092_4826\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default MessageIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst EditIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1096_2009)\">\r\n <path\r\n d=\"M3.45921 12.284C3.49492 12.284 3.53064 12.2805 3.56635 12.2751L6.56992 11.7483C6.60564 11.7412 6.63957 11.7251 6.66457 11.6983L14.2342 4.12868C14.2508 4.11216 14.2639 4.09254 14.2729 4.07094C14.2818 4.04934 14.2864 4.02618 14.2864 4.00279C14.2864 3.9794 14.2818 3.95625 14.2729 3.93464C14.2639 3.91304 14.2508 3.89342 14.2342 3.8769L11.2664 0.907254C11.2324 0.873326 11.1878 0.855469 11.1396 0.855469C11.0914 0.855469 11.0467 0.873326 11.0128 0.907254L3.44314 8.4769C3.41635 8.50368 3.40028 8.53583 3.39314 8.57154L2.86635 11.5751C2.84898 11.6708 2.85519 11.7692 2.88443 11.862C2.91368 11.9547 2.96509 12.0389 3.03421 12.1073C3.15207 12.2215 3.30028 12.284 3.45921 12.284ZM4.66278 9.16975L11.1396 2.69475L12.4485 4.00368L5.97171 10.4787L4.38421 10.759L4.66278 9.16975ZM14.5717 13.784H1.42885C1.11278 13.784 0.857422 14.0394 0.857422 14.3555V14.9983C0.857422 15.0769 0.921708 15.1412 1.00028 15.1412H15.0003C15.0789 15.1412 15.1431 15.0769 15.1431 14.9983V14.3555C15.1431 14.0394 14.8878 13.784 14.5717 13.784Z\"\r\n fill=\"#16203F\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1096_2009\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default EditIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst DeleteIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.28544 2.14118H5.14258C5.22115 2.14118 5.28544 2.0769 5.28544 1.99833V2.14118H10.714V1.99833C10.714 2.0769 10.7783 2.14118 10.8569 2.14118H10.714V3.4269H11.9997V1.99833C11.9997 1.36797 11.4872 0.855469 10.8569 0.855469H5.14258C4.51222 0.855469 3.99972 1.36797 3.99972 1.99833V3.4269H5.28544V2.14118ZM14.2854 3.4269H1.71401C1.39794 3.4269 1.14258 3.68225 1.14258 3.99833V4.56975C1.14258 4.64833 1.20686 4.71261 1.28544 4.71261H2.36401L2.80508 14.0519C2.83365 14.6608 3.33722 15.1412 3.94615 15.1412H12.0533C12.664 15.1412 13.1658 14.6626 13.1944 14.0519L13.6354 4.71261H14.714C14.7926 4.71261 14.8569 4.64833 14.8569 4.56975V3.99833C14.8569 3.68225 14.6015 3.4269 14.2854 3.4269ZM11.9158 13.8555H4.08365L3.65151 4.71261H12.3479L11.9158 13.8555Z\"\r\n fill=\"#FF4D4F\"\r\n />\r\n </svg>\r\n );\r\n};\r\n\r\nexport default DeleteIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SuggestionChat = (props: Props) => {\r\n return <div>SuggestionChat</div>;\r\n};\r\n\r\nexport default SuggestionChat;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ChatSender from \"./ChatSender\";\r\nimport FlexaIcon from \"../assets/icons/FlexaIcon\";\r\nimport AdminChatResponse from \"../atoms/AdminChatResponse\";\r\nimport UserChatResponse from \"../atoms/UserChatResponse\";\r\nimport { useChat } from \"../providers/ChatProvider\";\r\nimport dayjs from \"dayjs\";\r\nimport { ChatType } from \"../providers/ChatCotextType\";\r\n\r\ntype Props = {\r\n onResponseChat?: (output: ChatType) => void;\r\n};\r\n\r\nconst Chatting = (props: Props) => {\r\n const { chats, isLoadingResponse, handleSendChat } = useChat();\r\n const chatCanvasRef = useRef<HTMLDivElement>(null!);\r\n const [isUserAtBottom, setIsUserAtBottom] = useState(true);\r\n\r\n // update scroll status saat user scroll\r\n const handleScroll = () => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n setIsUserAtBottom(el.scrollHeight - el.scrollTop - el.clientHeight < 10);\r\n };\r\n\r\n useEffect(() => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n\r\n if (isUserAtBottom) {\r\n el.scrollTop = el.scrollHeight;\r\n }\r\n }, [chats, isUserAtBottom]);\r\n\r\n useEffect(() => {\r\n if (!isLoadingResponse && chats.length > 0) {\r\n const lastChat = chats[chats.length - 1];\r\n if (lastChat.status === \"COMPLETE\") {\r\n props.onResponseChat && props.onResponseChat(lastChat);\r\n // console.log(\"TT\", lastChat);\r\n }\r\n }\r\n }, [chats, isLoadingResponse]);\r\n\r\n return (\r\n <div\r\n ref={chatCanvasRef}\r\n onScroll={handleScroll}\r\n className=\"ic-h-full ic-overflow-auto ic-relative ic-w-full ic-flex-col ic-items-center ic-justify-between ic-flex \"\r\n >\r\n {chats.length < 1 && <div></div>}\r\n <div className=\"ic-w-full ic-flex ic-justify-center\">\r\n {chats.length < 1 ? (\r\n <div className=\"ic-flex ic-flex-col ic-text-center ic-items-center ic-gap-4\">\r\n <FlexaIcon />\r\n <p className=\"ic-text-dark-primary-500 ic-font-bold ic-text-xl ic-text-center\">\r\n Welcome to FlexA Copilot\r\n <br />\r\n How i can assist you today?\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"ic-w-full ic-max-w-5xl ic-flex ic-flex-col ic-space-y-4 \">\r\n {chats.map((item) => {\r\n const input: { message: string; output: string } = JSON.parse(\r\n item.input,\r\n );\r\n return (\r\n <div\r\n className=\" ic-flex ic-flex-col ic-space-y-4 ic-w-full \"\r\n key={`chat-response-${item.jobId}`}\r\n >\r\n <div className=\" ic-w-full ic-flex ic-justify-end\">\r\n <div className=\"ic-w-full ic-flex ic-justify-end ic-max-w-4xl ic-pr-4 ic-pl-20\">\r\n <UserChatResponse\r\n message={input.message}\r\n time={dayjs(item.createDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n <div className=\" ic-w-full ic-flex ic-justify-start ic-pr-20\">\r\n <div className=\"ic-w-full ic-max-w-4xl\">\r\n <AdminChatResponse\r\n message={item.output}\r\n isLoading={item.status === \"RUNNING\"}\r\n time={dayjs(item.endDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"ic-sticky ic-mt-4 ic-bottom-0 ic-w-full ic-flex ic-justify-center\">\r\n <ChatSender\r\n isLoadingResponse={isLoadingResponse}\r\n handleSendChat={handleSendChat}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Chatting;\r\n","import React from \"react\";\r\n\r\ntype Props = {\r\n w?: number;\r\n h?: number;\r\n};\r\n\r\nconst FlexaIcon = (props: Props) => {\r\n const { w, h } = props;\r\n return (\r\n <>\r\n <svg\r\n width={w || 40}\r\n height={h || 40}\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.8513 8.02435C5.0388 5.44935 7.53255 3.3806 10.445 3.27435C15.295 3.0306 20.1638 3.14935 25.02 3.3431C22.8638 4.94935 20.5388 6.91185 20.1638 9.74935C19.7013 13.1244 19.9763 16.5494 19.97 19.9494C15.5638 20.0306 10.6825 19.1244 6.7138 21.5181C3.3513 23.5869 3.0263 27.9494 3.38255 31.4994C2.89505 25.8994 3.34505 20.2806 3.15755 14.6744C3.20755 12.4556 2.9388 10.1119 3.8513 8.02435Z\"\r\n fill=\"#24315E\"\r\n />\r\n <path\r\n d=\"M25.02 3.343C28.1325 2.87425 31.8013 2.993 34.1388 5.41175C38.2263 9.1555 37.1888 17.0617 31.945 19.2367C28.1263 20.6492 23.945 20.0117 19.97 19.9492C19.9763 16.5492 19.7013 13.1242 20.1638 9.74925C20.5388 6.91175 22.8638 4.94925 25.02 3.343Z\"\r\n fill=\"#F37C21\"\r\n />\r\n <path\r\n d=\"M6.71366 21.518C10.6824 19.1243 15.5637 20.0305 19.9699 19.9493C19.9637 23.6805 20.4199 27.5118 19.4012 31.1618C18.3949 34.7118 14.7887 37.243 11.0949 36.9243C7.65741 36.9493 4.91991 34.3493 3.38241 31.4993C2.66357 28.1118 3.35116 23.5868 6.71366 21.518Z\"\r\n fill=\"#189DD8\"\r\n />\r\n </svg>\r\n </>\r\n );\r\n};\r\n\r\nexport default FlexaIcon;\r\n","import React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst ClockIcon = (props: Props) => {\r\n return (\r\n <svg\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_1096_17248)\">\r\n <path\r\n d=\"M6 0C2.68661 0 0 2.68661 0 6C0 9.31339 2.68661 12 6 12C9.31339 12 12 9.31339 12 6C12 2.68661 9.31339 0 6 0ZM6 10.9821C3.24911 10.9821 1.01786 8.75089 1.01786 6C1.01786 3.24911 3.24911 1.01786 6 1.01786C8.75089 1.01786 10.9821 3.24911 10.9821 6C10.9821 8.75089 8.75089 10.9821 6 10.9821Z\"\r\n fill=\"#8C8C8C\"\r\n />\r\n <path\r\n d=\"M8.33984 7.69428L6.43002 6.31348V2.99874C6.43002 2.93982 6.3818 2.8916 6.32287 2.8916H5.67868C5.61975 2.8916 5.57153 2.93982 5.57153 2.99874V6.68714C5.57153 6.72196 5.5876 6.7541 5.61573 6.77419L7.83091 8.38937C7.87912 8.42419 7.94609 8.41348 7.98091 8.3666L8.36394 7.84428C8.39877 7.79473 8.38805 7.72776 8.33984 7.69428Z\"\r\n fill=\"#8C8C8C\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1096_17248\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nexport default ClockIcon;\r\n","import React from \"react\";\r\nimport ClockIcon from \"../assets/icons/ClockIcon\";\r\nimport FlexaIcon from \"../assets/icons/FlexaIcon\";\r\nimport CustomLoading from \"./CustomLoading\";\r\n\r\ntype Props = {\r\n message?: string;\r\n isLoading?: boolean;\r\n time?: string;\r\n};\r\n\r\nconst AdminChatResponse = (props: Props) => {\r\n return (\r\n <div className=\"ic-flex ic-gap-4\">\r\n <div className=\"\">\r\n <div className=\"ic-h-10 ic-w-10 ic-bg-white ic-shrink-0 ic-grow-0 ic-shadow-sm ic-rounded-md ic-flex ic-justify-center ic-items-center\">\r\n <FlexaIcon w={24} h={24} />\r\n </div>\r\n </div>\r\n {props.isLoading ? (\r\n <div className=\"ic-mt-4\">\r\n <CustomLoading size=\"8px\" />\r\n </div>\r\n ) : (\r\n <div className=\"ic-bg-white ic-shadow-sm ic-p-3 ic-text-gray-700 ic-rounded-md\">\r\n <p className=\"ic-text-sm ic-whitespace-pre-line \">{props.message || \"\"}</p>\r\n <p className=\"ic-mt-2 ic-w-full ic-items-center ic-text-sm ic-flex ic-gap-1 ic-justify-start\">\r\n <ClockIcon /> {props.time}\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AdminChatResponse;\r\n","import React from \"react\";\r\nimport ClockIcon from \"../assets/icons/ClockIcon\";\r\n\r\ntype Props = {\r\n message: string;\r\n time: string;\r\n};\r\n\r\nconst UserChatResponse = (props: Props) => {\r\n return (\r\n <div className=\"ic-bg-white ic-shadow-sm ic-p-3 ic-rounded-md ic-w-fit ic-text-gray-700\">\r\n <p className=\"ic-text-sm \">{props.message}</p>\r\n <p className=\"ic-mt-2 ic-w-full ic-items-center ic-text-sm ic-flex ic-gap-1 ic-justify-end\">\r\n <ClockIcon /> {props.time}\r\n </p>\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserChatResponse;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport API from \"../utils/api\";\r\nimport { ChatContextType, ChatType } from \"./ChatCotextType\";\r\n\r\ntype Props = {\r\n ORACLE_TOKEN_URL: string;\r\n ORACLE_BASE_URL: string;\r\n ORACLE_CLIENT_ID: string;\r\n ORACLE_CLIENT_SECRET: string;\r\n ORACLE_SCOPE: string;\r\n PROXY_URL: string;\r\n WORKFLOW_CODE: string;\r\n children: React.ReactNode;\r\n};\r\nconst ChatContext = React.createContext<ChatContextType>(null!);\r\nfunction ChatProvider(props: Props) {\r\n const {\r\n ORACLE_TOKEN_URL,\r\n ORACLE_BASE_URL,\r\n ORACLE_CLIENT_ID,\r\n ORACLE_CLIENT_SECRET,\r\n ORACLE_SCOPE,\r\n PROXY_URL,\r\n WORKFLOW_CODE,\r\n } = props;\r\n const ApiReq = API.create(\r\n PROXY_URL,\r\n ORACLE_TOKEN_URL,\r\n ORACLE_CLIENT_ID,\r\n ORACLE_CLIENT_SECRET,\r\n ORACLE_SCOPE,\r\n );\r\n const [chatHistories, setChatHistories] = useState([]);\r\n const [chats, setChats] = useState<ChatType[]>([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isLoadingResponse, setIsLoadingResponse] = useState(false);\r\n const [disallowChattingMessage, setDisallowChattingMessage] = useState(\"\");\r\n\r\n const handleNewChat = async () => {};\r\n const handleSendChat = async (message: string) => {\r\n setIsLoadingResponse(true);\r\n try {\r\n const res = await ApiReq.post(\r\n `${ORACLE_BASE_URL}/${WORKFLOW_CODE}/invokeAsync`,\r\n {\r\n message: message,\r\n conversational: true,\r\n invocationMode: \"ADMIN\",\r\n conversationId: chats[chats.length - 1]?.conversationId || uuidv4(),\r\n },\r\n );\r\n setChats((prev) => [...prev, res.data]);\r\n const jobId = res.data.jobId;\r\n let jobStatus = res.data.status;\r\n while (jobStatus === \"RUNNING\") {\r\n const resCheck = await ApiReq.get(\r\n `${ORACLE_BASE_URL}/${WORKFLOW_CODE}/status/${jobId}?invocationMode=ADMIN`,\r\n );\r\n jobStatus = resCheck.data.status;\r\n setChats((prev) => {\r\n return prev.map((chat) => {\r\n if (chat.jobId === jobId) {\r\n return resCheck.data;\r\n }\r\n return chat;\r\n });\r\n });\r\n if (resCheck.data.status == \"RUNNING\") {\r\n await new Promise((resolve) => setTimeout(resolve, 2000));\r\n }\r\n\r\n if (\r\n resCheck.data.status !== \"RUNNING\" &&\r\n resCheck.data.status !== \"COMPLETE\"\r\n ) {\r\n setChats((prev) => {\r\n return prev.map((chat) => {\r\n if (chat.jobId === jobId) {\r\n return {\r\n ...resCheck.data,\r\n output: \"Something went wrong\",\r\n };\r\n }\r\n return chat;\r\n });\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n console.log(\"error\", error);\r\n }\r\n setIsLoadingResponse(false);\r\n };\r\n const handleResponseChat = async () => {};\r\n const handleChangeTopic = async () => {};\r\n const handleAttachFile = async () => {};\r\n const handleDeleteChat = async () => {};\r\n const handleGetHistoryChat = async () => {};\r\n\r\n useEffect(() => {\r\n // init();\r\n // handleSendChat();\r\n // handleGenerateToken(\r\n // PROXY_URL,\r\n // ORACLE_TOKEN_URL,\r\n // ORACLE_CLIENT_ID,\r\n // ORACLE_CLIENT_SECRET,\r\n // ORACLE_SCOPE,\r\n // );\r\n }, []);\r\n\r\n return (\r\n <ChatContext.Provider\r\n value={{\r\n chatHistories,\r\n setChatHistories,\r\n chats,\r\n setChats,\r\n isLoading,\r\n setIsLoading,\r\n isLoadingResponse,\r\n setIsLoadingResponse,\r\n disallowChattingMessage,\r\n setDisallowChattingMessage,\r\n handleNewChat,\r\n handleSendChat,\r\n handleResponseChat,\r\n handleChangeTopic,\r\n handleAttachFile,\r\n handleDeleteChat,\r\n handleGetHistoryChat,\r\n }}\r\n >\r\n {props.children}\r\n </ChatContext.Provider>\r\n );\r\n}\r\nexport const useChat = () => React.useContext(ChatContext);\r\n\r\nexport default ChatProvider;\r\n","import axios, { AxiosRequestConfig } from \"axios\";\r\nconst handleGenerateToken = async (\r\n PROXY_URL: string,\r\n ORACLE_TOKEN_URL: string,\r\n ORACLE_CLIENT_ID: string,\r\n ORACLE_CLIENT_SECRET: string,\r\n ORACLE_SCOPE: string,\r\n) => {\r\n try {\r\n const res = await axios.post(PROXY_URL, {\r\n url: ORACLE_TOKEN_URL,\r\n payload: {\r\n grant_type: \"client_credentials\",\r\n client_id: ORACLE_CLIENT_ID,\r\n client_secret: ORACLE_CLIENT_SECRET,\r\n scope: ORACLE_SCOPE,\r\n },\r\n config: {\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n },\r\n });\r\n localStorage.setItem(\"intellinum-chatbot-token\", res.data.access_token);\r\n } catch (error) {}\r\n};\r\nconst handleCreateApi = (\r\n PROXY_URL: string,\r\n ORACLE_TOKEN_URL: string,\r\n ORACLE_CLIENT_ID: string,\r\n ORACLE_CLIENT_SECRET: string,\r\n ORACLE_SCOPE: string,\r\n) => {\r\n const apiRequest = axios.create({\r\n baseURL: PROXY_URL,\r\n });\r\n\r\n apiRequest.interceptors.request.use(\r\n (config) => {\r\n const token = localStorage.getItem(\"intellinum-chatbot-token\");\r\n if (token) {\r\n if (config.method == \"post\") {\r\n config.data = {\r\n ...config.data,\r\n config: {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n },\r\n };\r\n } else if (config.method == \"get\") {\r\n config.params = {\r\n ...config.params,\r\n auth: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n apiRequest.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n async (error) => {\r\n let originalConfig = error.config;\r\n //when token expired or unauthorize, it should re-generate token and retry request again.\r\n if (error.response.status === 401 && !originalConfig._retry) {\r\n await handleGenerateToken(\r\n PROXY_URL,\r\n ORACLE_TOKEN_URL,\r\n ORACLE_CLIENT_ID,\r\n ORACLE_CLIENT_SECRET,\r\n ORACLE_SCOPE,\r\n );\r\n if (originalConfig.method == \"post\") {\r\n try {\r\n originalConfig.data = JSON.parse(originalConfig.data);\r\n } catch (error) {}\r\n }\r\n return apiRequest.request(originalConfig);\r\n }\r\n },\r\n );\r\n\r\n const handlePost = (\r\n url: string,\r\n payload?: any,\r\n config?: AxiosRequestConfig,\r\n ) => {\r\n const res = apiRequest.post(\"/\", {\r\n url,\r\n payload,\r\n config,\r\n });\r\n return res;\r\n };\r\n\r\n const handleGet = (url: string) => {\r\n const res = apiRequest.get(\"/?url=\" + url);\r\n return res;\r\n };\r\n return {\r\n post: handlePost,\r\n get: handleGet,\r\n };\r\n};\r\nconst API = {\r\n create: handleCreateApi,\r\n};\r\nexport { handleGenerateToken };\r\nexport default API;\r\n","import React, { useMemo, useRef, useState } from \"react\";\r\nimport API_STREAM from \"../utils/stream\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport {\r\n ChatStreamContextType,\r\n ChatStreamItemType,\r\n} from \"./ChatStreamContextType\";\r\ntype Props = {\r\n PROXY_URL: string;\r\n STREAM_URL: string;\r\n TOKEN: string;\r\n COMPANY: string;\r\n USERNAME: string;\r\n children: React.ReactNode;\r\n};\r\nconst ChatStreamContext = React.createContext<ChatStreamContextType>(null!);\r\nconst ChatStreamProvider = (props: Props) => {\r\n const isChatCreated = useRef(false);\r\n const { PROXY_URL, STREAM_URL, TOKEN, children } = props;\r\n const apiStream = API_STREAM.create(PROXY_URL, TOKEN);\r\n const [chats, setChats] = useState<ChatStreamItemType[]>([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isLoadingResponse, setIsLoadingResponse] = useState(false);\r\n const chatUuid = useMemo(() => uuidv4(), []);\r\n const handleSendChat = async (message: string) => {\r\n let lastEventData = \"\";\r\n let isReponseError = false\r\n let errorMessage = \"\";\r\n setChats((prev) => [\r\n ...prev,\r\n {\r\n message: message,\r\n type: \"user\",\r\n createDate: new Date(),\r\n status: \"COMPLETE\",\r\n },\r\n {\r\n type: \"bot\",\r\n status: \"RUNNING\",\r\n createDate: new Date(),\r\n message: \"\",\r\n },\r\n ]);\r\n setIsLoadingResponse(true);\r\n\r\n try {\r\n await apiStream.post(\r\n STREAM_URL,\r\n {\r\n input: {\r\n question: message,\r\n company: props.COMPANY,\r\n username: props.USERNAME,\r\n },\r\n config: {\r\n configurable: {\r\n thread_id: chatUuid,\r\n },\r\n },\r\n },\r\n (event, data) => {\r\n if(event === \"end\"){\r\n if(!isReponseError){\r\n setChats((prev) => {\r\n const updated = [...prev].slice(0, -1);\r\n return [...updated,{ message: lastEventData, status: \"COMPLETE\", createDate: new Date(), type: \"bot\"}];\r\n })\r\n }else{\r\n setChats((prev) => {\r\n const updated = [...prev].slice(0, -1);\r\n return [...updated,{ message: errorMessage, status: \"COMPLETE\", createDate: new Date(), type: \"bot\"}];\r\n })\r\n }\r\n isChatCreated.current = false;\r\n }\r\n if (event === \"data\") {\r\n lastEventData = data[0]?.content;\r\n }\r\n if (event === \"error\") {\r\n isReponseError = true;\r\n errorMessage = data?.error || \"Something went wrong\";\r\n }\r\n },\r\n );\r\n } catch (error) {}\r\n setIsLoadingResponse(false);\r\n };\r\n return (\r\n <ChatStreamContext.Provider\r\n value={{\r\n chats,\r\n isLoading,\r\n isLoadingResponse,\r\n handleSendChat,\r\n }}\r\n >\r\n {children}\r\n </ChatStreamContext.Provider>\r\n );\r\n};\r\nexport const useChatStream = () => {\r\n const context = React.useContext(ChatStreamContext);\r\n return context;\r\n};\r\nexport default ChatStreamProvider;\r\n","const handleCreateApiStream = (PROXY_URL: string, TOKEN: string) => {\r\n const handlePost = async (\r\n url: string,\r\n payload: any,\r\n onChunk: (event: any, data: any) => void\r\n ) => {\r\n const res = await fetch(PROXY_URL + \"/\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${TOKEN}`,\r\n },\r\n body: JSON.stringify({\r\n url,\r\n data: payload,\r\n }),\r\n });\r\n\r\n if (!res.body) {\r\n throw new Error(\"No stream body\");\r\n }\r\n\r\n const reader = res.body.getReader();\r\n const decoder = new TextDecoder(\"utf-8\");\r\n\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n const parts = buffer.split(\"\\n\\n\");\r\n buffer = parts.pop() || \"\";\r\n // console.log(parts, \"parts\");\r\n for (const part of parts) {\r\n const lines = part.split(\"\\n\");\r\n\r\n let event = \"\";\r\n let data = \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"event:\")) {\r\n event = line.replace(\"event:\", \"\").trim();\r\n }\r\n\r\n if (line.startsWith(\"data:\")) {\r\n data += line.replace(\"data:\", \"\").trim();\r\n }\r\n }\r\n\r\n if (event && data) {\r\n try {\r\n const json = JSON.parse(data);\r\n onChunk(event, json);\r\n } catch (e) {\r\n console.log(\"parse error:\", data);\r\n }\r\n }\r\n if (event === \"end\") {\r\n onChunk(event, data);\r\n }\r\n }\r\n }\r\n\r\n return \"done\";\r\n };\r\n\r\n return {\r\n post: handlePost,\r\n };\r\n};\r\nconst API_STREAM = {\r\n create: handleCreateApiStream,\r\n};\r\nexport default API_STREAM;\r\n\r\n\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ChatSender from \"./ChatSender\";\r\nimport FlexaIcon from \"../assets/icons/FlexaIcon\";\r\nimport AdminChatResponse from \"../atoms/AdminChatResponse\";\r\nimport UserChatResponse from \"../atoms/UserChatResponse\";\r\nimport dayjs from \"dayjs\";\r\nimport { ChatType } from \"../providers/ChatCotextType\";\r\nimport { useChatStream } from \"../providers/ChatStreamProvider\";\r\n\r\ntype Props = {\r\n onResponseChat?: (output: ChatType) => void;\r\n};\r\n\r\nconst ChattingStream = (props: Props) => {\r\n const { chats, isLoadingResponse, handleSendChat } = useChatStream();\r\n const chatCanvasRef = useRef<HTMLDivElement>(null!);\r\n const bottomRef: any = useRef(null);\r\n const [isUserAtBottom, setIsUserAtBottom] = useState(true);\r\n\r\n // update scroll status saat user scroll\r\n const handleScroll = () => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n setIsUserAtBottom(el.scrollHeight - el.scrollTop - el.clientHeight < 10);\r\n };\r\n\r\n useEffect(() => {\r\n const el = chatCanvasRef.current;\r\n if (!el) return;\r\n\r\n if (isUserAtBottom) {\r\n el.scrollTop = el.scrollHeight;\r\n }\r\n }, [chats, isUserAtBottom]);\r\n\r\n // useEffect(() => {\r\n // // console.log(\"harus masuk chat\", chats);\r\n // if (!isLoadingResponse && chats.length > 0) {\r\n // const lastChat = chats[chats.length - 1];\r\n // if (lastChat.status === \"COMPLETE\") {\r\n // props.onResponseChat && props.onResponseChat(lastChat);\r\n // // console.log(\"TT\", lastChat);\r\n // }\r\n // }\r\n // }, [chats, isLoadingResponse]);\r\n\r\n useEffect(() => {\r\n bottomRef.current?.scrollIntoView({ behavior: \"smooth\" });\r\n }, [chats]);\r\n\r\n return (\r\n <div\r\n ref={chatCanvasRef}\r\n onScroll={handleScroll}\r\n className=\"ic-h-full ic-overflow-auto ic-relative ic-w-full ic-flex-col ic-items-center ic-justify-between ic-flex \"\r\n >\r\n {chats.length < 1 && <div></div>}\r\n <div className=\"ic-w-full ic-flex ic-justify-center\">\r\n {chats.length < 1 ? (\r\n <div className=\"ic-flex ic-flex-col ic-text-center ic-items-center ic-gap-4\">\r\n <FlexaIcon />\r\n <p className=\"ic-text-dark-primary-500 ic-font-bold ic-text-xl ic-text-center\">\r\n Welcome to FlexA Copilot\r\n <br />\r\n How i can assist you today?\r\n </p>\r\n </div>\r\n ) : (\r\n <div className=\"ic-w-full ic-max-w-5xl ic-flex ic-flex-col ic-space-y-4 \">\r\n {chats.map((item, i) => {\r\n // const input: { message: string; output: string } = JSON.parse(\r\n // item.input,\r\n // );\r\n return (\r\n <div\r\n className=\" ic-flex ic-flex-col ic-space-y-4 ic-w-full \"\r\n key={`chat-response-${i}`}\r\n >\r\n {item.type === \"user\" ? (\r\n <div className=\" ic-w-full ic-flex ic-justify-end\">\r\n <div className=\"ic-w-full ic-flex ic-justify-end ic-max-w-4xl ic-pr-4 ic-pl-20\">\r\n <UserChatResponse\r\n message={item.message}\r\n time={dayjs(item.createDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\" ic-w-full ic-flex ic-justify-start ic-pr-20\">\r\n <div className=\"ic-w-full ic-max-w-4xl\">\r\n <AdminChatResponse\r\n message={item.message}\r\n isLoading={item.status === \"RUNNING\"}\r\n time={dayjs(item.createDate).format(\"HH:mm\")}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n <div ref={bottomRef} />\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"ic-sticky ic-mt-4 ic-bottom-0 ic-w-full ic-flex ic-justify-center\">\r\n <ChatSender\r\n isLoadingResponse={isLoadingResponse}\r\n handleSendChat={handleSendChat}\r\n bottomRef={bottomRef}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChattingStream;\r\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","axios","error","import_jsx_runtime","React","uuidv4","import_jsx_runtime","dayjs","import_react","import_uuid","import_jsx_runtime","React","uuidv4","import_react","import_dayjs","import_jsx_runtime","dayjs"]}