droplinked-chatbot-next 1.0.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 (175) hide show
  1. package/README.md +205 -0
  2. package/dist/assets/animations/chat-greeting.json +1 -0
  3. package/dist/assets/icons/AI/AI/AIMd.d.ts +2 -0
  4. package/dist/assets/icons/AI/AI/AIMd.js +3 -0
  5. package/dist/assets/icons/AI/AI/AIMd.js.map +1 -0
  6. package/dist/assets/icons/Action/Refresh2/Refresh2Sm.d.ts +2 -0
  7. package/dist/assets/icons/Action/Refresh2/Refresh2Sm.js +3 -0
  8. package/dist/assets/icons/Action/Refresh2/Refresh2Sm.js.map +1 -0
  9. package/dist/assets/icons/Action/Send/SendSm.d.ts +2 -0
  10. package/dist/assets/icons/Action/Send/SendSm.js +3 -0
  11. package/dist/assets/icons/Action/Send/SendSm.js.map +1 -0
  12. package/dist/assets/icons/Navigation/ChevronLeft/ChevronleftMd.d.ts +2 -0
  13. package/dist/assets/icons/Navigation/ChevronLeft/ChevronleftMd.js +3 -0
  14. package/dist/assets/icons/Navigation/ChevronLeft/ChevronleftMd.js.map +1 -0
  15. package/dist/assets/icons/Navigation/ExternalArrow/ExternalarrowMd.d.ts +2 -0
  16. package/dist/assets/icons/Navigation/ExternalArrow/ExternalarrowMd.js +3 -0
  17. package/dist/assets/icons/Navigation/ExternalArrow/ExternalarrowMd.js.map +1 -0
  18. package/dist/assets/icons/Sign/Close/CloseMd.d.ts +2 -0
  19. package/dist/assets/icons/Sign/Close/CloseMd.js +3 -0
  20. package/dist/assets/icons/Sign/Close/CloseMd.js.map +1 -0
  21. package/dist/assets/icons/Sign/Help/HelpMd.d.ts +2 -0
  22. package/dist/assets/icons/Sign/Help/HelpMd.js +3 -0
  23. package/dist/assets/icons/Sign/Help/HelpMd.js.map +1 -0
  24. package/dist/assets/icons/Sign/Tooltip/TooltipMd.d.ts +2 -0
  25. package/dist/assets/icons/Sign/Tooltip/TooltipMd.js +3 -0
  26. package/dist/assets/icons/Sign/Tooltip/TooltipMd.js.map +1 -0
  27. package/dist/assets/icons/Sign/Warning/WarningMd.d.ts +2 -0
  28. package/dist/assets/icons/Sign/Warning/WarningMd.js +3 -0
  29. package/dist/assets/icons/Sign/Warning/WarningMd.js.map +1 -0
  30. package/dist/components/ChatDrawer.d.ts +9 -0
  31. package/dist/components/ChatDrawer.js +15 -0
  32. package/dist/components/ChatDrawer.js.map +1 -0
  33. package/dist/components/ChatHeader.d.ts +8 -0
  34. package/dist/components/ChatHeader.js +13 -0
  35. package/dist/components/ChatHeader.js.map +1 -0
  36. package/dist/components/ChatPage.d.ts +16 -0
  37. package/dist/components/Chatbot.d.ts +9 -0
  38. package/dist/components/Chatbot.js +20 -0
  39. package/dist/components/Chatbot.js.map +1 -0
  40. package/dist/components/EmbeddedChatButton.d.ts +5 -0
  41. package/dist/components/EmbeddedChatButton.js +13 -0
  42. package/dist/components/EmbeddedChatButton.js.map +1 -0
  43. package/dist/components/ErrorMessage.d.ts +6 -0
  44. package/dist/components/ErrorMessage.js +24 -0
  45. package/dist/components/ErrorMessage.js.map +1 -0
  46. package/dist/components/FloatingChatButton.d.ts +6 -0
  47. package/dist/components/FloatingChatButton.js +17 -0
  48. package/dist/components/FloatingChatButton.js.map +1 -0
  49. package/dist/components/GradualMessageDisplay.d.ts +9 -0
  50. package/dist/components/GradualMessageDisplay.js +141 -0
  51. package/dist/components/GradualMessageDisplay.js.map +1 -0
  52. package/dist/components/HeaderIconButton.d.ts +9 -0
  53. package/dist/components/HeaderIconButton.js +6 -0
  54. package/dist/components/HeaderIconButton.js.map +1 -0
  55. package/dist/components/HelloPage.d.ts +10 -0
  56. package/dist/components/MarkdownRenderer.d.ts +8 -0
  57. package/dist/components/MarkdownRenderer.js +40 -0
  58. package/dist/components/MarkdownRenderer.js.map +1 -0
  59. package/dist/components/MessageInput.d.ts +11 -0
  60. package/dist/components/MessageInput.js +52 -0
  61. package/dist/components/MessageInput.js.map +1 -0
  62. package/dist/components/MessageList.d.ts +12 -0
  63. package/dist/components/MessageList.js +64 -0
  64. package/dist/components/MessageList.js.map +1 -0
  65. package/dist/components/RuledGrid.d.ts +6 -0
  66. package/dist/components/RuledGrid.js +9 -0
  67. package/dist/components/RuledGrid.js.map +1 -0
  68. package/dist/components/TypingIndicator.d.ts +8 -0
  69. package/dist/components/TypingIndicator.js +92 -0
  70. package/dist/components/TypingIndicator.js.map +1 -0
  71. package/dist/components/input/EmailCapture.d.ts +6 -0
  72. package/dist/components/input/EmailCapture.js +15 -0
  73. package/dist/components/input/EmailCapture.js.map +1 -0
  74. package/dist/components/input/MessageInput.d.ts +11 -0
  75. package/dist/components/input/SuggestionChips.d.ts +7 -0
  76. package/dist/components/input/SuggestionChips.js +8 -0
  77. package/dist/components/input/SuggestionChips.js.map +1 -0
  78. package/dist/components/messages/ErrorMessage.d.ts +6 -0
  79. package/dist/components/messages/MessageItem.d.ts +10 -0
  80. package/dist/components/messages/MessageItem.js +20 -0
  81. package/dist/components/messages/MessageItem.js.map +1 -0
  82. package/dist/components/ui/tooltip.d.ts +11 -0
  83. package/dist/components/ui/tooltip.js +9 -0
  84. package/dist/components/ui/tooltip.js.map +1 -0
  85. package/dist/hooks/useChatbot.d.ts +27 -0
  86. package/dist/hooks/useChatbot.js +229 -0
  87. package/dist/hooks/useChatbot.js.map +1 -0
  88. package/dist/index.d.ts +19 -0
  89. package/dist/index.esm.js +66459 -0
  90. package/dist/index.esm.js.map +1 -0
  91. package/dist/index.js +66499 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/lib/chatbot/api/client.d.ts +30 -0
  94. package/dist/lib/chatbot/api/client.js +130 -0
  95. package/dist/lib/chatbot/api/client.js.map +1 -0
  96. package/dist/lib/chatbot/components/ChatDrawer.d.ts +9 -0
  97. package/dist/lib/chatbot/components/ChatDrawer.js +15 -0
  98. package/dist/lib/chatbot/components/ChatDrawer.js.map +1 -0
  99. package/dist/lib/chatbot/components/ChatHeader.d.ts +8 -0
  100. package/dist/lib/chatbot/components/ChatHeader.js +14 -0
  101. package/dist/lib/chatbot/components/ChatHeader.js.map +1 -0
  102. package/dist/lib/chatbot/components/Chatbot.d.ts +10 -0
  103. package/dist/lib/chatbot/components/Chatbot.js +20 -0
  104. package/dist/lib/chatbot/components/Chatbot.js.map +1 -0
  105. package/dist/lib/chatbot/components/EmbeddedChatButton.d.ts +5 -0
  106. package/dist/lib/chatbot/components/EmbeddedChatButton.js +13 -0
  107. package/dist/lib/chatbot/components/EmbeddedChatButton.js.map +1 -0
  108. package/dist/lib/chatbot/components/ErrorMessage.d.ts +6 -0
  109. package/dist/lib/chatbot/components/ErrorMessage.js +24 -0
  110. package/dist/lib/chatbot/components/ErrorMessage.js.map +1 -0
  111. package/dist/lib/chatbot/components/FloatingChatButton.d.ts +6 -0
  112. package/dist/lib/chatbot/components/FloatingChatButton.js +17 -0
  113. package/dist/lib/chatbot/components/FloatingChatButton.js.map +1 -0
  114. package/dist/lib/chatbot/components/GradualMessageDisplay.d.ts +9 -0
  115. package/dist/lib/chatbot/components/GradualMessageDisplay.js +141 -0
  116. package/dist/lib/chatbot/components/GradualMessageDisplay.js.map +1 -0
  117. package/dist/lib/chatbot/components/MarkdownRenderer.d.ts +8 -0
  118. package/dist/lib/chatbot/components/MarkdownRenderer.js +40 -0
  119. package/dist/lib/chatbot/components/MarkdownRenderer.js.map +1 -0
  120. package/dist/lib/chatbot/components/MessageInput.d.ts +11 -0
  121. package/dist/lib/chatbot/components/MessageInput.js +69 -0
  122. package/dist/lib/chatbot/components/MessageInput.js.map +1 -0
  123. package/dist/lib/chatbot/components/MessageList.d.ts +12 -0
  124. package/dist/lib/chatbot/components/MessageList.js +85 -0
  125. package/dist/lib/chatbot/components/MessageList.js.map +1 -0
  126. package/dist/lib/chatbot/components/RuledGrid.d.ts +6 -0
  127. package/dist/lib/chatbot/components/RuledGrid.js +9 -0
  128. package/dist/lib/chatbot/components/RuledGrid.js.map +1 -0
  129. package/dist/lib/chatbot/components/TypingIndicator.d.ts +14 -0
  130. package/dist/lib/chatbot/components/TypingIndicator.js +98 -0
  131. package/dist/lib/chatbot/components/TypingIndicator.js.map +1 -0
  132. package/dist/lib/chatbot/components/ui/tooltip.d.ts +11 -0
  133. package/dist/lib/chatbot/components/ui/tooltip.js +9 -0
  134. package/dist/lib/chatbot/components/ui/tooltip.js.map +1 -0
  135. package/dist/lib/chatbot/hooks/useChatbot.d.ts +25 -0
  136. package/dist/lib/chatbot/hooks/useChatbot.js +212 -0
  137. package/dist/lib/chatbot/hooks/useChatbot.js.map +1 -0
  138. package/dist/lib/chatbot/index.d.ts +5 -0
  139. package/dist/lib/chatbot/index.js +5 -0
  140. package/dist/lib/chatbot/index.js.map +1 -0
  141. package/dist/lib/chatbot/types/index.d.ts +55 -0
  142. package/dist/lib/chatbot/types/index.js +2 -0
  143. package/dist/lib/chatbot/types/index.js.map +1 -0
  144. package/dist/lib/chatbot/utils/helpers.d.ts +9 -0
  145. package/dist/lib/chatbot/utils/helpers.js +55 -0
  146. package/dist/lib/chatbot/utils/helpers.js.map +1 -0
  147. package/dist/lib/chatbot/views/ChatPage.d.ts +16 -0
  148. package/dist/lib/chatbot/views/ChatPage.js +9 -0
  149. package/dist/lib/chatbot/views/ChatPage.js.map +1 -0
  150. package/dist/lib/chatbot/views/HelloPage.d.ts +10 -0
  151. package/dist/lib/chatbot/views/HelloPage.js +33 -0
  152. package/dist/lib/chatbot/views/HelloPage.js.map +1 -0
  153. package/dist/services/api.d.ts +30 -0
  154. package/dist/services/axiosClient.d.ts +8 -0
  155. package/dist/services/axiosClient.js +38 -0
  156. package/dist/services/axiosClient.js.map +1 -0
  157. package/dist/services/client.d.ts +31 -0
  158. package/dist/services/client.js +52 -0
  159. package/dist/services/client.js.map +1 -0
  160. package/dist/services/http.d.ts +8 -0
  161. package/dist/services/http.js +38 -0
  162. package/dist/services/http.js.map +1 -0
  163. package/dist/types/index.d.ts +55 -0
  164. package/dist/types/index.js +2 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/helpers.d.ts +6 -0
  167. package/dist/utils/helpers.js +46 -0
  168. package/dist/utils/helpers.js.map +1 -0
  169. package/dist/views/ChatPage.d.ts +16 -0
  170. package/dist/views/ChatPage.js +9 -0
  171. package/dist/views/ChatPage.js.map +1 -0
  172. package/dist/views/HelloPage.d.ts +7 -0
  173. package/dist/views/HelloPage.js +33 -0
  174. package/dist/views/HelloPage.js.map +1 -0
  175. package/package.json +70 -0
@@ -0,0 +1,5 @@
1
+ export { default as Chatbot } from './components/Chatbot';
2
+ export { default as HelloPage } from './views/HelloPage';
3
+ export { default as ChatPage } from './views/ChatPage';
4
+ export { useChatbot } from './hooks/useChatbot';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/chatbot/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGzD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,55 @@
1
+ export interface Message {
2
+ id: string;
3
+ text: string;
4
+ sender: 'user' | 'bot';
5
+ timestamp: Date;
6
+ isError?: boolean;
7
+ }
8
+ export interface ApiResponse<T> {
9
+ statusCode: number;
10
+ status: string;
11
+ data: T;
12
+ }
13
+ export interface StartChatResponse {
14
+ message: string;
15
+ thread_status: string;
16
+ thread_id: string;
17
+ }
18
+ export interface SendMessageResponse {
19
+ message: string;
20
+ thread_status: string;
21
+ }
22
+ export interface ConversationMessage {
23
+ role: 'user' | 'assistant';
24
+ content: string;
25
+ timestamp: string;
26
+ }
27
+ export interface Pagination {
28
+ current_page: string;
29
+ page_size: string;
30
+ total_messages: number;
31
+ total_pages: number;
32
+ has_previous: boolean;
33
+ has_next: boolean;
34
+ }
35
+ export interface ChatHistoryResponse {
36
+ conversation_history: ConversationMessage[];
37
+ pagination: Pagination;
38
+ thread_status: string;
39
+ }
40
+ export interface ChatbotUser {
41
+ email: string;
42
+ isLoggedIn: boolean;
43
+ name?: string;
44
+ logoUrl?: string;
45
+ }
46
+ export interface NavigationLink {
47
+ label: string;
48
+ href: string;
49
+ isExternal?: boolean;
50
+ }
51
+ export interface MessageSuggestion {
52
+ id: string;
53
+ text: string;
54
+ }
55
+ export type ChatbotView = 'hello' | 'chat';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/chatbot/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { NavigationLink } from '../types';
2
+ export declare const isValidEmail: (email: string) => boolean;
3
+ export declare const generateMessageId: () => string;
4
+ export declare const formatTimestamp: (date: Date) => string;
5
+ export declare const sanitizeText: (text: string) => string;
6
+ export declare const createDefaultNavigationLinks: () => NavigationLink[];
7
+ export declare const createDefaultExternalLinks: () => NavigationLink[];
8
+ export declare const truncateText: (text: string, maxLength: number) => string;
9
+ export declare const isExternalUrl: (url: string) => boolean;
@@ -0,0 +1,55 @@
1
+ export const isValidEmail = (email) => {
2
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
3
+ return emailRegex.test(email.trim());
4
+ };
5
+ export const generateMessageId = () => {
6
+ return `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
7
+ };
8
+ export const formatTimestamp = (date) => {
9
+ const now = new Date();
10
+ const diffInMinutes = Math.floor((now.getTime() - date.getTime()) / (1000 * 60));
11
+ if (diffInMinutes < 1)
12
+ return 'Just now';
13
+ if (diffInMinutes < 60)
14
+ return `${diffInMinutes}m ago`;
15
+ const diffInHours = Math.floor(diffInMinutes / 60);
16
+ if (diffInHours < 24)
17
+ return `${diffInHours}h ago`;
18
+ const diffInDays = Math.floor(diffInHours / 24);
19
+ if (diffInDays < 7)
20
+ return `${diffInDays}d ago`;
21
+ return date.toLocaleDateString();
22
+ };
23
+ export const sanitizeText = (text) => {
24
+ return text
25
+ .replace(/&/g, '&amp;')
26
+ .replace(/</g, '&lt;')
27
+ .replace(/>/g, '&gt;')
28
+ .replace(/"/g, '&quot;')
29
+ .replace(/'/g, '&#x27;')
30
+ .trim();
31
+ };
32
+ export const createDefaultNavigationLinks = () => [
33
+ { label: 'Documentation', href: '/docs', isExternal: false },
34
+ { label: 'Contact Us', href: '/contact', isExternal: false },
35
+ { label: 'Changelog', href: '/changelog', isExternal: false }
36
+ ];
37
+ export const createDefaultExternalLinks = () => [
38
+ { label: 'Developer API', href: 'https://api.example.com/docs', isExternal: true },
39
+ { label: 'Video Tutorials', href: 'https://youtube.com/example', isExternal: true }
40
+ ];
41
+ export const truncateText = (text, maxLength) => {
42
+ if (text.length <= maxLength)
43
+ return text;
44
+ return text.substring(0, maxLength - 3) + '...';
45
+ };
46
+ export const isExternalUrl = (url) => {
47
+ try {
48
+ const urlObj = new URL(url, window.location.origin);
49
+ return urlObj.origin !== window.location.origin;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ };
55
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/lib/chatbot/utils/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ChatbotUser, Message } from "../types";
2
+ interface ChatPageProps {
3
+ messages: Message[];
4
+ user: ChatbotUser;
5
+ isLoading: boolean;
6
+ isTyping?: boolean;
7
+ isEmailSubmitting?: boolean;
8
+ historyMessageIds?: Set<string>;
9
+ currentlyProcessingMessageId?: string | null;
10
+ clearProcessingMessageId?: () => void;
11
+ onSendMessage: (text: string) => void;
12
+ onEmailSubmit: (email: string) => void;
13
+ onRetryMessage?: () => void;
14
+ }
15
+ declare function ChatPage({ messages, user, isLoading, isTyping, isEmailSubmitting, historyMessageIds, currentlyProcessingMessageId, clearProcessingMessageId, onSendMessage, onEmailSubmit, onRetryMessage }: ChatPageProps): import("react/jsx-runtime").JSX.Element;
16
+ export default ChatPage;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, VStack } from "@chakra-ui/react";
3
+ import MessageInput from "../components/MessageInput";
4
+ import MessageList from "../components/MessageList";
5
+ function ChatPage({ messages, user, isLoading, isTyping = false, isEmailSubmitting = false, historyMessageIds, currentlyProcessingMessageId, clearProcessingMessageId, onSendMessage, onEmailSubmit, onRetryMessage }) {
6
+ return (_jsxs(VStack, { h: "full", children: [_jsx(Box, { flex: 1, w: "full", overflow: "hidden", children: _jsx(MessageList, { messages: messages, user: user, isTyping: isTyping, historyMessageIds: historyMessageIds, currentlyProcessingMessageId: currentlyProcessingMessageId, clearProcessingMessageId: clearProcessingMessageId, onRetryMessage: onRetryMessage }) }), _jsx(Box, { w: "full", pt: 4, children: _jsx(MessageInput, { onSend: onSendMessage, user: user, onEmailSubmit: onEmailSubmit, isLoading: isLoading, isEmailSubmitting: isEmailSubmitting, messages: messages }) })] }));
7
+ }
8
+ export default ChatPage;
9
+ //# sourceMappingURL=ChatPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatPage.js","sourceRoot":"","sources":["../../../../src/lib/chatbot/views/ChatPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,YAAY,MAAM,4BAA4B,CAAA;AACrD,OAAO,WAAW,MAAM,2BAA2B,CAAA;AAgBnD,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,iBAAiB,GAAG,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAiB;IAChO,OAAO,CACH,MAAC,MAAM,IAAC,CAAC,EAAC,MAAM,aACZ,KAAC,GAAG,IAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,YACpC,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,4BAA4B,EAAE,4BAA4B,EAC1D,wBAAwB,EAAE,wBAAwB,EAClD,cAAc,EAAE,cAAc,GAC9B,GACA,EAEN,KAAC,GAAG,IAAC,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,YACf,KAAC,YAAY,IACT,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,QAAQ,GACpB,GACA,IACD,CACZ,CAAA;AACL,CAAC;AAED,eAAe,QAAQ,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { NavigationLink } from "../types";
2
+ interface HelloPageProps {
3
+ userName?: string;
4
+ onStartChat: () => void;
5
+ isStartingChat?: boolean;
6
+ navigationLinks?: NavigationLink[];
7
+ externalLinks?: NavigationLink[];
8
+ }
9
+ declare function HelloPage({ userName, onStartChat, isStartingChat, }: HelloPageProps): import("react/jsx-runtime").JSX.Element;
10
+ export default HelloPage;
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Button, Flex, Link, Text, VStack } from "@chakra-ui/react";
3
+ import { AIMd } from "../../../assets/icons/AI/AI/AIMd";
4
+ import { ExternalarrowMd } from "../../../assets/icons/Navigation/ExternalArrow/ExternalarrowMd";
5
+ import RuledGrid from "../components/RuledGrid";
6
+ function HelloPage({ userName, onStartChat, isStartingChat = false, }) {
7
+ const navigationItems = [
8
+ {
9
+ label: "Documentation",
10
+ href: "https://droplinked.gitbook.io/droplinked-store-front-help-center",
11
+ isExternal: true,
12
+ },
13
+ { label: "Contact Us", href: "/contact-us", isExternal: false },
14
+ { label: "About Us", href: "/about", isExternal: false },
15
+ { label: "Changelog", href: "/analytics/changelog", isExternal: false },
16
+ {
17
+ label: "Developer API",
18
+ href: "https://droplinked.gitbook.io/droplinked-store-front-help-center/library/droplinked-api-sandbox",
19
+ isExternal: true,
20
+ },
21
+ {
22
+ label: "Video Tutorials",
23
+ href: "https://www.youtube.com/watch?v=fuZLWeku6fw&list=PLwoJzeXHsBW6bAHmPz04RtWvpg_09-vqi",
24
+ isExternal: true,
25
+ },
26
+ ];
27
+ return (_jsx(Box, { w: "full", h: "100%", overflowY: "auto", overflowX: "hidden", p: 4, children: _jsxs(VStack, { align: "stretch", justify: "flex-end", gap: 4, height: "full", children: [_jsxs(Flex, { flexDirection: "column", justifyContent: "flex-end", flexShrink: 0, paddingTop: "48px", children: [_jsx(Text, { color: "#2BCFA1", fontSize: "3xl", fontWeight: "bold", lineHeight: "40px", children: `Hi ${userName ? userName : ""} 👋🏻` }), _jsx(Text, { color: "white", fontSize: "3xl", fontWeight: "bold", lineHeight: "40px", children: "How can I help?" })] }), _jsxs(RuledGrid, { columns: 1, borderRadius: 16, bg: "#222", overflow: "hidden", children: [_jsxs(VStack, { align: "stretch", gap: 3, p: 4, children: [_jsx(Box, { p: 2.5, w: "fit-content", bg: "rgba(43, 207, 161, 0.1)", border: "1px solid", borderColor: "rgba(43, 207, 161, 0.1)", borderRadius: "lg", children: _jsx(AIMd, { color: "#2BCFA1" }) }), _jsxs(VStack, { gap: 0.5, align: "stretch", children: [_jsx(Text, { color: "white", fontSize: "base", fontWeight: "medium", lineHeight: "normal", children: "AI Merchant Assistant" }), _jsx(Text, { color: "#737373", fontSize: "sm", fontWeight: "normal", lineHeight: "tight", children: "I can help with your shop setup, payment and more" })] })] }), _jsx(Button, { w: "full", padding: "10px 14px", borderRadius: 0, variant: "ghost", _hover: { bg: "rgba(43, 207, 161, 0.1)" }, fontSize: 14, fontWeight: 500, color: "#2BCFA1", onClick: onStartChat, isLoading: isStartingChat, isDisabled: isStartingChat, _disabled: {
28
+ color: "#525252",
29
+ cursor: "not-allowed",
30
+ }, children: "Start Chat" })] }), _jsx(RuledGrid, { columns: 1, borderRadius: 16, bg: "#222", children: navigationItems.map((item, index) => (_jsxs(Link, { display: "flex", justifyContent: "space-between", alignItems: "center", gap: 4, padding: "12px 16px", fontSize: 14, fontWeight: 500, color: "white", textDecoration: "none", href: item.href, isExternal: item.isExternal, children: [item.label, _jsx(ExternalarrowMd, { color: "white" })] }, index))) })] }) }));
31
+ }
32
+ export default HelloPage;
33
+ //# sourceMappingURL=HelloPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelloPage.js","sourceRoot":"","sources":["../../../../src/lib/chatbot/views/HelloPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Message, StartChatResponse, SendMessageResponse, ChatHistoryResponse, ConversationMessage } from '../types';
2
+ export interface StartChatRequest {
3
+ email: string;
4
+ }
5
+ export interface SendMessageRequest {
6
+ thread_id: string;
7
+ message: string;
8
+ }
9
+ export interface GetHistoryParams {
10
+ thread_id: string;
11
+ page?: number;
12
+ page_size?: number;
13
+ order?: 'asc' | 'desc';
14
+ }
15
+ export declare class ChatbotAPI {
16
+ private baseUrl;
17
+ private apiKey?;
18
+ constructor(baseUrl: string, apiKey?: string);
19
+ private getHeaders;
20
+ startChatSession(request: StartChatRequest): Promise<StartChatResponse>;
21
+ sendMessage(request: SendMessageRequest): Promise<SendMessageResponse>;
22
+ getChatHistory(params: GetHistoryParams): Promise<ChatHistoryResponse>;
23
+ convertApiMessagesToMessages(apiMessages: ConversationMessage[]): Message[];
24
+ getConversationHistory(threadId: string, page?: number, pageSize?: number): Promise<Message[]>;
25
+ }
26
+ export declare const initializeChatbotAPI: (baseUrl: string, apiKey?: string) => void;
27
+ export declare const startChatSession: (request: StartChatRequest) => Promise<StartChatResponse>;
28
+ export declare const sendMessage: (request: SendMessageRequest) => Promise<SendMessageResponse>;
29
+ export declare const getChatHistory: (params: GetHistoryParams) => Promise<ChatHistoryResponse>;
30
+ export declare const getConversationHistory: (threadId: string, page?: number, pageSize?: number) => Promise<Message[]>;
@@ -0,0 +1,8 @@
1
+ import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
+ export declare const createHttpClient: (baseURL: string, apiKey?: string) => AxiosInstance;
3
+ export declare class ApiError extends Error {
4
+ status?: number;
5
+ data?: unknown;
6
+ constructor(message: string, status?: number, data?: unknown);
7
+ }
8
+ export declare const httpRequest: <T>(http: AxiosInstance, config: AxiosRequestConfig) => Promise<T>;
@@ -0,0 +1,38 @@
1
+ import axios from 'axios';
2
+ export const createHttpClient = (baseURL, apiKey) => {
3
+ const instance = axios.create({
4
+ baseURL: baseURL.replace(/\/$/, ''),
5
+ headers: { 'Content-Type': 'application/json' },
6
+ });
7
+ instance.interceptors.request.use((config) => {
8
+ if (apiKey) {
9
+ if (!config.headers)
10
+ config.headers = {};
11
+ config.headers['Authorization'] = `Bearer ${apiKey}`;
12
+ }
13
+ return config;
14
+ });
15
+ return instance;
16
+ };
17
+ export class ApiError extends Error {
18
+ constructor(message, status, data) {
19
+ super(message);
20
+ this.name = 'ApiError';
21
+ this.status = status;
22
+ this.data = data;
23
+ }
24
+ }
25
+ export const httpRequest = async (http, config) => {
26
+ try {
27
+ const res = await http.request(config);
28
+ return res.data.data;
29
+ }
30
+ catch (err) {
31
+ const e = err;
32
+ const status = e.response?.status;
33
+ const data = e.response?.data;
34
+ const message = data?.message || e.message || 'Request failed';
35
+ throw new ApiError(message, status, data);
36
+ }
37
+ };
38
+ //# sourceMappingURL=axiosClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../src/services/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAA;AAG5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,MAAe,EAAiB,EAAE;IAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAG,MAAc,CAAC,OAAO,GAAG,EAAE,CAChD;YAAC,MAAM,CAAC,OAAe,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAA;QAChE,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGjC,YAAY,OAAe,EAAE,MAAe,EAAE,IAAc;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAK,IAAmB,EAAE,MAA0B,EAAc,EAAE;IAClG,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiB,MAAM,CAAC,CAAA;QACtD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAiB,CAAA;QAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAA;QACjC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAA;QAC7B,MAAM,OAAO,GAAI,IAAY,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAA;QACvE,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { ChatHistoryResponse, ConversationMessage, Message, SendMessageResponse, StartChatResponse } from '../types';
2
+ export interface StartChatRequest {
3
+ email: string;
4
+ }
5
+ export interface SendMessageRequest {
6
+ thread_id: string;
7
+ message: string;
8
+ }
9
+ export interface GetHistoryParams {
10
+ thread_id: string;
11
+ page?: number;
12
+ page_size?: number;
13
+ order?: 'asc' | 'desc';
14
+ }
15
+ export declare class ChatbotAPI {
16
+ private http;
17
+ constructor(baseUrl: string, apiKey?: string);
18
+ startChatSession(request: StartChatRequest, opts?: {
19
+ signal?: AbortSignal;
20
+ }): Promise<StartChatResponse>;
21
+ sendMessage(request: SendMessageRequest, opts?: {
22
+ signal?: AbortSignal;
23
+ }): Promise<SendMessageResponse>;
24
+ getChatHistory(params: GetHistoryParams, opts?: {
25
+ signal?: AbortSignal;
26
+ }): Promise<ChatHistoryResponse>;
27
+ convertApiMessagesToMessages(apiMessages: ConversationMessage[]): Message[];
28
+ getConversationHistory(threadId: string, page?: number, pageSize?: number, opts?: {
29
+ signal?: AbortSignal;
30
+ }): Promise<Message[]>;
31
+ }
@@ -0,0 +1,52 @@
1
+ import { generateMessageId } from '../utils/helpers';
2
+ import { createHttpClient, httpRequest } from './axiosClient';
3
+ export class ChatbotAPI {
4
+ constructor(baseUrl, apiKey) {
5
+ if (!baseUrl) {
6
+ throw new Error('API baseUrl is required but was not provided. Please check your environment variables.');
7
+ }
8
+ this.http = createHttpClient(baseUrl, apiKey);
9
+ }
10
+ async startChatSession(request, opts) {
11
+ return httpRequest(this.http, {
12
+ url: '/ai/chat/start',
13
+ method: 'POST',
14
+ data: request,
15
+ signal: opts?.signal,
16
+ });
17
+ }
18
+ async sendMessage(request, opts) {
19
+ return httpRequest(this.http, {
20
+ url: '/ai/chat/message',
21
+ method: 'POST',
22
+ data: request,
23
+ signal: opts?.signal,
24
+ });
25
+ }
26
+ async getChatHistory(params, opts) {
27
+ return httpRequest(this.http, {
28
+ url: '/ai/chat/history',
29
+ method: 'GET',
30
+ params: {
31
+ thread_id: params.thread_id,
32
+ ...(params.page ? { page: params.page } : {}),
33
+ ...(params.page_size ? { page_size: params.page_size } : {}),
34
+ ...(params.order ? { order: params.order } : {}),
35
+ },
36
+ signal: opts?.signal,
37
+ });
38
+ }
39
+ convertApiMessagesToMessages(apiMessages) {
40
+ return apiMessages.map(msg => ({
41
+ id: generateMessageId(),
42
+ text: msg.content,
43
+ sender: msg.role === 'user' ? 'user' : 'bot',
44
+ timestamp: new Date(msg.timestamp)
45
+ }));
46
+ }
47
+ async getConversationHistory(threadId, page = 1, pageSize = 10, opts) {
48
+ const historyResponse = await this.getChatHistory({ thread_id: threadId, page, page_size: pageSize, order: 'asc' }, opts);
49
+ return this.convertApiMessagesToMessages(historyResponse.conversation_history);
50
+ }
51
+ }
52
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/services/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAkB7D,MAAM,OAAO,UAAU;IAGnB,YAAY,OAAe,EAAE,MAAe;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAA;QAC7G,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAyB,EAAE,IAA+B;QAC7E,OAAO,WAAW,CAAoB,IAAI,CAAC,IAAI,EAAE;YAC7C,GAAG,EAAE,gBAAgB;YACrB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI,EAAE,MAAM;SACvB,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA2B,EAAE,IAA+B;QAC1E,OAAO,WAAW,CAAsB,IAAI,CAAC,IAAI,EAAE;YAC/C,GAAG,EAAE,kBAAkB;YACvB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI,EAAE,MAAM;SACvB,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAwB,EAAE,IAA+B;QAC1E,OAAO,WAAW,CAAsB,IAAI,CAAC,IAAI,EAAE;YAC/C,GAAG,EAAE,kBAAkB;YACvB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE;gBACJ,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD;YACD,MAAM,EAAE,IAAI,EAAE,MAAM;SACvB,CAAC,CAAA;IACN,CAAC;IAGD,4BAA4B,CAAC,WAAkC;QAC3D,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,GAAG,CAAC,OAAO;YACjB,MAAM,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YAC5C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;SACrC,CAAC,CAAC,CAAA;IACP,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,QAAgB,EAAE,OAAe,CAAC,EAAE,WAAmB,EAAE,EAAE,IAA+B;QACnH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAC7C,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAChE,IAAI,CACP,CAAA;QACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAClF,CAAC;CACJ"}
@@ -0,0 +1,8 @@
1
+ import { AxiosInstance, AxiosRequestConfig } from 'axios';
2
+ export declare const createHttpClient: (baseURL: string, apiKey?: string) => AxiosInstance;
3
+ export declare class ApiError extends Error {
4
+ status?: number;
5
+ data?: unknown;
6
+ constructor(message: string, status?: number, data?: unknown);
7
+ }
8
+ export declare const httpRequest: <T>(http: AxiosInstance, config: AxiosRequestConfig) => Promise<T>;
@@ -0,0 +1,38 @@
1
+ import axios from 'axios';
2
+ export const createHttpClient = (baseURL, apiKey) => {
3
+ const instance = axios.create({
4
+ baseURL: baseURL.replace(/\/$/, ''),
5
+ headers: { 'Content-Type': 'application/json' },
6
+ });
7
+ instance.interceptors.request.use((config) => {
8
+ if (apiKey) {
9
+ if (!config.headers)
10
+ config.headers = {};
11
+ config.headers['Authorization'] = `Bearer ${apiKey}`;
12
+ }
13
+ return config;
14
+ });
15
+ return instance;
16
+ };
17
+ export class ApiError extends Error {
18
+ constructor(message, status, data) {
19
+ super(message);
20
+ this.name = 'ApiError';
21
+ this.status = status;
22
+ this.data = data;
23
+ }
24
+ }
25
+ export const httpRequest = async (http, config) => {
26
+ try {
27
+ const res = await http.request(config);
28
+ return res.data.data;
29
+ }
30
+ catch (err) {
31
+ const e = err;
32
+ const status = e.response?.status;
33
+ const data = e.response?.data;
34
+ const message = data?.message || e.message || 'Request failed';
35
+ throw new ApiError(message, status, data);
36
+ }
37
+ };
38
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/services/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwD,MAAM,OAAO,CAAA;AAG5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,MAAe,EAAiB,EAAE;IAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAG,MAAc,CAAC,OAAO,GAAG,EAAE,CAChD;YAAC,MAAM,CAAC,OAAe,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAA;QAChE,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGjC,YAAY,OAAe,EAAE,MAAe,EAAE,IAAc;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAK,IAAmB,EAAE,MAA0B,EAAc,EAAE;IAClG,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiB,MAAM,CAAC,CAAA;QACtD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAiB,CAAA;QAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAA;QACjC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAA;QAC7B,MAAM,OAAO,GAAI,IAAY,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAA;QACvE,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,55 @@
1
+ export interface Message {
2
+ id: string;
3
+ text: string;
4
+ sender: 'user' | 'bot';
5
+ timestamp: Date;
6
+ isError?: boolean;
7
+ }
8
+ export interface ApiResponse<T> {
9
+ statusCode: number;
10
+ status: string;
11
+ data: T;
12
+ }
13
+ export interface StartChatResponse {
14
+ message: string;
15
+ thread_status: string;
16
+ thread_id: string;
17
+ }
18
+ export interface SendMessageResponse {
19
+ message: string;
20
+ thread_status: string;
21
+ }
22
+ export interface ConversationMessage {
23
+ role: 'user' | 'assistant';
24
+ content: string;
25
+ timestamp: string;
26
+ }
27
+ export interface Pagination {
28
+ current_page: string;
29
+ page_size: string;
30
+ total_messages: number;
31
+ total_pages: number;
32
+ has_previous: boolean;
33
+ has_next: boolean;
34
+ }
35
+ export interface ChatHistoryResponse {
36
+ conversation_history: ConversationMessage[];
37
+ pagination: Pagination;
38
+ thread_status: string;
39
+ }
40
+ export interface ChatbotUser {
41
+ email: string;
42
+ isLoggedIn: boolean;
43
+ name?: string;
44
+ logoUrl?: string;
45
+ }
46
+ export interface NavigationLink {
47
+ label: string;
48
+ href: string;
49
+ isExternal?: boolean;
50
+ }
51
+ export interface MessageSuggestion {
52
+ id: string;
53
+ text: string;
54
+ }
55
+ export type ChatbotView = 'hello' | 'chat';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare const isValidEmail: (email: string) => boolean;
2
+ export declare const generateMessageId: () => string;
3
+ export declare const formatTimestamp: (date: Date) => string;
4
+ export declare const sanitizeText: (text: string) => string;
5
+ export declare const truncateText: (text: string, maxLength: number) => string;
6
+ export declare const isExternalUrl: (url: string) => boolean;
@@ -0,0 +1,46 @@
1
+ export const isValidEmail = (email) => {
2
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
3
+ return emailRegex.test(email.trim());
4
+ };
5
+ export const generateMessageId = () => {
6
+ return `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
7
+ };
8
+ export const formatTimestamp = (date) => {
9
+ const now = new Date();
10
+ const diffInMinutes = Math.floor((now.getTime() - date.getTime()) / (1000 * 60));
11
+ if (diffInMinutes < 1)
12
+ return 'Just now';
13
+ if (diffInMinutes < 60)
14
+ return `${diffInMinutes}m ago`;
15
+ const diffInHours = Math.floor(diffInMinutes / 60);
16
+ if (diffInHours < 24)
17
+ return `${diffInHours}h ago`;
18
+ const diffInDays = Math.floor(diffInHours / 24);
19
+ if (diffInDays < 7)
20
+ return `${diffInDays}d ago`;
21
+ return date.toLocaleDateString();
22
+ };
23
+ export const sanitizeText = (text) => {
24
+ return text
25
+ .replace(/&/g, '&amp;')
26
+ .replace(/</g, '&lt;')
27
+ .replace(/>/g, '&gt;')
28
+ .replace(/\"/g, '&quot;')
29
+ .replace(/'/g, '&#x27;')
30
+ .trim();
31
+ };
32
+ export const truncateText = (text, maxLength) => {
33
+ if (text.length <= maxLength)
34
+ return text;
35
+ return text.substring(0, maxLength - 3) + '...';
36
+ };
37
+ export const isExternalUrl = (url) => {
38
+ try {
39
+ const urlObj = new URL(url, window.location.origin);
40
+ return urlObj.origin !== window.location.origin;
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ };
46
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAW,EAAE;IACnD,MAAM,UAAU,GAAG,4BAA4B,CAAA;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;AACxC,CAAC,CAAA;AAKD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC1C,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AACzE,CAAC,CAAA;AAKD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAU,EAAU,EAAE;IAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;IAEhF,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,UAAU,CAAA;IACxC,IAAI,aAAa,GAAG,EAAE;QAAE,OAAO,GAAG,aAAa,OAAO,CAAA;IAEtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAA;IAClD,IAAI,WAAW,GAAG,EAAE;QAAE,OAAO,GAAG,WAAW,OAAO,CAAA;IAElD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAA;IAC/C,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,GAAG,UAAU,OAAO,CAAA;IAE/C,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAA;AACpC,CAAC,CAAA;AAKD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE;IACjD,OAAO,IAAI;SACN,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,IAAI,EAAE,CAAA;AACf,CAAC,CAAA;AAMD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAU,EAAE;IACpE,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,IAAI,CAAA;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAA;AACnD,CAAC,CAAA;AAKD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE;IAClD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACnD,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;IACnD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAA;IAChB,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { ChatbotUser, Message } from "../types";
2
+ interface ChatPageProps {
3
+ messages: Message[];
4
+ user: ChatbotUser;
5
+ isLoading: boolean;
6
+ isTyping?: boolean;
7
+ isEmailSubmitting?: boolean;
8
+ historyMessageIds?: Set<string>;
9
+ currentlyProcessingMessageId?: string | null;
10
+ clearProcessingMessageId?: () => void;
11
+ onSendMessage: (text: string) => void;
12
+ onEmailSubmit: (email: string) => void;
13
+ onRetryMessage?: () => void;
14
+ }
15
+ declare function ChatPage({ messages, user, isLoading, isTyping, isEmailSubmitting, historyMessageIds, currentlyProcessingMessageId, clearProcessingMessageId, onSendMessage, onEmailSubmit, onRetryMessage }: ChatPageProps): import("react/jsx-runtime").JSX.Element;
16
+ export default ChatPage;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, VStack } from "@chakra-ui/react";
3
+ import MessageInput from "../components/MessageInput";
4
+ import MessageList from "../components/MessageList";
5
+ function ChatPage({ messages, user, isLoading, isTyping = false, isEmailSubmitting = false, historyMessageIds, currentlyProcessingMessageId, clearProcessingMessageId, onSendMessage, onEmailSubmit, onRetryMessage }) {
6
+ return (_jsxs(VStack, { h: "full", children: [_jsx(Box, { flex: 1, w: "full", overflow: "hidden", children: _jsx(MessageList, { messages: messages, user: user, isTyping: isTyping, historyMessageIds: historyMessageIds, currentlyProcessingMessageId: currentlyProcessingMessageId, clearProcessingMessageId: clearProcessingMessageId, onRetryMessage: onRetryMessage }) }), _jsx(Box, { w: "full", pt: 4, children: _jsx(MessageInput, { onSend: onSendMessage, user: user, onEmailSubmit: onEmailSubmit, isLoading: isLoading, isEmailSubmitting: isEmailSubmitting, messages: messages }) })] }));
7
+ }
8
+ export default ChatPage;
9
+ //# sourceMappingURL=ChatPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatPage.js","sourceRoot":"","sources":["../../src/views/ChatPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,YAAY,MAAM,4BAA4B,CAAA;AACrD,OAAO,WAAW,MAAM,2BAA2B,CAAA;AAgBnD,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,iBAAiB,GAAG,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAiB;IAChO,OAAO,CACH,MAAC,MAAM,IAAC,CAAC,EAAC,MAAM,aACZ,KAAC,GAAG,IAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,YACpC,KAAC,WAAW,IACV,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,4BAA4B,EAAE,4BAA4B,EAC1D,wBAAwB,EAAE,wBAAwB,EAClD,cAAc,EAAE,cAAc,GAC9B,GACA,EAEN,KAAC,GAAG,IAAC,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,YACf,KAAC,YAAY,IACT,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,QAAQ,GACpB,GACA,IACD,CACZ,CAAA;AACL,CAAC;AAED,eAAe,QAAQ,CAAA"}
@@ -0,0 +1,7 @@
1
+ interface HelloPageProps {
2
+ userName?: string;
3
+ onStartChat: () => void;
4
+ isStartingChat?: boolean;
5
+ }
6
+ declare function HelloPage({ userName, onStartChat, isStartingChat, }: HelloPageProps): import("react/jsx-runtime").JSX.Element;
7
+ export default HelloPage;