@blockspark/chat-widget 1.0.17 → 1.0.19

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 (41) hide show
  1. package/README.md +28 -28
  2. package/dist/{ChatWidget-DKfLes8T.js → ChatWidget-Bs0XV_7i.js} +31 -36
  3. package/dist/ChatWidget-Bs0XV_7i.js.map +1 -0
  4. package/dist/ChatWidget-PcqRrOmi.cjs +2 -0
  5. package/dist/ChatWidget-PcqRrOmi.cjs.map +1 -0
  6. package/dist/adapters/vue/useChatMode.d.ts +1 -1
  7. package/dist/adapters/vue/useChatMode.d.ts.map +1 -1
  8. package/dist/components/ChatWidget.d.ts +1 -5
  9. package/dist/components/ChatWidget.d.ts.map +1 -1
  10. package/dist/core/stateManager.d.ts.map +1 -1
  11. package/dist/core/types.d.ts +0 -2
  12. package/dist/core/types.d.ts.map +1 -1
  13. package/dist/entry/vite.d.ts +1 -1
  14. package/dist/hooks/useChatMode.d.ts +1 -1
  15. package/dist/hooks/useChatMode.d.ts.map +1 -1
  16. package/dist/index.cjs.js +1 -1
  17. package/dist/index.cjs.js.map +1 -1
  18. package/dist/index.d.ts +5 -5
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.esm.js +39 -22
  21. package/dist/index.esm.js.map +1 -1
  22. package/dist/nuxt.cjs.js +1 -1
  23. package/dist/nuxt.esm.js +2 -2
  24. package/dist/sanitize-C8MB41vY.cjs +4 -0
  25. package/dist/sanitize-C8MB41vY.cjs.map +1 -0
  26. package/dist/{sanitize-O18C3eqP.js → sanitize-Cm1kskSD.js} +154 -1260
  27. package/dist/sanitize-Cm1kskSD.js.map +1 -0
  28. package/dist/services/dialogflowBackendService.d.ts +36 -0
  29. package/dist/services/dialogflowBackendService.d.ts.map +1 -0
  30. package/dist/styles.css +1 -1
  31. package/dist/types.d.ts +1 -1
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/vue.cjs.js +1 -1
  34. package/dist/vue.esm.js +2 -2
  35. package/package.json +2 -2
  36. package/dist/ChatWidget-DKfLes8T.js.map +0 -1
  37. package/dist/ChatWidget-lvHzA07s.cjs +0 -2
  38. package/dist/ChatWidget-lvHzA07s.cjs.map +0 -1
  39. package/dist/sanitize-D904jROs.cjs +0 -4
  40. package/dist/sanitize-D904jROs.cjs.map +0 -1
  41. package/dist/sanitize-O18C3eqP.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, a as createDialogflowSession, l as linkifyText, C as ChatResolvedError, s as sendDialogflowMessage } from "./sanitize-O18C3eqP.js";
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 = "blockspark_chat_mode";
6
- const CHAT_ID_STORAGE_KEY = "blockspark_chat_id";
7
- const SESSION_ID_STORAGE_KEY = "blockspark_session_id";
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 = "💬 BlockSpark AI Assistant",
62
+ title = "💬 Charts Connect AI Assistant",
63
63
  subtitle = "We're here to help",
64
- welcomeTitle = "👋 Welcome to Blockspark",
65
- welcomeMessage = "My name is BlockSpark AI Assistant and I'll guide you.",
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 BlockSpark AI Assistant. How can I help you today?",
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 BlockSpark AI Assistant. How can I help you today?",
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
- createSession().catch(console.error);
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
- serviceAccountKey,
215
- accessToken,
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, dfAgentId, and either serviceAccountKey or accessToken.");
578
+ throw new Error("Dialogflow configuration is missing. Please provide dfProjectId and dfAgentId.");
570
579
  }
571
- const data = await createDialogflowSession(dfConfig);
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([welcomeMessage2]);
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, dfAgentId, and either serviceAccountKey or accessToken.");
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) {