@schmitech/chatbot-widget 0.6.1 → 0.6.3

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 (69) hide show
  1. package/dist/{_baseUniq-BPMphbq5-pXyK5GzF.js → _baseUniq-BPMphbq5-xiRWQlDn.js} +1 -1
  2. package/dist/{arc-D9rhTKV0-BccmtXxc.js → arc-D9rhTKV0-3XdW6Lry.js} +1 -1
  3. package/dist/{architecture-U656AL7Q-BFNI3st4-B1bdPiGv.js → architecture-U656AL7Q-BFNI3st4-ChEUjpe5.js} +1 -1
  4. package/dist/{architectureDiagram-VXUJARFQ-BiqZtsDe-jVi_NcwF.js → architectureDiagram-VXUJARFQ-BiqZtsDe-rYpYn0Hz.js} +3 -3
  5. package/dist/{blockDiagram-VD42YOAC-zcRIdFTD-CcG-aDaY.js → blockDiagram-VD42YOAC-zcRIdFTD-B54KiQJD.js} +5 -5
  6. package/dist/{c4Diagram-YG6GDRKO-DYXNcDX4-DggHxH31.js → c4Diagram-YG6GDRKO-DYXNcDX4-B9fXQAMg.js} +2 -2
  7. package/dist/{channel-CUIutAfm-jlYyxm2c.js → channel-CUIutAfm-COC3Ib4R.js} +1 -1
  8. package/dist/chatbot-widget.es.js +1 -1
  9. package/dist/chatbot-widget.umd.js +1746 -1746
  10. package/dist/{chunk-4BX2VUAB-DAh9ktmY-C4bVyHWv.js → chunk-4BX2VUAB-DAh9ktmY-CF6YTNXg.js} +1 -1
  11. package/dist/{chunk-55IACEB6-Cza7pcpr-CCf5vfAZ.js → chunk-55IACEB6-Cza7pcpr-C1E53ZSc.js} +1 -1
  12. package/dist/{chunk-B4BG7PRW-BTUSpeKy-VebHCzO4.js → chunk-B4BG7PRW-BTUSpeKy-CXaYsx4a.js} +4 -4
  13. package/dist/{chunk-DI55MBZ5-DKt4WII7-BG89-jkj.js → chunk-DI55MBZ5-DKt4WII7-CjsnNRFb.js} +3 -3
  14. package/dist/{chunk-FMBD7UC4-DdcCR8w3-C0zc8Bu4.js → chunk-FMBD7UC4-DdcCR8w3-BbYkKjQZ.js} +1 -1
  15. package/dist/{chunk-QN33PNHL-v6AkzOl1-DDaAMO2w.js → chunk-QN33PNHL-v6AkzOl1-DrzKpDUJ.js} +1 -1
  16. package/dist/{chunk-QZHKN3VN-DVJOrqBZ-BJfoOv0N.js → chunk-QZHKN3VN-DVJOrqBZ-BQORk0pj.js} +1 -1
  17. package/dist/{chunk-TZMSLE5B-G2jJHqli-CTTJLNTN.js → chunk-TZMSLE5B-G2jJHqli-B_BRSOS0.js} +1 -1
  18. package/dist/{classDiagram-v2-WZHVMYZB-CxmgTanh-BO-qOK_W.js → classDiagram-2ON5EDUG-CxmgTanh-ByLirDpd.js} +2 -2
  19. package/dist/{classDiagram-2ON5EDUG-CxmgTanh-BO-qOK_W.js → classDiagram-v2-WZHVMYZB-CxmgTanh-ByLirDpd.js} +2 -2
  20. package/dist/{clone-CsNB4mMi-D67O_YGL.js → clone-CsNB4mMi-B2bGL_Hr.js} +1 -1
  21. package/dist/{cose-bilkent-S5V4N54A-BRr2Y6dg-C7l643SE.js → cose-bilkent-S5V4N54A-BRr2Y6dg-C4O3AMLV.js} +1 -1
  22. package/dist/{dagre-6UL2VRFP-DX8gNHmJ-D74sMpRo.js → dagre-6UL2VRFP-DX8gNHmJ-BSzSR8Xh.js} +5 -5
  23. package/dist/{diagram-PSM6KHXK-DNX818To-DxMZY4fq.js → diagram-PSM6KHXK-DNX818To-D60Hp_rL.js} +4 -4
  24. package/dist/{diagram-QEK2KX5R-BDO6hKtm-DROfTvJD.js → diagram-QEK2KX5R-BDO6hKtm-BHvRInjZ.js} +3 -3
  25. package/dist/{diagram-S2PKOQOG-IEqaDwzi-VAckuZEi.js → diagram-S2PKOQOG-IEqaDwzi-CZZkmLuc.js} +3 -3
  26. package/dist/{erDiagram-Q2GNP2WA-DbLpN8Jp-BLKW1nvD.js → erDiagram-Q2GNP2WA-DbLpN8Jp-902zC-_U.js} +4 -4
  27. package/dist/{flowDiagram-NV44I4VS-pJlHae8Y-nojW8Wlo.js → flowDiagram-NV44I4VS-pJlHae8Y-hM8e9jah.js} +5 -5
  28. package/dist/{ganttDiagram-JELNMOA3-J0Tkq5TR-CbkKgkCJ.js → ganttDiagram-JELNMOA3-J0Tkq5TR-C8n0Mtt1.js} +1 -1
  29. package/dist/{gitGraph-F6HP7TQM-CD3YuciB-DKwbqIz6.js → gitGraph-F6HP7TQM-CD3YuciB-WOZqeAgY.js} +1 -1
  30. package/dist/{gitGraphDiagram-NY62KEGX-DgYonpsZ-x5mW3830.js → gitGraphDiagram-NY62KEGX-DgYonpsZ-CAVA4-Vo.js} +4 -4
  31. package/dist/{graph-BpcfrHXY-DnJ5r0W1.js → graph-BpcfrHXY-Dllj_YdG.js} +2 -2
  32. package/dist/{index-DsZePZKI.js → index-DlxA4QQ9.js} +18081 -17944
  33. package/dist/{index-DvNpGWs7-Cl_lDiX1.js → index-DvNpGWs7-CTu7Fgm8.js} +1 -1
  34. package/dist/{info-NVLQJR56-yPC6AWqF-CwRHLFBE.js → info-NVLQJR56-yPC6AWqF-CQWIUnLc.js} +1 -1
  35. package/dist/{infoDiagram-WHAUD3N6-C3JLOAnb-v0hS-2mP.js → infoDiagram-WHAUD3N6-C3JLOAnb-o3ipZ1gK.js} +2 -2
  36. package/dist/{journeyDiagram-XKPGCS4Q-CfjB2Qdf-DMkyZbdl.js → journeyDiagram-XKPGCS4Q-CfjB2Qdf-nD3bX36U.js} +4 -4
  37. package/dist/{kanban-definition-3W4ZIXB7-CrW8yVmd-DnYOERNB.js → kanban-definition-3W4ZIXB7-CrW8yVmd-C_Okjmcp.js} +2 -2
  38. package/dist/{layout-bsfAhWjc-XDvSM0Kd.js → layout-bsfAhWjc-fb3F3QBs.js} +4 -4
  39. package/dist/{mermaid-parser.core-3GIbpcw--BgC6BEWn.js → mermaid-parser.core-3GIbpcw--KxsyRnD0.js} +10 -10
  40. package/dist/{min-C2aDz5ZK-mZ_1m7o1.js → min-C2aDz5ZK-NndI1eE7.js} +2 -2
  41. package/dist/{mindmap-definition-VGOIOE7T-Dj37RkY_-C1Dv3AyX.js → mindmap-definition-VGOIOE7T-Dj37RkY_-BXffQH_4.js} +3 -3
  42. package/dist/{packet-BFZMPI3H-3ROFuof--CQxbCS-3.js → packet-BFZMPI3H-3ROFuof--C96yO55O.js} +1 -1
  43. package/dist/{pie-7BOR55EZ-BZ_QeD6P-CShMFxUp.js → pie-7BOR55EZ-BZ_QeD6P-Bs0c_r6N.js} +1 -1
  44. package/dist/{pieDiagram-ADFJNKIX-BiQvDx8I-fjbWfXv9.js → pieDiagram-ADFJNKIX-BiQvDx8I-DnApOdvY.js} +4 -4
  45. package/dist/{quadrantDiagram-AYHSOK5B-D4b-YFzI-CWBiXPpN.js → quadrantDiagram-AYHSOK5B-D4b-YFzI-DrTslixM.js} +1 -1
  46. package/dist/{radar-NHE76QYJ-BkSncUeS-Bk9YfdVU.js → radar-NHE76QYJ-BkSncUeS-jHSdaVBc.js} +1 -1
  47. package/dist/{requirementDiagram-UZGBJVZJ-km07nlVd-TM2xQOI2.js → requirementDiagram-UZGBJVZJ-km07nlVd-C-mMa1KG.js} +3 -3
  48. package/dist/{sankeyDiagram-TZEHDZUN-LfuSRRbf-NMSONoD0.js → sankeyDiagram-TZEHDZUN-LfuSRRbf-4X6kl_ss.js} +1 -1
  49. package/dist/{sequenceDiagram-WL72ISMW-CQ4J-0_7-BhrTvM4V.js → sequenceDiagram-WL72ISMW-CQ4J-0_7-CEQiE3WJ.js} +3 -3
  50. package/dist/{stateDiagram-FKZM4ZOC-JtogJwt6-Cdi6YqAx.js → stateDiagram-FKZM4ZOC-JtogJwt6-YmKguJGd.js} +4 -4
  51. package/dist/{stateDiagram-v2-4FDKWEC3-DuQ7UaeU-STpnzhfd.js → stateDiagram-v2-4FDKWEC3-DuQ7UaeU-D6r92VaJ.js} +2 -2
  52. package/dist/{timeline-definition-IT6M3QCI-Cs3NnF2M-Bo3GN8Z-.js → timeline-definition-IT6M3QCI-Cs3NnF2M-BigQwSNM.js} +2 -2
  53. package/dist/{treemap-KMMF4GRG-CkW25-tn-C39_kYrM.js → treemap-KMMF4GRG-CkW25-tn-CkfndsG5.js} +1 -1
  54. package/dist/{xychartDiagram-PRI3JC2R-JzAaXa5z-B4k3LDYs.js → xychartDiagram-PRI3JC2R-JzAaXa5z-k94imfkQ.js} +1 -1
  55. package/package.json +2 -2
  56. package/dist/ChatWidget.d.ts +0 -11
  57. package/dist/chatbot-widget.bundle.js +0 -10804
  58. package/dist/config/index.d.ts +0 -81
  59. package/dist/hooks/useAnimationManagement.d.ts +0 -16
  60. package/dist/hooks/useInputManagement.d.ts +0 -21
  61. package/dist/hooks/useScrollManagement.d.ts +0 -17
  62. package/dist/index.d.ts +0 -19
  63. package/dist/shared/styles.d.ts +0 -76
  64. package/dist/store/chatStore.d.ts +0 -19
  65. package/dist/ui/ChatInput.d.ts +0 -17
  66. package/dist/ui/Message.d.ts +0 -22
  67. package/dist/ui/MessagesList.d.ts +0 -32
  68. package/dist/utils/contentFiltering.d.ts +0 -12
  69. package/dist/utils/sessionManager.d.ts +0 -2
@@ -1,81 +0,0 @@
1
- export interface ChatConfig {
2
- header: {
3
- title: string;
4
- };
5
- theme: {
6
- primary: string;
7
- secondary: string;
8
- background: string;
9
- mode?: 'light' | 'dark' | 'system';
10
- text: {
11
- primary: string;
12
- secondary: string;
13
- inverse: string;
14
- };
15
- input: {
16
- background: string;
17
- border: string;
18
- };
19
- message: {
20
- user: string;
21
- userText: string;
22
- assistant: string;
23
- assistantText?: string;
24
- };
25
- suggestedQuestions: {
26
- questionsBackground: string;
27
- text: string;
28
- highlightedBackground: string;
29
- };
30
- chatButton: {
31
- background: string;
32
- hoverBackground?: string;
33
- borderColor?: string;
34
- iconColor?: string;
35
- iconBorderColor?: string;
36
- iconName?: string;
37
- };
38
- };
39
- welcome: {
40
- title: string;
41
- description: string;
42
- };
43
- suggestedQuestions: Array<{
44
- text: string;
45
- query: string;
46
- }>;
47
- }
48
- export declare const defaultTheme: {
49
- primary: string;
50
- secondary: string;
51
- background: string;
52
- mode: "light";
53
- text: {
54
- primary: string;
55
- secondary: string;
56
- inverse: string;
57
- };
58
- input: {
59
- background: string;
60
- border: string;
61
- };
62
- message: {
63
- user: string;
64
- userText: string;
65
- assistant: string;
66
- };
67
- suggestedQuestions: {
68
- questionsBackground: string;
69
- text: string;
70
- highlightedBackground: string;
71
- };
72
- chatButton: {
73
- background: string;
74
- hoverBackground: string;
75
- borderColor: string;
76
- iconColor: string;
77
- iconBorderColor: string;
78
- iconName: string;
79
- };
80
- };
81
- export declare const getChatConfig: () => ChatConfig;
@@ -1,16 +0,0 @@
1
- export interface AnimationManagementReturn {
2
- isAnimating: boolean;
3
- animatedMessagesRef: React.MutableRefObject<Set<string>>;
4
- typingProgressRef: React.MutableRefObject<Map<string, number>>;
5
- isTypingRef: React.MutableRefObject<boolean>;
6
- lastMessageRef: React.RefObject<HTMLDivElement>;
7
- markMessageAnimated: (id: string, messagesLength: number, scrollToBottom: () => void) => void;
8
- hasBeenAnimated: (id: string) => boolean;
9
- clearAnimationTrackers: () => void;
10
- setIsAnimating: (value: boolean) => void;
11
- }
12
- /**
13
- * Custom hook for managing typing animations and animation state
14
- * Handles message animation tracking, progress persistence, and animation lifecycle
15
- */
16
- export declare const useAnimationManagement: () => AnimationManagementReturn;
@@ -1,21 +0,0 @@
1
- export interface InputManagementReturn {
2
- message: string;
3
- isFocused: boolean;
4
- inputRef: React.RefObject<HTMLTextAreaElement>;
5
- handleMessageChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
6
- handleKeyDown: (e: React.KeyboardEvent) => void;
7
- handleSendMessage: () => void;
8
- setIsFocused: (focused: boolean) => void;
9
- clearMessage: () => void;
10
- focusInput: () => void;
11
- }
12
- export interface InputManagementProps {
13
- onSendMessage: (message: string) => void;
14
- isLoading: boolean;
15
- isOpen: boolean;
16
- }
17
- /**
18
- * Custom hook for managing message input state and interactions
19
- * Handles input validation, keyboard shortcuts, and focus management
20
- */
21
- export declare const useInputManagement: ({ onSendMessage, isLoading, isOpen }: InputManagementProps) => InputManagementReturn;
@@ -1,17 +0,0 @@
1
- export interface ScrollManagementReturn {
2
- showScrollTop: boolean;
3
- showScrollBottom: boolean;
4
- isScrolling: boolean;
5
- messagesContainerRef: React.RefObject<HTMLDivElement>;
6
- messagesEndRef: React.RefObject<HTMLDivElement>;
7
- shouldScrollRef: React.MutableRefObject<boolean>;
8
- scrollTimeoutRef: React.MutableRefObject<number | undefined>;
9
- scrollToBottom: (immediate?: boolean) => void;
10
- scrollToTop: () => void;
11
- handleScroll: () => void;
12
- }
13
- /**
14
- * Custom hook for managing scroll behavior in the chat messages container
15
- * Handles scroll buttons visibility, smooth scrolling, and scroll position tracking
16
- */
17
- export declare const useScrollManagement: (isAnimating: boolean) => ScrollManagementReturn;
package/dist/index.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import { ChatWidget, ChatWidgetProps } from './ChatWidget';
2
- import { useChatStore } from './store/chatStore';
3
- import './index.css';
4
- import { getChatConfig, ChatConfig } from './config/index';
5
- export { ChatWidget, useChatStore, getChatConfig };
6
- export type { ChatWidgetProps, ChatConfig };
7
- export default ChatWidget;
8
- export declare function getApiUrl(): string;
9
- export declare function getApiKey(): string;
10
- export declare function setApiUrl(url: string): void;
11
- export declare function setApiKey(key: string): void;
12
- export declare function updateWidgetConfig(config: Partial<ChatConfig>): void;
13
- export declare function injectChatWidget(config: {
14
- apiUrl: string;
15
- apiKey: string;
16
- sessionId?: string;
17
- containerSelector?: string;
18
- widgetConfig?: Partial<ChatConfig>;
19
- }): void;
@@ -1,76 +0,0 @@
1
- export declare const DEFAULT_MAX_SUGGESTED_QUESTION_LENGTH = 120;
2
- export declare const DEFAULT_MAX_SUGGESTED_QUESTION_QUERY_LENGTH = 200;
3
- export declare let CHAT_CONSTANTS: {
4
- MAX_MESSAGE_LENGTH: number;
5
- MAX_SUGGESTED_QUESTION_LENGTH: number;
6
- MAX_SUGGESTED_QUESTION_QUERY_LENGTH: number;
7
- WINDOW_DIMENSIONS: {
8
- readonly HEIGHT: "600px";
9
- readonly MAX_HEIGHT: "calc(100vh - 80px)";
10
- readonly BREAKPOINTS: {
11
- readonly SM: 640;
12
- readonly MD: 768;
13
- readonly LG: 1024;
14
- };
15
- readonly WIDTHS: {
16
- readonly SM: "480px";
17
- readonly MD: "600px";
18
- readonly LG: "700px";
19
- };
20
- };
21
- SCROLL_THRESHOLDS: {
22
- readonly BOTTOM_THRESHOLD: 10;
23
- readonly TOP_THRESHOLD: 10;
24
- readonly SHOW_SCROLL_TOP_OFFSET: 200;
25
- };
26
- ANIMATIONS: {
27
- readonly SCROLL_TIMEOUT: 300;
28
- readonly TOGGLE_DELAY: 100;
29
- readonly ANIMATION_SCROLL_INTERVAL: 100;
30
- readonly COPY_FEEDBACK_DURATION: 2000;
31
- readonly VISIBILITY_SKIP_THRESHOLD: 1000;
32
- };
33
- BUTTON_SIZES: {
34
- readonly CHAT_BUTTON: {
35
- readonly width: "68px";
36
- readonly height: "68px";
37
- };
38
- readonly SEND_BUTTON: {
39
- readonly width: "52px";
40
- readonly height: "52px";
41
- };
42
- readonly ICON_SIZES: {
43
- readonly HEADER: 28;
44
- readonly WELCOME: 56;
45
- readonly BUTTON: 20;
46
- readonly SEND: 24;
47
- readonly MINIMIZE: 28;
48
- };
49
- };
50
- };
51
- /**
52
- * Global CSS styles for the ChatWidget component
53
- */
54
- export declare const CHAT_WIDGET_STYLES = "\n body, button, input, textarea {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n }\n \n /* Complete focus ring removal - covers all browsers and scenarios */\n textarea,\n textarea:focus,\n textarea:focus-visible,\n input,\n input:focus,\n input:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n border-color: inherit !important;\n -webkit-appearance: none !important;\n -moz-appearance: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n \n /* Alternative: Uncomment for subtle light focus ring instead of complete removal */\n /*\n textarea:focus,\n textarea:focus-visible {\n outline: 2px solid rgba(203, 213, 225, 0.4) !important;\n outline-offset: -1px !important;\n box-shadow: 0 0 0 1px rgba(203, 213, 225, 0.2) !important;\n }\n */\n \n /* Remove webkit/safari specific styling */\n textarea::-webkit-input-placeholder,\n input::-webkit-input-placeholder {\n -webkit-appearance: none;\n }\n \n /* Ensure buttons also don't show focus rings */\n button:focus,\n button:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n\n /* Enhanced animations for modern feel */\n @keyframes slideInUp {\n 0% { \n opacity: 0; \n transform: translateY(20px) scale(0.95); \n }\n 100% { \n opacity: 1; \n transform: translateY(0) scale(1); \n }\n }\n\n @keyframes slideOutDown {\n 0% { \n opacity: 1; \n transform: translateY(0) scale(1); \n }\n 100% { \n opacity: 0; \n transform: translateY(20px) scale(0.95); \n }\n }\n\n .animate-slide-in-up {\n animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n .animate-slide-out-down {\n animation: slideOutDown 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes pulseGlow {\n 0%, 100% { \n box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4);\n }\n 50% { \n box-shadow: 0 0 0 8px rgba(59, 130, 246, 0);\n }\n }\n\n .animate-pulse-glow {\n animation: pulseGlow 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n\n @keyframes messageEntry {\n 0% { \n opacity: 0; \n transform: translateY(10px) scale(0.98);\n }\n 100% { \n opacity: 1; \n transform: translateY(0) scale(1);\n }\n }\n\n .animate-message-entry {\n animation: messageEntry 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n\n @keyframes buttonHover {\n 0% { transform: translateY(0) scale(1); }\n 100% { transform: translateY(-2px) scale(1.05); }\n }\n\n .animate-button-hover:hover {\n animation: buttonHover 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n }\n \n @keyframes fadeInOut {\n 0% { opacity: 0; transform: translateY(4px); }\n 20% { opacity: 1; transform: translateY(0); }\n 80% { opacity: 1; transform: translateY(0); }\n 100% { opacity: 0; transform: translateY(-4px); }\n }\n .animate-fade-in-out {\n animation: fadeInOut 2s ease-in-out forwards;\n }\n \n @keyframes bounce-gentle {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-8px); }\n }\n .animate-bounce-gentle {\n animation: bounce-gentle 3s ease-in-out infinite;\n animation-delay: 2s;\n }\n\n @keyframes float {\n 0%, 100% { transform: translateY(0px) rotate(0deg) scale(1); }\n 25% { transform: translateY(-8px) rotate(2deg) scale(1.02); }\n 50% { transform: translateY(-4px) rotate(-1deg) scale(1); }\n 75% { transform: translateY(-6px) rotate(1deg) scale(1.01); }\n }\n .animate-float {\n animation: float 2.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n \n /* Modern typing dots animation */\n @keyframes dotWave {\n 0%, 60%, 100% {\n transform: translateY(0) scale(1);\n background-color: #9ca3af;\n }\n 30% {\n transform: translateY(-10px) scale(1.1);\n background-color: #6b7280;\n }\n }\n \n .typing-dots-container {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 0;\n }\n \n .typing-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: #9ca3af;\n animation: dotWave 1.4s ease-in-out infinite;\n }\n \n .typing-dot:nth-child(1) {\n animation-delay: 0s;\n }\n \n .typing-dot:nth-child(2) {\n animation-delay: 0.2s;\n }\n \n .typing-dot:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n /* Glassmorphism effects */\n .glass-effect {\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n background: rgba(255, 255, 255, 0.8);\n border: 1px solid rgba(255, 255, 255, 0.3);\n }\n\n .glass-effect-dark {\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n background: rgba(30, 41, 59, 0.8);\n border: 1px solid rgba(255, 255, 255, 0.1);\n }\n\n /* Custom scrollbar */\n .custom-scrollbar::-webkit-scrollbar {\n width: 6px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.05);\n border-radius: 3px;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n transition: background 0.2s ease;\n }\n\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n\n /* Horizontal scrollbar for markdown content (tables, code blocks, etc.) */\n .markdown-content-wrapper {\n overflow-x: scroll !important; /* Use 'scroll' to always show scrollbar when content overflows */\n overflow-y: visible !important;\n -webkit-overflow-scrolling: touch;\n /* Force scrollbar to always be visible when content overflows */\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.15);\n }\n\n /* WebKit scrollbar - always visible when overflow */\n .markdown-content-wrapper::-webkit-scrollbar {\n height: 12px;\n width: 12px;\n /* Force scrollbar to always display */\n display: block;\n -webkit-appearance: none;\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.15);\n border-radius: 6px;\n margin: 4px;\n /* Make track always visible */\n -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.1);\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.4);\n border-radius: 6px;\n border: 2px solid transparent;\n background-clip: padding-box;\n transition: background 0.2s ease;\n /* Ensure thumb is always visible */\n min-height: 20px;\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.6);\n background-clip: padding-box;\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-thumb:active {\n background: rgba(0, 0, 0, 0.7);\n }\n\n .markdown-content-wrapper::-webkit-scrollbar-corner {\n background: rgba(0, 0, 0, 0.1);\n }\n\n /* Ensure scrollbar styling is consistent across browsers */\n @supports (-webkit-appearance: none) {\n .markdown-content-wrapper::-webkit-scrollbar {\n -webkit-appearance: none;\n }\n }\n\n /* Force scrollbar to always be visible when content overflows (macOS workaround) */\n .markdown-content-wrapper.has-horizontal-scroll {\n /* Reserve space for scrollbar */\n scrollbar-gutter: stable;\n }\n\n .markdown-content-wrapper.has-horizontal-scroll::-webkit-scrollbar {\n /* Force scrollbar to always be visible */\n display: block !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n .markdown-content-wrapper.has-horizontal-scroll::-webkit-scrollbar-track {\n /* Make track more visible */\n background: rgba(0, 0, 0, 0.2) !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n .markdown-content-wrapper.has-horizontal-scroll::-webkit-scrollbar-thumb {\n /* Make thumb more visible */\n background: rgba(0, 0, 0, 0.5) !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n /* Enhanced shadows */\n .shadow-elegant {\n box-shadow: \n 0 10px 25px -5px rgba(0, 0, 0, 0.1),\n 0 8px 10px -6px rgba(0, 0, 0, 0.1),\n 0 0 0 1px rgba(255, 255, 255, 0.05);\n }\n\n .shadow-soft {\n box-shadow: \n 0 4px 6px -1px rgba(0, 0, 0, 0.1),\n 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n }\n\n .shadow-floating {\n box-shadow: \n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n }\n \n .prose {\n max-width: 100%;\n }\n \n .prose > * {\n margin-top: 0 !important;\n margin-bottom: 0.5em !important;\n }\n \n .prose p {\n margin: 0 0 0.5em 0 !important;\n padding: 0;\n line-height: 1.6;\n }\n \n .prose p:last-child {\n margin-bottom: 0 !important;\n }\n \n .prose ul,\n .prose ol {\n margin-top: 0.5em !important;\n margin-bottom: 0.5em !important;\n padding-left: 1.5em !important;\n }\n \n .prose li {\n margin-bottom: 0.25em !important;\n padding-left: 0.25em !important;\n line-height: 1.5;\n }\n \n .prose li p {\n margin: 0 !important;\n }\n \n .prose li + li {\n margin-top: 0.1em !important;\n }\n \n .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {\n margin-top: 1em !important;\n margin-bottom: 0.5em !important;\n font-weight: 600;\n }\n\n /* Button enhancements */\n .btn-modern {\n position: relative;\n overflow: hidden;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .btn-modern::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0));\n opacity: 0;\n transition: opacity 0.3s ease;\n }\n\n .btn-modern:hover::before {\n opacity: 1;\n }\n\n /* Input enhancements */\n .input-modern {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .input-modern:focus {\n transform: translateY(-1px);\n }\n ";
55
- /**
56
- * Helper functions for responsive window dimensions
57
- */
58
- export declare const getResponsiveWidth: (windowWidth: number) => string;
59
- export declare const getResponsiveMinWidth: (windowWidth: number) => string;
60
- /**
61
- * Font family constant for consistent typography
62
- */
63
- export declare const FONT_FAMILY = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif";
64
- /**
65
- * Character count styling helper
66
- */
67
- export declare const getCharacterCountStyle: (length: number, maxLength: number) => {
68
- color: string;
69
- backgroundColor: string;
70
- fontSize: string;
71
- };
72
- export declare function setChatConstants(config: Partial<{
73
- MAX_MESSAGE_LENGTH?: number;
74
- MAX_SUGGESTED_QUESTION_LENGTH?: number;
75
- MAX_SUGGESTED_QUESTION_QUERY_LENGTH?: number;
76
- }>): void;
@@ -1,19 +0,0 @@
1
- export type MessageRole = 'user' | 'assistant' | 'system';
2
- export interface Message {
3
- id: string;
4
- role: MessageRole;
5
- content: string;
6
- }
7
- interface ChatState {
8
- messages: Message[];
9
- isLoading: boolean;
10
- error: string | null;
11
- sessionId: string;
12
- sendMessage: (content: string) => Promise<void>;
13
- appendToLastMessage: (content: string) => void;
14
- deleteConversation: () => Promise<void>;
15
- clearMessages: () => void;
16
- getSessionId: () => string;
17
- }
18
- export declare const useChatStore: import("zustand").UseBoundStore<import("zustand").StoreApi<ChatState>>;
19
- export {};
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- export interface ChatInputProps {
3
- message: string;
4
- isFocused: boolean;
5
- isLoading: boolean;
6
- theme: any;
7
- inputRef: React.RefObject<HTMLTextAreaElement>;
8
- handleMessageChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
9
- handleKeyDown: (e: React.KeyboardEvent) => void;
10
- handleSendMessage: () => void;
11
- setIsFocused: (focused: boolean) => void;
12
- }
13
- /**
14
- * ChatInput component handles the message input area
15
- * Includes textarea, character counter, and send button with proper styling
16
- */
17
- export declare const ChatInput: React.FC<ChatInputProps>;
@@ -1,22 +0,0 @@
1
- import React from 'react';
2
- import { Message as MessageType } from '../store/chatStore';
3
- export interface MessageProps {
4
- message: MessageType;
5
- index: number;
6
- isLatestAssistantMessage: boolean;
7
- showTypingAnimation: boolean;
8
- theme: any;
9
- copiedMessageId: string | null;
10
- onCopyToClipboard: (text: string, messageId: string) => void;
11
- onMarkMessageAnimated: (id: string, messagesLength: number, scrollToBottom: () => void) => void;
12
- messagesLength: number;
13
- scrollToBottom: () => void;
14
- inputRef: React.RefObject<HTMLTextAreaElement>;
15
- hasBeenAnimated: (id: string) => boolean;
16
- typingProgressRef: React.MutableRefObject<Map<string, number>>;
17
- isTypingRef: React.MutableRefObject<boolean>;
18
- setIsAnimating: (value: boolean) => void;
19
- formatTime: (date: Date) => string;
20
- lastMessageRef: React.RefObject<HTMLDivElement>;
21
- }
22
- export declare const Message: React.NamedExoticComponent<MessageProps>;
@@ -1,32 +0,0 @@
1
- import React from 'react';
2
- import { Message as MessageType } from '../store/chatStore';
3
- import { ChatConfig } from '../config/index';
4
- export interface MessagesListProps {
5
- messages: MessageType[];
6
- isLoading: boolean;
7
- theme: ChatConfig['theme'];
8
- currentConfig: ChatConfig;
9
- showScrollTop: boolean;
10
- showScrollBottom: boolean;
11
- isAnimating: boolean;
12
- messagesContainerRef: React.RefObject<HTMLDivElement>;
13
- messagesEndRef: React.RefObject<HTMLDivElement>;
14
- scrollToTop: () => void;
15
- scrollToBottom: () => void;
16
- handleScroll: () => void;
17
- sendMessage: (message: string) => void;
18
- focusInput: () => void;
19
- copiedMessageId: string | null;
20
- onCopyToClipboard: (text: string, messageId: string) => void;
21
- onMarkMessageAnimated: (id: string, messagesLength: number, scrollToBottom: () => void) => void;
22
- inputRef: React.RefObject<HTMLTextAreaElement>;
23
- hasBeenAnimated: (id: string) => boolean;
24
- typingProgressRef: React.MutableRefObject<Map<string, number>>;
25
- isTypingRef: React.MutableRefObject<boolean>;
26
- setIsAnimating: (value: boolean) => void;
27
- formatTime: (date: Date) => string;
28
- lastMessageRef: React.RefObject<HTMLDivElement>;
29
- maxSuggestedQuestionLength?: number;
30
- maxSuggestedQuestionQueryLength?: number;
31
- }
32
- export declare const MessagesList: React.NamedExoticComponent<MessagesListProps>;
@@ -1,12 +0,0 @@
1
- /**
2
- * Detects if text is likely base64-encoded audio.
3
- */
4
- export declare function isBase64AudioData(text: string): boolean;
5
- /**
6
- * Removes base64 audio data from streamed markdown content.
7
- */
8
- export declare function sanitizeMessageContent(content: string): string;
9
- /**
10
- * Truncate ultra long responses to keep the widget responsive.
11
- */
12
- export declare function truncateLongContent(content: string, maxLength?: number): string;
@@ -1,2 +0,0 @@
1
- export declare function getOrCreateSessionId(): string;
2
- export declare function setSessionId(sessionId: string): void;