@blockspark/chat-widget 1.0.16 → 1.0.18
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.
- package/README.md +28 -28
- package/dist/{ChatWidget-CFvb5g7s.js → ChatWidget-Bs0XV_7i.js} +31 -36
- package/dist/ChatWidget-Bs0XV_7i.js.map +1 -0
- package/dist/ChatWidget-PcqRrOmi.cjs +2 -0
- package/dist/ChatWidget-PcqRrOmi.cjs.map +1 -0
- package/dist/adapters/vue/useChatMode.d.ts +1 -1
- package/dist/adapters/vue/useChatMode.d.ts.map +1 -1
- package/dist/components/ChatWidget.d.ts +1 -5
- package/dist/components/ChatWidget.d.ts.map +1 -1
- package/dist/core/stateManager.d.ts.map +1 -1
- package/dist/core/types.d.ts +0 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/entry/vite.d.ts +1 -1
- package/dist/hooks/useChatMode.d.ts +1 -1
- package/dist/hooks/useChatMode.d.ts.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +39 -22
- package/dist/index.esm.js.map +1 -1
- package/dist/nuxt.cjs.js +1 -1
- package/dist/nuxt.esm.js +2 -2
- package/dist/sanitize-C8MB41vY.cjs +4 -0
- package/dist/sanitize-C8MB41vY.cjs.map +1 -0
- package/dist/{sanitize-NEykcppO.js → sanitize-Cm1kskSD.js} +274 -1267
- package/dist/sanitize-Cm1kskSD.js.map +1 -0
- package/dist/services/chatService.d.ts.map +1 -1
- package/dist/services/dialogflowBackendService.d.ts +36 -0
- package/dist/services/dialogflowBackendService.d.ts.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/vue.cjs.js +1 -1
- package/dist/vue.esm.js +2 -2
- package/package.json +2 -2
- package/dist/ChatWidget-CFvb5g7s.js.map +0 -1
- package/dist/ChatWidget-CdA7TymM.cjs +0 -2
- package/dist/ChatWidget-CdA7TymM.cjs.map +0 -1
- package/dist/sanitize-DRKcO9o5.cjs +0 -4
- package/dist/sanitize-DRKcO9o5.cjs.map +0 -1
- package/dist/sanitize-NEykcppO.js.map +0 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useState, useEffect, useCallback, useRef } from "react";
|
|
3
|
-
import { c as createChatService,
|
|
3
|
+
import { c as createChatService, l as linkifyText, a as createDialogflowSession, C as ChatResolvedError, s as sendDialogflowMessage } from "./sanitize-Cm1kskSD.js";
|
|
4
4
|
import require$$0 from "react-dom";
|
|
5
|
-
const MODE_STORAGE_KEY = "
|
|
6
|
-
const CHAT_ID_STORAGE_KEY = "
|
|
7
|
-
const SESSION_ID_STORAGE_KEY = "
|
|
5
|
+
const MODE_STORAGE_KEY = "chartsconnectect_chat_mode";
|
|
6
|
+
const CHAT_ID_STORAGE_KEY = "chartsconnect_chat_id";
|
|
7
|
+
const SESSION_ID_STORAGE_KEY = "chartsconnect_session_id";
|
|
8
8
|
function useChatMode() {
|
|
9
9
|
const [currentMode, setCurrentMode] = useState(() => {
|
|
10
10
|
const savedMode = localStorage.getItem(MODE_STORAGE_KEY);
|
|
@@ -59,22 +59,20 @@ function useChatMode() {
|
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
function ChatWidget$1({
|
|
62
|
-
title = "💬
|
|
62
|
+
title = "💬 Charts Connect AI Assistant",
|
|
63
63
|
subtitle = "We're here to help",
|
|
64
|
-
welcomeTitle = "👋 Welcome to
|
|
65
|
-
welcomeMessage = "My name is
|
|
64
|
+
welcomeTitle = "👋 Welcome to Charts Connect",
|
|
65
|
+
welcomeMessage = "My name is Charts Connect AI Assistant and I'll guide you.",
|
|
66
66
|
welcomeCta = "💬 Click here to start chatting!",
|
|
67
67
|
showWelcomePopup: enableWelcomePopup = true,
|
|
68
68
|
welcomePopupDelay = 1500,
|
|
69
|
-
fallbackWelcomeMessage = "Hello! I'm
|
|
69
|
+
fallbackWelcomeMessage = "Hello! I'm Charts Connect AI Assistant. How can I help you today?",
|
|
70
70
|
inputPlaceholder = "Type your message...",
|
|
71
|
-
emptyStateMessage = "Hi! I'm
|
|
71
|
+
emptyStateMessage = "Hi! I'm Charts Connect AI Assistant. How can I help you today?",
|
|
72
72
|
debug = false,
|
|
73
73
|
dfProjectId,
|
|
74
74
|
dfLocation = "us-central1",
|
|
75
75
|
dfAgentId,
|
|
76
|
-
serviceAccountKey,
|
|
77
|
-
accessToken,
|
|
78
76
|
languageCode = "en",
|
|
79
77
|
backendBaseUrl,
|
|
80
78
|
backendWsUrl
|
|
@@ -102,6 +100,8 @@ function ChatWidget$1({
|
|
|
102
100
|
const messagesEndRef = useRef(null);
|
|
103
101
|
const typingTimeoutRef = useRef(null);
|
|
104
102
|
const agentTypingTimeoutRef = useRef(null);
|
|
103
|
+
const creatingSessionRef = useRef(false);
|
|
104
|
+
const createSessionRef = useRef(null);
|
|
105
105
|
const getBackendBaseUrl = () => {
|
|
106
106
|
return backendBaseUrl || typeof process !== "undefined" && process.env?.REACT_APP_BACKEND_BASE_URL;
|
|
107
107
|
};
|
|
@@ -138,6 +138,7 @@ function ChatWidget$1({
|
|
|
138
138
|
chatServiceRef.current.disconnectWebSocket();
|
|
139
139
|
setChatId(null);
|
|
140
140
|
setSupportSessionId(null);
|
|
141
|
+
setSessionId(null);
|
|
141
142
|
const thankYouMessage = {
|
|
142
143
|
id: `resolved-${Date.now()}`,
|
|
143
144
|
text: "Thank you for contacting us!",
|
|
@@ -155,10 +156,13 @@ function ChatWidget$1({
|
|
|
155
156
|
setCollectedUserEmail("");
|
|
156
157
|
setCollectedUserMobile("");
|
|
157
158
|
collectedUserNameRef.current = "";
|
|
158
|
-
|
|
159
|
+
if (createSessionRef.current) {
|
|
160
|
+
createSessionRef.current().catch(console.error);
|
|
161
|
+
}
|
|
159
162
|
}, 2e3);
|
|
160
163
|
},
|
|
161
164
|
[setChatId, setSupportSessionId, switchToBotMode]
|
|
165
|
+
// createSession accessed via ref, no need in deps
|
|
162
166
|
);
|
|
163
167
|
useCallback(async () => {
|
|
164
168
|
if (isStartingNewChat) return;
|
|
@@ -211,9 +215,8 @@ function ChatWidget$1({
|
|
|
211
215
|
dfProjectId,
|
|
212
216
|
dfLocation: dfLocation || "us-central1",
|
|
213
217
|
dfAgentId,
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
languageCode: languageCode || "en"
|
|
218
|
+
languageCode: languageCode || "en",
|
|
219
|
+
backendBaseUrl: getBackendBaseUrl()
|
|
217
220
|
};
|
|
218
221
|
};
|
|
219
222
|
useEffect(() => {
|
|
@@ -560,15 +563,22 @@ function ChatWidget$1({
|
|
|
560
563
|
setIsConnectingToAgent(false);
|
|
561
564
|
}
|
|
562
565
|
};
|
|
563
|
-
const createSession = async () => {
|
|
564
|
-
if (sessionId) return sessionId;
|
|
566
|
+
const createSession = async (forceRecreate = false, reuseSessionId = false) => {
|
|
567
|
+
if (sessionId && !forceRecreate && !reuseSessionId) return sessionId;
|
|
568
|
+
if (creatingSessionRef.current) {
|
|
569
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
570
|
+
if (sessionId) return sessionId;
|
|
571
|
+
throw new Error("Session creation in progress. Please try again.");
|
|
572
|
+
}
|
|
573
|
+
creatingSessionRef.current = true;
|
|
565
574
|
try {
|
|
566
575
|
setIsInitializing(true);
|
|
567
576
|
const dfConfig = getDialogflowConfig();
|
|
568
577
|
if (!dfConfig) {
|
|
569
|
-
throw new Error("Dialogflow configuration is missing. Please provide dfProjectId
|
|
578
|
+
throw new Error("Dialogflow configuration is missing. Please provide dfProjectId and dfAgentId.");
|
|
570
579
|
}
|
|
571
|
-
const
|
|
580
|
+
const existingSessionId = reuseSessionId && sessionId ? sessionId : null;
|
|
581
|
+
const data = await createDialogflowSession(dfConfig, existingSessionId);
|
|
572
582
|
setSessionId(data.session_id);
|
|
573
583
|
if (data.message) {
|
|
574
584
|
if (debug) {
|
|
@@ -582,7 +592,12 @@ function ChatWidget$1({
|
|
|
582
592
|
timestamp: /* @__PURE__ */ new Date(),
|
|
583
593
|
richContent: data.richContent
|
|
584
594
|
};
|
|
585
|
-
setMessages(
|
|
595
|
+
setMessages((prev) => {
|
|
596
|
+
if (prev.length === 0) {
|
|
597
|
+
return [welcomeMessage2];
|
|
598
|
+
}
|
|
599
|
+
return [welcomeMessage2, ...prev];
|
|
600
|
+
});
|
|
586
601
|
}
|
|
587
602
|
return data.session_id;
|
|
588
603
|
} catch (error) {
|
|
@@ -600,12 +615,14 @@ function ChatWidget$1({
|
|
|
600
615
|
sender: "bot",
|
|
601
616
|
timestamp: /* @__PURE__ */ new Date()
|
|
602
617
|
};
|
|
603
|
-
setMessages([errorMessage]);
|
|
618
|
+
setMessages((prev) => [...prev, errorMessage]);
|
|
604
619
|
return null;
|
|
605
620
|
} finally {
|
|
606
621
|
setIsInitializing(false);
|
|
622
|
+
creatingSessionRef.current = false;
|
|
607
623
|
}
|
|
608
624
|
};
|
|
625
|
+
createSessionRef.current = createSession;
|
|
609
626
|
const sendMessage = async (text, displayText, skipUserMessage = false) => {
|
|
610
627
|
if (!text.trim()) return;
|
|
611
628
|
if (collectingUserInfo) {
|
|
@@ -828,7 +845,7 @@ function ChatWidget$1({
|
|
|
828
845
|
try {
|
|
829
846
|
const dfConfig = getDialogflowConfig();
|
|
830
847
|
if (!dfConfig) {
|
|
831
|
-
throw new Error("Dialogflow configuration is missing. Please provide dfProjectId
|
|
848
|
+
throw new Error("Dialogflow configuration is missing. Please provide dfProjectId and dfAgentId.");
|
|
832
849
|
}
|
|
833
850
|
const data = await sendDialogflowMessage(text.trim(), currentSessionId, dfConfig);
|
|
834
851
|
if (debug) {
|