@courseecho/ai-widget-react 1.0.3 → 1.0.6
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/components.d.ts +21 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +116 -0
- package/dist/components.js.map +1 -0
- package/dist/hooks.d.ts +65 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +181 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -47
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Widget React - Main Component
|
|
3
|
+
* Floating chat widget for React
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { AiContextConfig, AiMessage } from '@courseecho/ai-core-sdk';
|
|
7
|
+
import './ai-chat-widget.css';
|
|
8
|
+
export interface AiChatWidgetProps {
|
|
9
|
+
config: AiContextConfig;
|
|
10
|
+
jwtToken?: string;
|
|
11
|
+
onError?: (error: string) => void;
|
|
12
|
+
onMessageReceived?: (message: AiMessage) => void;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* AiChatWidget Component
|
|
17
|
+
* Fully functional floating chat widget for React apps
|
|
18
|
+
*/
|
|
19
|
+
export declare const AiChatWidget: React.FC<AiChatWidgetProps>;
|
|
20
|
+
export default AiChatWidget;
|
|
21
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAgB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsSpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* AI Widget React - Main Component
|
|
4
|
+
* Floating chat widget for React
|
|
5
|
+
*/
|
|
6
|
+
import { useRef, useEffect, useState } from 'react';
|
|
7
|
+
import { useAiWidget } from './hooks';
|
|
8
|
+
import './ai-chat-widget.css';
|
|
9
|
+
/**
|
|
10
|
+
* AiChatWidget Component
|
|
11
|
+
* Fully functional floating chat widget for React apps
|
|
12
|
+
*/
|
|
13
|
+
export const AiChatWidget = ({ config, jwtToken, onError, onMessageReceived, className, }) => {
|
|
14
|
+
const { messages, isLoading, error, sendQuery, initialized, suggestions, filterSuggestions, } = useAiWidget(config, jwtToken);
|
|
15
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
16
|
+
const [userInput, setUserInput] = useState('');
|
|
17
|
+
const [showSuggestions, setShowSuggestions] = useState(false);
|
|
18
|
+
const [filteredSuggestions, setFilteredSuggestions] = useState([]);
|
|
19
|
+
const messagesEndRef = useRef(null);
|
|
20
|
+
const inputRef = useRef(null);
|
|
21
|
+
const suggestionsRef = useRef(null);
|
|
22
|
+
// Scroll to bottom when messages change
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
|
|
25
|
+
}, [messages]);
|
|
26
|
+
// Notify on message received
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (messages.length > 0 && onMessageReceived) {
|
|
29
|
+
const lastMessage = messages[messages.length - 1];
|
|
30
|
+
if (lastMessage.role === 'assistant') {
|
|
31
|
+
onMessageReceived(lastMessage);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}, [messages, onMessageReceived]);
|
|
35
|
+
// Notify on error
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (error && onError) {
|
|
38
|
+
onError(error);
|
|
39
|
+
}
|
|
40
|
+
}, [error, onError]);
|
|
41
|
+
// Handle input change and filter suggestions
|
|
42
|
+
const handleInputChange = (e) => {
|
|
43
|
+
const value = e.target.value;
|
|
44
|
+
setUserInput(value);
|
|
45
|
+
if (value.trim() && filterSuggestions) {
|
|
46
|
+
const filtered = filterSuggestions(value);
|
|
47
|
+
setFilteredSuggestions(filtered || []);
|
|
48
|
+
setShowSuggestions(true);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
setShowSuggestions(false);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
// Handle input focus
|
|
55
|
+
const handleInputFocus = () => {
|
|
56
|
+
if (suggestions && suggestions.length > 0 && config.suggestionConfig?.showOnFocus !== false) {
|
|
57
|
+
setFilteredSuggestions(suggestions.slice(0, config.suggestionConfig?.maxVisibleSuggestions || 5));
|
|
58
|
+
setShowSuggestions(true);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
// Handle input click
|
|
62
|
+
const handleInputClick = () => {
|
|
63
|
+
if (suggestions && suggestions.length > 0 && config.suggestionConfig?.showOnClick !== false) {
|
|
64
|
+
setFilteredSuggestions(suggestions.slice(0, config.suggestionConfig?.maxVisibleSuggestions || 5));
|
|
65
|
+
setShowSuggestions(true);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
// Handle suggestion click
|
|
69
|
+
const handleSuggestionClick = (suggestion) => {
|
|
70
|
+
setUserInput(suggestion.text);
|
|
71
|
+
setShowSuggestions(false);
|
|
72
|
+
inputRef.current?.focus();
|
|
73
|
+
};
|
|
74
|
+
// Close suggestions when clicking outside
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
const handleClickOutside = (event) => {
|
|
77
|
+
if (suggestionsRef.current && !suggestionsRef.current.contains(event.target)) {
|
|
78
|
+
if (inputRef.current && !inputRef.current.contains(event.target)) {
|
|
79
|
+
setShowSuggestions(false);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
84
|
+
return () => document.removeEventListener('mousedown', handleClickOutside);
|
|
85
|
+
}, []);
|
|
86
|
+
const handleSendMessage = async (e) => {
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
if (!userInput.trim() || isLoading)
|
|
89
|
+
return;
|
|
90
|
+
try {
|
|
91
|
+
await sendQuery(userInput);
|
|
92
|
+
setUserInput('');
|
|
93
|
+
setShowSuggestions(false);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.error('Failed to send query:', err);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
if (!initialized) {
|
|
100
|
+
return _jsx("div", { className: "ai-widget-loading", children: "Initializing AI Chat..." });
|
|
101
|
+
}
|
|
102
|
+
const positionClass = `ai-widget-${config.position || 'bottom-right'}`;
|
|
103
|
+
const themeClass = `ai-widget-${config.theme || 'light'}`;
|
|
104
|
+
const suggestionsEnabled = config.suggestionConfig?.enabled !== false;
|
|
105
|
+
return (_jsxs("div", { className: `ai-chat-widget-container ${positionClass} ${themeClass} ${className || ''}`, children: [!isOpen && (_jsx("button", { className: "ai-widget-toggle-button", onClick: () => setIsOpen(true), "aria-label": "Open AI Chat", title: "Chat with AI Assistant", children: _jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }) })), isOpen && (_jsxs("div", { className: "ai-widget-window", children: [_jsxs("div", { className: "ai-widget-header", children: [_jsx("h3", { children: "AI Assistant" }), _jsx("button", { className: "ai-widget-close-button", onClick: () => setIsOpen(false), "aria-label": "Close chat", children: "\u00D7" })] }), _jsxs("div", { className: "ai-widget-messages", children: [messages.length === 0 && (_jsxs("div", { className: "ai-widget-welcome", children: [_jsx("p", { children: "\uD83D\uDC4B Hello! I'm your AI assistant." }), _jsx("p", { children: "How can I help you today?" })] })), messages.map((message) => (_jsxs("div", { className: `ai-widget-message ai-widget-message-${message.role}`, children: [_jsx("div", { className: "ai-widget-message-content", children: message.content }), _jsx("div", { className: "ai-widget-message-time", children: new Date(message.timestamp).toLocaleTimeString([], {
|
|
106
|
+
hour: '2-digit',
|
|
107
|
+
minute: '2-digit',
|
|
108
|
+
}) }), message.metadata?.charts &&
|
|
109
|
+
message.metadata.charts.length > 0 && (_jsx("div", { className: "ai-widget-charts", children: message.metadata.charts.map((chart, idx) => (_jsxs("div", { className: "ai-widget-chart-placeholder", children: [_jsxs("p", { children: ["\uD83D\uDCCA ", chart.title] }), _jsxs("small", { children: [chart.type, " chart"] })] }, idx))) }))] }, message.id))), isLoading && (_jsx("div", { className: "ai-widget-message ai-widget-message-assistant", children: _jsxs("div", { className: "ai-widget-typing-indicator", children: [_jsx("span", {}), _jsx("span", {}), _jsx("span", {})] }) })), error && (_jsx("div", { className: "ai-widget-error", children: _jsxs("p", { children: ["\u26A0\uFE0F ", error] }) })), _jsx("div", { ref: messagesEndRef })] }), _jsxs("form", { className: "ai-widget-form", onSubmit: handleSendMessage, children: [_jsxs("div", { className: "ai-widget-input-wrapper", children: [_jsx("input", { ref: inputRef, type: "text", className: "ai-widget-input", placeholder: "Type your message...", value: userInput, onChange: handleInputChange, onFocus: handleInputFocus, onClick: handleInputClick, disabled: isLoading, "aria-label": "Chat message input" }), suggestionsEnabled && showSuggestions && filteredSuggestions.length > 0 && (_jsx("div", { ref: suggestionsRef, className: "ai-widget-suggestions", children: filteredSuggestions.map((suggestion) => (_jsxs("div", { className: "ai-widget-suggestion-item", onClick: () => handleSuggestionClick(suggestion), role: "button", tabIndex: 0, onKeyDown: (e) => {
|
|
110
|
+
if (e.key === 'Enter') {
|
|
111
|
+
handleSuggestionClick(suggestion);
|
|
112
|
+
}
|
|
113
|
+
}, children: [suggestion.icon && (_jsx("span", { className: "ai-widget-suggestion-icon", children: suggestion.icon })), _jsxs("div", { className: "ai-widget-suggestion-content", children: [_jsx("div", { className: "ai-widget-suggestion-text", children: suggestion.text }), suggestion.description && (_jsx("div", { className: "ai-widget-suggestion-description", children: suggestion.description }))] }), suggestion.category && (_jsx("span", { className: "ai-widget-suggestion-category", children: suggestion.category }))] }, suggestion.id))) }))] }), _jsx("button", { type: "submit", className: "ai-widget-send-button", disabled: isLoading || !userInput.trim(), "aria-label": "Send message", children: isLoading ? '⏳' : '→' })] })] }))] }));
|
|
114
|
+
};
|
|
115
|
+
export default AiChatWidget;
|
|
116
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Widget React - Custom Hooks
|
|
3
|
+
* useAiChat, useAiContext, useAiMessages
|
|
4
|
+
*/
|
|
5
|
+
import { AiWidgetSDK, AiContextConfig, AiMessage, AiContext, AiSuggestion } from '@courseecho/ai-core-sdk';
|
|
6
|
+
/**
|
|
7
|
+
* Hook to initialize and use the AI SDK
|
|
8
|
+
* @param config Configuration for the SDK
|
|
9
|
+
* @param jwtToken Optional JWT token for authentication
|
|
10
|
+
* @returns SDK instance and utility functions
|
|
11
|
+
*/
|
|
12
|
+
export declare function useAiChat(config: AiContextConfig, jwtToken?: string): {
|
|
13
|
+
sdk: AiWidgetSDK;
|
|
14
|
+
sendQuery: (query: string) => Promise<AiMessage>;
|
|
15
|
+
setJwt: (token: string) => void;
|
|
16
|
+
checkHealth: () => Promise<boolean>;
|
|
17
|
+
exportChats: (format?: "json" | "csv") => string;
|
|
18
|
+
initialized: boolean;
|
|
19
|
+
error: string | null;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Hook to subscribe to messages
|
|
23
|
+
*/
|
|
24
|
+
export declare function useAiMessages(sdk: AiWidgetSDK): AiMessage[];
|
|
25
|
+
/**
|
|
26
|
+
* Hook to subscribe to loading state
|
|
27
|
+
*/
|
|
28
|
+
export declare function useAiLoading(sdk: AiWidgetSDK): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Hook to subscribe to error state
|
|
31
|
+
*/
|
|
32
|
+
export declare function useAiError(sdk: AiWidgetSDK): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Hook to manage context
|
|
35
|
+
*/
|
|
36
|
+
export declare function useAiContext(sdk: AiWidgetSDK): {
|
|
37
|
+
context: AiContext;
|
|
38
|
+
updateContext: (newContext: Partial<AiContext>) => void;
|
|
39
|
+
updateContextProperty: (key: string, value: any) => void;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Hook to subscribe to suggestions
|
|
43
|
+
*/
|
|
44
|
+
export declare function useAiSuggestions(sdk: AiWidgetSDK): {
|
|
45
|
+
suggestions: AiSuggestion[];
|
|
46
|
+
filterSuggestions: (query: string) => AiSuggestion[];
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Combined hook for common use cases
|
|
50
|
+
*/
|
|
51
|
+
export declare function useAiWidget(config: AiContextConfig, jwtToken?: string): {
|
|
52
|
+
sdk: AiWidgetSDK;
|
|
53
|
+
messages: AiMessage[];
|
|
54
|
+
isLoading: boolean;
|
|
55
|
+
error: string | null;
|
|
56
|
+
context: AiContext;
|
|
57
|
+
sendQuery: (query: string) => Promise<AiMessage>;
|
|
58
|
+
updateContext: (newContext: Partial<AiContext>) => void;
|
|
59
|
+
updateContextProperty: (key: string, value: any) => void;
|
|
60
|
+
initialized: boolean;
|
|
61
|
+
initError: string | null;
|
|
62
|
+
suggestions: AiSuggestion[];
|
|
63
|
+
filterSuggestions: (query: string) => AiSuggestion[];
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,eAAe,EACf,SAAS,EACT,SAAS,EACT,YAAY,EACb,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM;;uBAiClD,MAAM;oBAcZ,MAAM;;2BAaL,MAAM,GAAG,KAAK;;;EAgB1B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,eAY7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,WAY5C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,iBAY1C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW;;gCAY5B,OAAO,CAAC,SAAS,CAAC;iCAOzB,MAAM,SAAS,GAAG;EAW3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW;;+BAcrC,MAAM;EAOjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM;;;;;;uBAhKpD,MAAM;gCA+GP,OAAO,CAAC,SAAS,CAAC;iCAOzB,MAAM,SAAS,GAAG;;;;+BA8BhB,MAAM;EAsCjB"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Widget React - Custom Hooks
|
|
3
|
+
* useAiChat, useAiContext, useAiMessages
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect, useState, useRef, useCallback } from 'react';
|
|
6
|
+
import { AiWidgetSDK, } from '@courseecho/ai-core-sdk';
|
|
7
|
+
/**
|
|
8
|
+
* Hook to initialize and use the AI SDK
|
|
9
|
+
* @param config Configuration for the SDK
|
|
10
|
+
* @param jwtToken Optional JWT token for authentication
|
|
11
|
+
* @returns SDK instance and utility functions
|
|
12
|
+
*/
|
|
13
|
+
export function useAiChat(config, jwtToken) {
|
|
14
|
+
const sdkRef = useRef(null);
|
|
15
|
+
const [initialized, setInitialized] = useState(false);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
// Initialize SDK on mount
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
try {
|
|
20
|
+
const sdk = new AiWidgetSDK(config);
|
|
21
|
+
if (jwtToken) {
|
|
22
|
+
sdk.setJwtToken(jwtToken);
|
|
23
|
+
}
|
|
24
|
+
sdkRef.current = sdk;
|
|
25
|
+
// Initialize auto-suggestions if enabled
|
|
26
|
+
if (config.suggestionConfig?.autoGenerate !== false) {
|
|
27
|
+
sdk.initializeAutoSuggestions().catch((err) => {
|
|
28
|
+
console.warn('Auto-suggestions initialization failed:', err);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
setInitialized(true);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
setError(String(err));
|
|
35
|
+
}
|
|
36
|
+
}, [config, jwtToken]);
|
|
37
|
+
const sdk = sdkRef.current;
|
|
38
|
+
if (!sdk) {
|
|
39
|
+
throw new Error('useAiChat must be initialized first');
|
|
40
|
+
}
|
|
41
|
+
const sendQuery = useCallback(async (query) => {
|
|
42
|
+
if (!sdk)
|
|
43
|
+
throw new Error('SDK not initialized');
|
|
44
|
+
try {
|
|
45
|
+
setError(null);
|
|
46
|
+
return await sdk.sendQuery(query);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
setError(String(err));
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
}, [sdk]);
|
|
53
|
+
const setJwt = useCallback((token) => {
|
|
54
|
+
if (!sdk)
|
|
55
|
+
throw new Error('SDK not initialized');
|
|
56
|
+
sdk.setJwtToken(token);
|
|
57
|
+
}, [sdk]);
|
|
58
|
+
const checkHealth = useCallback(async () => {
|
|
59
|
+
if (!sdk)
|
|
60
|
+
throw new Error('SDK not initialized');
|
|
61
|
+
return sdk.checkHealth();
|
|
62
|
+
}, [sdk]);
|
|
63
|
+
const exportChats = useCallback((format = 'json') => {
|
|
64
|
+
if (!sdk)
|
|
65
|
+
throw new Error('SDK not initialized');
|
|
66
|
+
return sdk.exportChats(format);
|
|
67
|
+
}, [sdk]);
|
|
68
|
+
return {
|
|
69
|
+
sdk,
|
|
70
|
+
sendQuery,
|
|
71
|
+
setJwt,
|
|
72
|
+
checkHealth,
|
|
73
|
+
exportChats,
|
|
74
|
+
initialized,
|
|
75
|
+
error,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Hook to subscribe to messages
|
|
80
|
+
*/
|
|
81
|
+
export function useAiMessages(sdk) {
|
|
82
|
+
const [messages, setMessages] = useState(() => sdk.getMessages());
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
const unsubscribe = sdk.onMessagesChange((msgs) => {
|
|
85
|
+
setMessages([...msgs]);
|
|
86
|
+
});
|
|
87
|
+
return unsubscribe;
|
|
88
|
+
}, [sdk]);
|
|
89
|
+
return messages;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Hook to subscribe to loading state
|
|
93
|
+
*/
|
|
94
|
+
export function useAiLoading(sdk) {
|
|
95
|
+
const [isLoading, setIsLoading] = useState(() => sdk.isLoading());
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
const unsubscribe = sdk.onLoadingChange((loading) => {
|
|
98
|
+
setIsLoading(loading);
|
|
99
|
+
});
|
|
100
|
+
return unsubscribe;
|
|
101
|
+
}, [sdk]);
|
|
102
|
+
return isLoading;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Hook to subscribe to error state
|
|
106
|
+
*/
|
|
107
|
+
export function useAiError(sdk) {
|
|
108
|
+
const [error, setError] = useState(() => sdk.getError());
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
const unsubscribe = sdk.onErrorChange((err) => {
|
|
111
|
+
setError(err);
|
|
112
|
+
});
|
|
113
|
+
return unsubscribe;
|
|
114
|
+
}, [sdk]);
|
|
115
|
+
return error;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Hook to manage context
|
|
119
|
+
*/
|
|
120
|
+
export function useAiContext(sdk) {
|
|
121
|
+
const [context, setContext] = useState(() => sdk.getContext());
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
const unsubscribe = sdk.onContextChange((ctx) => {
|
|
124
|
+
setContext({ ...ctx });
|
|
125
|
+
});
|
|
126
|
+
return unsubscribe;
|
|
127
|
+
}, [sdk]);
|
|
128
|
+
const updateContext = useCallback((newContext) => {
|
|
129
|
+
sdk.setContext(newContext);
|
|
130
|
+
}, [sdk]);
|
|
131
|
+
const updateContextProperty = useCallback((key, value) => {
|
|
132
|
+
sdk.updateContextProperty(key, value);
|
|
133
|
+
}, [sdk]);
|
|
134
|
+
return {
|
|
135
|
+
context,
|
|
136
|
+
updateContext,
|
|
137
|
+
updateContextProperty,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Hook to subscribe to suggestions
|
|
142
|
+
*/
|
|
143
|
+
export function useAiSuggestions(sdk) {
|
|
144
|
+
const [suggestions, setSuggestions] = useState(() => sdk.getSuggestions());
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
const unsubscribe = sdk.onSuggestionsChange((sugg) => {
|
|
147
|
+
setSuggestions([...sugg]);
|
|
148
|
+
});
|
|
149
|
+
return unsubscribe;
|
|
150
|
+
}, [sdk]);
|
|
151
|
+
const filterSuggestions = useCallback((query) => {
|
|
152
|
+
return sdk.filterSuggestions(query);
|
|
153
|
+
}, [sdk]);
|
|
154
|
+
return { suggestions, filterSuggestions };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Combined hook for common use cases
|
|
158
|
+
*/
|
|
159
|
+
export function useAiWidget(config, jwtToken) {
|
|
160
|
+
const { sdk, sendQuery, initialized, error: initError } = useAiChat(config, jwtToken);
|
|
161
|
+
const messages = useAiMessages(sdk);
|
|
162
|
+
const isLoading = useAiLoading(sdk);
|
|
163
|
+
const error = useAiError(sdk);
|
|
164
|
+
const { context, updateContext, updateContextProperty } = useAiContext(sdk);
|
|
165
|
+
const { suggestions, filterSuggestions } = useAiSuggestions(sdk);
|
|
166
|
+
return {
|
|
167
|
+
sdk,
|
|
168
|
+
messages,
|
|
169
|
+
isLoading,
|
|
170
|
+
error,
|
|
171
|
+
context,
|
|
172
|
+
sendQuery,
|
|
173
|
+
updateContext,
|
|
174
|
+
updateContextProperty,
|
|
175
|
+
initialized,
|
|
176
|
+
initError,
|
|
177
|
+
suggestions,
|
|
178
|
+
filterSuggestions,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Widget React - Public API
|
|
3
|
+
*/
|
|
4
|
+
export { AiChatWidget } from './components';
|
|
5
|
+
export type { AiChatWidgetProps } from './components';
|
|
6
|
+
export { useAiChat, useAiMessages, useAiLoading, useAiError, useAiContext, useAiWidget, } from './hooks';
|
|
7
|
+
export type { AiContextConfig, AiContext, AiMessage, AiChart, AiQueryResponse, } from '@courseecho/ai-core-sdk';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,eAAe,EACf,SAAS,EACT,SAAS,EACT,OAAO,EACP,eAAe,GAChB,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name":
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description":
|
|
5
|
-
"license":
|
|
6
|
-
"author":
|
|
7
|
-
"main":
|
|
8
|
-
"module":
|
|
9
|
-
"types":
|
|
10
|
-
"exports":
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"files":
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"scripts":
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"peerDependencies":
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"devDependencies":
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"dependencies":
|
|
47
|
-
|
|
48
|
-
|
|
2
|
+
"name": "@courseecho/ai-widget-react",
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "React component for AI chat widget. Use the SDK in any React app.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "CourseEcho",
|
|
7
|
+
"main": "dist/index.cjs",
|
|
8
|
+
"module": "dist/index.mjs",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"dev": "tsc --watch",
|
|
23
|
+
"test": "jest",
|
|
24
|
+
"lint": "eslint src/**/*.ts*"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"@courseecho/ai-core-sdk": "file:../core",
|
|
28
|
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
29
|
+
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@courseecho/ai-core-sdk": "file:../core",
|
|
33
|
+
"@types/jest": "^29.0.0",
|
|
34
|
+
"@types/node": "^20.0.0",
|
|
35
|
+
"@types/react": "^18.2.0",
|
|
36
|
+
"@types/react-dom": "^18.2.0",
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
38
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
39
|
+
"eslint": "^8.0.0",
|
|
40
|
+
"jest": "^29.0.0",
|
|
41
|
+
"react": "^18.2.0",
|
|
42
|
+
"react-dom": "^18.2.0",
|
|
43
|
+
"ts-jest": "^29.0.0",
|
|
44
|
+
"typescript": "^5.3.0"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@courseecho/ai-core-sdk": "file:../core"
|
|
48
|
+
}
|
|
49
49
|
}
|