@mordn/chat-widget 0.4.0 → 0.4.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.
package/dist/index.mjs CHANGED
@@ -1679,31 +1679,28 @@ function ChatInterface({ id, initialMessages, config, onClose, headerActions } =
1679
1679
  useEffect4(() => {
1680
1680
  if (hasInitialized.current) return;
1681
1681
  const loadInitialTabs = () => {
1682
- try {
1683
- const savedTabs = localStorage.getItem(storageKey("tabs"));
1684
- const savedActiveTabId = localStorage.getItem(storageKey("active-tab-id"));
1685
- if (savedTabs && savedTabs !== "[]") {
1686
- const parsedTabs = JSON.parse(savedTabs);
1687
- setTabs(parsedTabs);
1688
- const activeId = savedActiveTabId || parsedTabs[0]?.id;
1689
- setActiveTabId(activeId);
1690
- setInitialTabCreated(true);
1691
- } else if (!initialTabCreated && tabs.length === 0) {
1692
- const initialTabId = `chat-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
1693
- const currentTab = {
1694
- id: initialTabId,
1695
- title: "New Chat",
1696
- isActive: true
1697
- };
1698
- setTabs([currentTab]);
1699
- setActiveTabId(initialTabId);
1700
- setInitialTabCreated(true);
1701
- }
1702
- } finally {
1682
+ const savedTabs = localStorage.getItem(storageKey("tabs"));
1683
+ const savedActiveTabId = localStorage.getItem(storageKey("active-tab-id"));
1684
+ if (savedTabs && savedTabs !== "[]") {
1685
+ const parsedTabs = JSON.parse(savedTabs);
1686
+ setTabs(parsedTabs);
1687
+ const activeId = savedActiveTabId || parsedTabs[0]?.id;
1688
+ setActiveTabId(activeId);
1689
+ setInitialTabCreated(true);
1690
+ } else if (!initialTabCreated && tabs.length === 0) {
1691
+ const initialTabId = `chat-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
1692
+ setTabs([{ id: initialTabId, title: "New Chat", isActive: true }]);
1693
+ setActiveTabId(initialTabId);
1694
+ setInitialTabCreated(true);
1703
1695
  setIsInitializing(false);
1704
1696
  }
1705
1697
  };
1706
- loadInitialTabs();
1698
+ try {
1699
+ loadInitialTabs();
1700
+ } catch (err) {
1701
+ console.error("[chat-widget] init failed, falling back to clean start:", err);
1702
+ setIsInitializing(false);
1703
+ }
1707
1704
  hasInitialized.current = true;
1708
1705
  }, []);
1709
1706
  const hasLoadedInitialMessages = useRef3(false);
@@ -1711,10 +1708,15 @@ function ChatInterface({ id, initialMessages, config, onClose, headerActions } =
1711
1708
  if (hasLoadedInitialMessages.current) return;
1712
1709
  if (!config?.userId) return;
1713
1710
  if (!activeTabId) return;
1714
- if (isInitializing) return;
1715
- loadConversation(activeTabId);
1716
- hasLoadedInitialMessages.current = true;
1717
- }, [config?.userId, activeTabId, isInitializing]);
1711
+ (async () => {
1712
+ try {
1713
+ await loadConversation(activeTabId);
1714
+ } finally {
1715
+ hasLoadedInitialMessages.current = true;
1716
+ setIsInitializing(false);
1717
+ }
1718
+ })();
1719
+ }, [config?.userId, activeTabId]);
1718
1720
  useEffect4(() => {
1719
1721
  if (isInitializing) return;
1720
1722
  if (activeTabId && tabs.length > 0 && activeTabId !== lastSyncedTabId.current) {
@@ -2114,7 +2116,7 @@ function ChatInterface({ id, initialMessages, config, onClose, headerActions } =
2114
2116
  ] }),
2115
2117
  /* @__PURE__ */ jsxs12("div", { className: "px-5 pb-5", children: [
2116
2118
  uploadError && /* @__PURE__ */ jsx20("div", { className: "mb-3 px-4 py-3 bg-red-50 dark:bg-red-900/20 border border-red-200/60 dark:border-red-800/60 rounded-2xl text-sm text-red-700 dark:text-red-400 shadow-sm", children: uploadError }),
2117
- messages.length === 0 && status !== "submitted" && config?.starterPrompts && /* @__PURE__ */ jsx20(
2119
+ isInitializing ? /* @__PURE__ */ jsx20("div", { className: "flex items-center justify-center py-8", role: "status", "aria-label": "Loading conversation", children: /* @__PURE__ */ jsx20("div", { className: "h-4 w-4 rounded-full border-2 border-current border-t-transparent animate-spin", style: { color: "hsl(var(--chat-text-muted))" } }) }) : messages.length === 0 && status !== "submitted" && config?.starterPrompts && /* @__PURE__ */ jsx20(
2118
2120
  StarterMessages,
2119
2121
  {
2120
2122
  prompts: config.starterPrompts,