@chatwidgetai/chat-widget 0.1.6 → 0.1.8
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/ai-chat-widget.umd.js +305 -330
- package/dist/ai-chat-widget.umd.js.map +1 -1
- package/dist/components/ChatWidget.d.ts.map +1 -1
- package/dist/components/ChatWindow.d.ts +6 -0
- package/dist/components/ChatWindow.d.ts.map +1 -1
- package/dist/hooks/useChat.d.ts +11 -0
- package/dist/hooks/useChat.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +305 -329
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +305 -329
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +5 -121
- package/dist/types/index.d.ts.map +1 -1
- package/dist/umd.d.ts +0 -1
- package/dist/umd.d.ts.map +1 -1
- package/dist/utils/applyAppearanceStyles.d.ts +3 -3
- package/dist/utils/applyAppearanceStyles.d.ts.map +1 -1
- package/dist/utils/autoThemeDetector.d.ts.map +1 -1
- package/dist/utils/storage.d.ts +31 -3
- package/dist/utils/storage.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -17599,8 +17599,10 @@
|
|
|
17599
17599
|
/**
|
|
17600
17600
|
* Local Storage Utilities
|
|
17601
17601
|
* Handles conversation persistence in browser localStorage
|
|
17602
|
+
* Supports multiple conversations per widget with history
|
|
17602
17603
|
*/
|
|
17603
17604
|
const STORAGE_PREFIX = 'ai-chat-widget';
|
|
17605
|
+
const MAX_STORED_CONVERSATIONS = 20;
|
|
17604
17606
|
/**
|
|
17605
17607
|
* Generate a storage key for a widget
|
|
17606
17608
|
*/
|
|
@@ -17608,33 +17610,113 @@
|
|
|
17608
17610
|
return `${STORAGE_PREFIX}:${widgetId}`;
|
|
17609
17611
|
}
|
|
17610
17612
|
/**
|
|
17611
|
-
*
|
|
17613
|
+
* Get widget storage data
|
|
17612
17614
|
*/
|
|
17613
|
-
function
|
|
17615
|
+
function getWidgetStorage(widgetId) {
|
|
17614
17616
|
try {
|
|
17615
17617
|
const key = getStorageKey(widgetId);
|
|
17616
|
-
const data =
|
|
17618
|
+
const data = localStorage.getItem(key);
|
|
17619
|
+
if (!data) {
|
|
17620
|
+
return { activeConversationId: null, conversations: {}, history: [] };
|
|
17621
|
+
}
|
|
17622
|
+
const parsed = JSON.parse(data);
|
|
17623
|
+
// Handle legacy format (single conversation)
|
|
17624
|
+
if (parsed.conversationId && parsed.messages) {
|
|
17625
|
+
const legacy = parsed;
|
|
17626
|
+
return {
|
|
17627
|
+
activeConversationId: legacy.conversationId,
|
|
17628
|
+
conversations: { [legacy.conversationId]: legacy },
|
|
17629
|
+
history: [{
|
|
17630
|
+
id: legacy.conversationId,
|
|
17631
|
+
preview: getConversationPreview(legacy.messages),
|
|
17632
|
+
lastUpdated: legacy.lastUpdated,
|
|
17633
|
+
messageCount: legacy.messages.length,
|
|
17634
|
+
}],
|
|
17635
|
+
};
|
|
17636
|
+
}
|
|
17637
|
+
return parsed;
|
|
17638
|
+
}
|
|
17639
|
+
catch (error) {
|
|
17640
|
+
console.error('Failed to get widget storage:', error);
|
|
17641
|
+
return { activeConversationId: null, conversations: {}, history: [] };
|
|
17642
|
+
}
|
|
17643
|
+
}
|
|
17644
|
+
/**
|
|
17645
|
+
* Save widget storage data
|
|
17646
|
+
*/
|
|
17647
|
+
function setWidgetStorage(widgetId, storage) {
|
|
17648
|
+
try {
|
|
17649
|
+
const key = getStorageKey(widgetId);
|
|
17650
|
+
localStorage.setItem(key, JSON.stringify(storage));
|
|
17651
|
+
}
|
|
17652
|
+
catch (error) {
|
|
17653
|
+
console.error('Failed to save widget storage:', error);
|
|
17654
|
+
}
|
|
17655
|
+
}
|
|
17656
|
+
/**
|
|
17657
|
+
* Get preview text from messages
|
|
17658
|
+
*/
|
|
17659
|
+
function getConversationPreview(messages) {
|
|
17660
|
+
const firstUserMessage = messages.find(m => m.message.type === 'human');
|
|
17661
|
+
if (firstUserMessage) {
|
|
17662
|
+
return firstUserMessage.message.content.slice(0, 100);
|
|
17663
|
+
}
|
|
17664
|
+
return 'New conversation';
|
|
17665
|
+
}
|
|
17666
|
+
/**
|
|
17667
|
+
* Save conversation to localStorage (updates both conversation and history)
|
|
17668
|
+
*/
|
|
17669
|
+
function saveConversation(widgetId, conversationId, messages) {
|
|
17670
|
+
try {
|
|
17671
|
+
const storage = getWidgetStorage(widgetId);
|
|
17672
|
+
const now = new Date().toISOString();
|
|
17673
|
+
// Update conversation data
|
|
17674
|
+
storage.conversations[conversationId] = {
|
|
17617
17675
|
conversationId,
|
|
17618
17676
|
messages,
|
|
17619
|
-
lastUpdated:
|
|
17677
|
+
lastUpdated: now,
|
|
17678
|
+
};
|
|
17679
|
+
// Update active conversation
|
|
17680
|
+
storage.activeConversationId = conversationId;
|
|
17681
|
+
// Update history entry
|
|
17682
|
+
const existingIndex = storage.history.findIndex(h => h.id === conversationId);
|
|
17683
|
+
const historyEntry = {
|
|
17684
|
+
id: conversationId,
|
|
17685
|
+
preview: getConversationPreview(messages),
|
|
17686
|
+
lastUpdated: now,
|
|
17687
|
+
messageCount: messages.length,
|
|
17620
17688
|
};
|
|
17621
|
-
|
|
17689
|
+
if (existingIndex >= 0) {
|
|
17690
|
+
storage.history[existingIndex] = historyEntry;
|
|
17691
|
+
}
|
|
17692
|
+
else {
|
|
17693
|
+
storage.history.unshift(historyEntry);
|
|
17694
|
+
}
|
|
17695
|
+
// Sort by lastUpdated (most recent first)
|
|
17696
|
+
storage.history.sort((a, b) => new Date(b.lastUpdated).getTime() - new Date(a.lastUpdated).getTime());
|
|
17697
|
+
// Limit stored conversations
|
|
17698
|
+
if (storage.history.length > MAX_STORED_CONVERSATIONS) {
|
|
17699
|
+
const toRemove = storage.history.slice(MAX_STORED_CONVERSATIONS);
|
|
17700
|
+
storage.history = storage.history.slice(0, MAX_STORED_CONVERSATIONS);
|
|
17701
|
+
toRemove.forEach(entry => {
|
|
17702
|
+
delete storage.conversations[entry.id];
|
|
17703
|
+
});
|
|
17704
|
+
}
|
|
17705
|
+
setWidgetStorage(widgetId, storage);
|
|
17622
17706
|
}
|
|
17623
17707
|
catch (error) {
|
|
17624
17708
|
console.error('Failed to save conversation:', error);
|
|
17625
17709
|
}
|
|
17626
17710
|
}
|
|
17627
17711
|
/**
|
|
17628
|
-
* Load conversation from localStorage
|
|
17712
|
+
* Load active conversation from localStorage (legacy compatibility)
|
|
17629
17713
|
*/
|
|
17630
17714
|
function loadConversation(widgetId) {
|
|
17631
17715
|
try {
|
|
17632
|
-
const
|
|
17633
|
-
|
|
17634
|
-
if (!data)
|
|
17716
|
+
const storage = getWidgetStorage(widgetId);
|
|
17717
|
+
if (!storage.activeConversationId)
|
|
17635
17718
|
return null;
|
|
17636
|
-
|
|
17637
|
-
return parsed;
|
|
17719
|
+
return storage.conversations[storage.activeConversationId] || null;
|
|
17638
17720
|
}
|
|
17639
17721
|
catch (error) {
|
|
17640
17722
|
console.error('Failed to load conversation:', error);
|
|
@@ -17642,12 +17724,52 @@
|
|
|
17642
17724
|
}
|
|
17643
17725
|
}
|
|
17644
17726
|
/**
|
|
17645
|
-
*
|
|
17727
|
+
* Load a specific conversation by ID
|
|
17728
|
+
*/
|
|
17729
|
+
function loadConversationById(widgetId, conversationId) {
|
|
17730
|
+
try {
|
|
17731
|
+
const storage = getWidgetStorage(widgetId);
|
|
17732
|
+
return storage.conversations[conversationId] || null;
|
|
17733
|
+
}
|
|
17734
|
+
catch (error) {
|
|
17735
|
+
console.error('Failed to load conversation by ID:', error);
|
|
17736
|
+
return null;
|
|
17737
|
+
}
|
|
17738
|
+
}
|
|
17739
|
+
/**
|
|
17740
|
+
* Get conversation history list
|
|
17741
|
+
*/
|
|
17742
|
+
function getConversationHistory(widgetId) {
|
|
17743
|
+
try {
|
|
17744
|
+
const storage = getWidgetStorage(widgetId);
|
|
17745
|
+
return storage.history;
|
|
17746
|
+
}
|
|
17747
|
+
catch (error) {
|
|
17748
|
+
console.error('Failed to get conversation history:', error);
|
|
17749
|
+
return [];
|
|
17750
|
+
}
|
|
17751
|
+
}
|
|
17752
|
+
/**
|
|
17753
|
+
* Set active conversation
|
|
17754
|
+
*/
|
|
17755
|
+
function setActiveConversation(widgetId, conversationId) {
|
|
17756
|
+
try {
|
|
17757
|
+
const storage = getWidgetStorage(widgetId);
|
|
17758
|
+
storage.activeConversationId = conversationId;
|
|
17759
|
+
setWidgetStorage(widgetId, storage);
|
|
17760
|
+
}
|
|
17761
|
+
catch (error) {
|
|
17762
|
+
console.error('Failed to set active conversation:', error);
|
|
17763
|
+
}
|
|
17764
|
+
}
|
|
17765
|
+
/**
|
|
17766
|
+
* Clear current conversation (start fresh, but keep history)
|
|
17646
17767
|
*/
|
|
17647
17768
|
function clearConversation(widgetId) {
|
|
17648
17769
|
try {
|
|
17649
|
-
const
|
|
17650
|
-
|
|
17770
|
+
const storage = getWidgetStorage(widgetId);
|
|
17771
|
+
storage.activeConversationId = null;
|
|
17772
|
+
setWidgetStorage(widgetId, storage);
|
|
17651
17773
|
}
|
|
17652
17774
|
catch (error) {
|
|
17653
17775
|
console.error('Failed to clear conversation:', error);
|
|
@@ -17744,6 +17866,8 @@
|
|
|
17744
17866
|
conversationId: '', // Will be set after loading conversation
|
|
17745
17867
|
config: null,
|
|
17746
17868
|
});
|
|
17869
|
+
// Chat history state
|
|
17870
|
+
const [conversations, setConversations] = reactExports.useState([]);
|
|
17747
17871
|
const apiClient = reactExports.useRef(new WidgetApiClient({ widgetId, apiUrl }));
|
|
17748
17872
|
// Load configuration on mount and hydrate with existing conversation if available
|
|
17749
17873
|
reactExports.useEffect(() => {
|
|
@@ -17755,8 +17879,6 @@
|
|
|
17755
17879
|
const config = await apiClient.current.getConfig();
|
|
17756
17880
|
console.log('[useChat] Config fetched successfully:', {
|
|
17757
17881
|
hasAppearance: !!config.appearance,
|
|
17758
|
-
hasLightMode: !!config.appearance?.lightMode,
|
|
17759
|
-
hasDarkMode: !!config.appearance?.darkMode,
|
|
17760
17882
|
});
|
|
17761
17883
|
const persistConversation = config.behavior.persistConversation ?? true;
|
|
17762
17884
|
let conversationId = '';
|
|
@@ -18031,6 +18153,78 @@
|
|
|
18031
18153
|
onError?.(err);
|
|
18032
18154
|
}
|
|
18033
18155
|
}, [state.conversationId, onError]);
|
|
18156
|
+
/**
|
|
18157
|
+
* Load conversation history list from localStorage
|
|
18158
|
+
*/
|
|
18159
|
+
const loadConversations = reactExports.useCallback(() => {
|
|
18160
|
+
const persistConversation = state.config?.behavior.persistConversation ?? true;
|
|
18161
|
+
if (!persistConversation || !isStorageAvailable()) {
|
|
18162
|
+
setConversations([]);
|
|
18163
|
+
return;
|
|
18164
|
+
}
|
|
18165
|
+
const history = getConversationHistory(widgetId);
|
|
18166
|
+
setConversations(history.map(entry => ({
|
|
18167
|
+
id: entry.id,
|
|
18168
|
+
preview: entry.preview,
|
|
18169
|
+
lastMessageAt: entry.lastUpdated,
|
|
18170
|
+
messageCount: entry.messageCount,
|
|
18171
|
+
startedAt: entry.lastUpdated,
|
|
18172
|
+
})));
|
|
18173
|
+
}, [widgetId, state.config?.behavior.persistConversation]);
|
|
18174
|
+
/**
|
|
18175
|
+
* Switch to a different conversation (from localStorage first, then fetch from server if needed)
|
|
18176
|
+
*/
|
|
18177
|
+
const switchConversation = reactExports.useCallback(async (conversationId) => {
|
|
18178
|
+
const persistConversation = state.config?.behavior.persistConversation ?? true;
|
|
18179
|
+
// First try to load from localStorage
|
|
18180
|
+
if (persistConversation && isStorageAvailable()) {
|
|
18181
|
+
const stored = loadConversationById(widgetId, conversationId);
|
|
18182
|
+
if (stored) {
|
|
18183
|
+
setState(prev => ({
|
|
18184
|
+
...prev,
|
|
18185
|
+
conversationId: stored.conversationId,
|
|
18186
|
+
messages: stored.messages,
|
|
18187
|
+
}));
|
|
18188
|
+
setActiveConversation(widgetId, conversationId);
|
|
18189
|
+
return;
|
|
18190
|
+
}
|
|
18191
|
+
}
|
|
18192
|
+
// If not in localStorage, fetch from server
|
|
18193
|
+
setState(prev => ({ ...prev, isLoading: true, error: null }));
|
|
18194
|
+
try {
|
|
18195
|
+
const conversation = await apiClient.current.getOrCreateConversation(conversationId);
|
|
18196
|
+
setState(prev => ({
|
|
18197
|
+
...prev,
|
|
18198
|
+
conversationId: conversation.id,
|
|
18199
|
+
messages: conversation.messages,
|
|
18200
|
+
isLoading: false,
|
|
18201
|
+
}));
|
|
18202
|
+
// Save to local storage
|
|
18203
|
+
if (persistConversation && isStorageAvailable()) {
|
|
18204
|
+
saveConversation(widgetId, conversation.id, conversation.messages);
|
|
18205
|
+
}
|
|
18206
|
+
}
|
|
18207
|
+
catch (error) {
|
|
18208
|
+
const errorInfo = deriveErrorInfo(error);
|
|
18209
|
+
setState(prev => ({ ...prev, isLoading: false, error: errorInfo.message }));
|
|
18210
|
+
}
|
|
18211
|
+
}, [widgetId, state.config?.behavior.persistConversation]);
|
|
18212
|
+
/**
|
|
18213
|
+
* Start a new conversation (keeps history)
|
|
18214
|
+
*/
|
|
18215
|
+
const startNewConversation = reactExports.useCallback(() => {
|
|
18216
|
+
setState(prev => ({
|
|
18217
|
+
...prev,
|
|
18218
|
+
messages: [],
|
|
18219
|
+
conversationId: '',
|
|
18220
|
+
error: null,
|
|
18221
|
+
}));
|
|
18222
|
+
// Clear active conversation but keep history
|
|
18223
|
+
const persistConversation = state.config?.behavior.persistConversation ?? true;
|
|
18224
|
+
if (persistConversation && isStorageAvailable()) {
|
|
18225
|
+
clearConversation(widgetId);
|
|
18226
|
+
}
|
|
18227
|
+
}, [widgetId, state.config?.behavior.persistConversation]);
|
|
18034
18228
|
return {
|
|
18035
18229
|
messages: state.messages,
|
|
18036
18230
|
isLoading: state.isLoading,
|
|
@@ -18041,6 +18235,11 @@
|
|
|
18041
18235
|
sendMessage,
|
|
18042
18236
|
clearMessages,
|
|
18043
18237
|
submitFeedback,
|
|
18238
|
+
// Chat history features
|
|
18239
|
+
conversations,
|
|
18240
|
+
loadConversations,
|
|
18241
|
+
switchConversation,
|
|
18242
|
+
startNewConversation,
|
|
18044
18243
|
};
|
|
18045
18244
|
}
|
|
18046
18245
|
|
|
@@ -38908,26 +39107,53 @@
|
|
|
38908
39107
|
};
|
|
38909
39108
|
|
|
38910
39109
|
const MinimizeIcon = () => (jsxRuntimeExports.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("path", { d: "M5 12h14" }) }));
|
|
38911
|
-
const
|
|
39110
|
+
const HistoryIcon = () => (jsxRuntimeExports.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "10" }), jsxRuntimeExports.jsx("polyline", { points: "12 6 12 12 16 14" })] }));
|
|
39111
|
+
const NewChatIcon = () => (jsxRuntimeExports.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("path", { d: "M12 5v14M5 12h14" }) }));
|
|
39112
|
+
const BackIcon = () => (jsxRuntimeExports.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("path", { d: "M19 12H5M12 19l-7-7 7-7" }) }));
|
|
39113
|
+
const ChatWindow = ({ messages, isLoading, isTyping, error, config, onSendMessage, onClose, onFeedback,
|
|
39114
|
+
// Chat history props (only active when persistConversation is true)
|
|
39115
|
+
conversations = [], onLoadConversations, onSwitchConversation, onStartNewConversation, currentConversationId, }) => {
|
|
38912
39116
|
console.log('[ChatWindow] Rendering ChatWindow component');
|
|
38913
39117
|
const appearance = config?.appearance;
|
|
38914
39118
|
const behavior = config?.behavior;
|
|
39119
|
+
// Use simplified appearance fields
|
|
38915
39120
|
const size = appearance?.size || 'medium';
|
|
38916
|
-
|
|
38917
|
-
|
|
38918
|
-
const
|
|
38919
|
-
|
|
38920
|
-
|
|
38921
|
-
|
|
38922
|
-
|
|
38923
|
-
|
|
38924
|
-
|
|
38925
|
-
const headerTitle = themeConfig?.header?.title ?? appearance?.header?.title ?? appearance?.companyName ?? 'AI Assistant';
|
|
38926
|
-
const welcomeTitle = themeConfig?.chat?.welcomeTitle ?? 'Welcome!';
|
|
38927
|
-
const welcomeMessage = themeConfig?.chat?.welcomeMessage ?? appearance?.welcomeMessage ?? '👋 Hi there! How can I assist you today?';
|
|
38928
|
-
const inputPlaceholder = themeConfig?.footer?.inputPlaceholder ?? appearance?.placeholder ?? 'Ask me anything...';
|
|
39121
|
+
const headerTitle = appearance?.headerTitle || 'AI Assistant';
|
|
39122
|
+
const welcomeMessage = appearance?.welcomeMessage || '👋 Hi there! How can I assist you today?';
|
|
39123
|
+
const inputPlaceholder = appearance?.placeholder || 'Ask me anything...';
|
|
39124
|
+
console.log('[ChatWindow] Appearance values:', {
|
|
39125
|
+
size,
|
|
39126
|
+
headerTitle,
|
|
39127
|
+
welcomeMessage,
|
|
39128
|
+
inputPlaceholder,
|
|
39129
|
+
});
|
|
38929
39130
|
// Track if suggested questions should be shown
|
|
38930
39131
|
const [showSuggestedQuestions, setShowSuggestedQuestions] = reactExports.useState(true);
|
|
39132
|
+
// Track if history panel is open
|
|
39133
|
+
const [showHistory, setShowHistory] = reactExports.useState(false);
|
|
39134
|
+
// Check if chat history feature is enabled (only when persistConversation is true)
|
|
39135
|
+
const isHistoryEnabled = behavior?.persistConversation !== false && !!onLoadConversations;
|
|
39136
|
+
// Load conversations when history panel opens
|
|
39137
|
+
const handleOpenHistory = () => {
|
|
39138
|
+
setShowHistory(true);
|
|
39139
|
+
if (onLoadConversations) {
|
|
39140
|
+
onLoadConversations();
|
|
39141
|
+
}
|
|
39142
|
+
};
|
|
39143
|
+
// Handle conversation selection
|
|
39144
|
+
const handleSelectConversation = async (conversationId) => {
|
|
39145
|
+
if (onSwitchConversation) {
|
|
39146
|
+
await onSwitchConversation(conversationId);
|
|
39147
|
+
setShowHistory(false);
|
|
39148
|
+
}
|
|
39149
|
+
};
|
|
39150
|
+
// Handle new conversation
|
|
39151
|
+
const handleNewConversation = () => {
|
|
39152
|
+
if (onStartNewConversation) {
|
|
39153
|
+
onStartNewConversation();
|
|
39154
|
+
setShowHistory(false);
|
|
39155
|
+
}
|
|
39156
|
+
};
|
|
38931
39157
|
// Hide suggested questions after first user message
|
|
38932
39158
|
reactExports.useEffect(() => {
|
|
38933
39159
|
const userMessages = messages.filter(m => m.message.type === 'human');
|
|
@@ -38945,241 +39171,39 @@
|
|
|
38945
39171
|
onSendMessage(question);
|
|
38946
39172
|
};
|
|
38947
39173
|
const hasMessages = messages.length > 0;
|
|
38948
|
-
|
|
39174
|
+
// Format date for conversation list
|
|
39175
|
+
const formatDate = (dateString) => {
|
|
39176
|
+
const date = new Date(dateString);
|
|
39177
|
+
const now = new Date();
|
|
39178
|
+
const diffMs = now.getTime() - date.getTime();
|
|
39179
|
+
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
39180
|
+
if (diffDays === 0)
|
|
39181
|
+
return 'Today';
|
|
39182
|
+
if (diffDays === 1)
|
|
39183
|
+
return 'Yesterday';
|
|
39184
|
+
if (diffDays < 7)
|
|
39185
|
+
return `${diffDays} days ago`;
|
|
39186
|
+
return date.toLocaleDateString();
|
|
39187
|
+
};
|
|
39188
|
+
return (jsxRuntimeExports.jsxs("div", { className: `ai-chat-window size-${size}`, role: "dialog", "aria-label": "Chat window", children: [jsxRuntimeExports.jsx("div", { className: "ai-chat-header", children: showHistory ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("button", { className: "ai-chat-header-button", onClick: () => setShowHistory(false), "aria-label": "Back to chat", children: jsxRuntimeExports.jsx(BackIcon, {}) }), jsxRuntimeExports.jsx("div", { className: "ai-chat-title", children: "Chat History" }), jsxRuntimeExports.jsx("button", { className: "ai-chat-header-button", onClick: handleNewConversation, "aria-label": "New conversation", children: jsxRuntimeExports.jsx(NewChatIcon, {}) })] })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("div", { className: "ai-chat-header-content", children: [appearance?.logo && (jsxRuntimeExports.jsx("img", { src: appearance.logo, alt: "Logo", className: "ai-chat-logo" })), jsxRuntimeExports.jsx("div", { className: "ai-chat-title", children: headerTitle })] }), jsxRuntimeExports.jsxs("div", { className: "ai-chat-header-actions", children: [isHistoryEnabled && (jsxRuntimeExports.jsx("button", { className: "ai-chat-header-button", onClick: handleOpenHistory, "aria-label": "Chat history", children: jsxRuntimeExports.jsx(HistoryIcon, {}) })), jsxRuntimeExports.jsx("button", { className: "ai-chat-close-button", onClick: onClose, "aria-label": "Minimize chat", children: jsxRuntimeExports.jsx(MinimizeIcon, {}) })] })] })) }), showHistory ? (jsxRuntimeExports.jsx("div", { className: "ai-chat-history-panel", children: conversations.length === 0 ? (jsxRuntimeExports.jsx("div", { className: "ai-chat-history-empty", children: "No previous conversations" })) : (jsxRuntimeExports.jsx("div", { className: "ai-chat-history-list", children: conversations.map((conv) => (jsxRuntimeExports.jsxs("button", { className: `ai-chat-history-item ${conv.id === currentConversationId ? 'active' : ''}`, onClick: () => handleSelectConversation(conv.id), children: [jsxRuntimeExports.jsx("div", { className: "ai-chat-history-item-preview", children: conv.preview }), jsxRuntimeExports.jsxs("div", { className: "ai-chat-history-item-meta", children: [jsxRuntimeExports.jsx("span", { children: formatDate(conv.lastMessageAt) }), jsxRuntimeExports.jsxs("span", { children: [conv.messageCount, " messages"] })] })] }, conv.id))) })) })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [error && (jsxRuntimeExports.jsx("div", { className: "ai-chat-error", role: "alert", children: error })), maxMessages && userMessageCount >= maxMessages - 2 && !isLimitReached && (jsxRuntimeExports.jsxs("div", { className: "ai-chat-warning", role: "alert", children: [maxMessages - userMessageCount, " message", maxMessages - userMessageCount !== 1 ? 's' : '', " remaining"] })), isLimitReached && (jsxRuntimeExports.jsx("div", { className: "ai-chat-error", role: "alert", children: "Message limit reached. Please start a new conversation." })), jsxRuntimeExports.jsx(MessageList, { messages: messages, isTyping: isTyping, showTypingIndicator: behavior?.showTypingIndicator, showTimestamps: behavior?.showTimestamps, enableFeedback: behavior?.enableFeedback, showSources: behavior?.showSources, sourceDisplayMode: behavior?.sourceDisplayMode, welcomeMessage: welcomeMessage, onFeedback: onFeedback }), showSuggestedQuestions && !hasMessages && behavior?.suggestedQuestions && behavior.suggestedQuestions.length > 0 && (jsxRuntimeExports.jsx(SuggestedQuestions, { questions: behavior.suggestedQuestions, onQuestionClick: handleQuestionClick })), jsxRuntimeExports.jsx(MessageInput, { onSend: onSendMessage, placeholder: isLimitReached ? 'Message limit reached' : inputPlaceholder, disabled: isLoading || isLimitReached, enableFileUpload: behavior?.enableFileUpload })] }))] }));
|
|
38949
39189
|
};
|
|
38950
39190
|
|
|
38951
|
-
/**
|
|
38952
|
-
* Convert shadow size to CSS box-shadow value
|
|
38953
|
-
*/
|
|
38954
|
-
function getShadowValue(size) {
|
|
38955
|
-
const shadows = {
|
|
38956
|
-
'none': 'none',
|
|
38957
|
-
'sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
|
|
38958
|
-
'md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
|
|
38959
|
-
'lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
|
|
38960
|
-
'xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
|
|
38961
|
-
'2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
|
|
38962
|
-
};
|
|
38963
|
-
return shadows[size] || shadows.none;
|
|
38964
|
-
}
|
|
38965
39191
|
/**
|
|
38966
39192
|
* Apply appearance configuration as CSS custom properties
|
|
38967
|
-
*
|
|
39193
|
+
* Simplified to only handle flat appearance schema
|
|
38968
39194
|
*
|
|
38969
39195
|
* @param appearance - Widget appearance configuration
|
|
38970
|
-
* @param theme - Current theme ('light' or 'dark')
|
|
39196
|
+
* @param theme - Current theme ('light' or 'dark') - kept for compatibility but not used for theme selection
|
|
38971
39197
|
*/
|
|
38972
|
-
function applyAppearanceStyles(appearance
|
|
39198
|
+
function applyAppearanceStyles(appearance) {
|
|
38973
39199
|
const styles = {};
|
|
38974
|
-
//
|
|
38975
|
-
if (appearance.
|
|
38976
|
-
styles
|
|
38977
|
-
}
|
|
38978
|
-
// Select the correct theme configuration
|
|
38979
|
-
const themeConfig = theme === 'dark' ? appearance.darkMode : appearance.lightMode;
|
|
38980
|
-
// If theme config exists and has required properties, use it
|
|
38981
|
-
if (themeConfig && themeConfig.button) {
|
|
38982
|
-
// ========================================================================
|
|
38983
|
-
// BUTTON APPEARANCE
|
|
38984
|
-
// ========================================================================
|
|
38985
|
-
const btn = themeConfig.button;
|
|
38986
|
-
if (btn.color)
|
|
38987
|
-
styles['--button-color'] = btn.color;
|
|
38988
|
-
if (btn.opacity !== undefined)
|
|
38989
|
-
styles['--button-opacity'] = btn.opacity.toString();
|
|
38990
|
-
if (btn.size)
|
|
38991
|
-
styles['--button-size'] = `${btn.size}px`;
|
|
38992
|
-
if (btn.icon)
|
|
38993
|
-
styles['--button-icon'] = btn.icon;
|
|
38994
|
-
if (btn.iconColor)
|
|
38995
|
-
styles['--button-icon-color'] = btn.iconColor;
|
|
38996
|
-
if (btn.borderRadius !== undefined)
|
|
38997
|
-
styles['--button-border-radius'] = `${btn.borderRadius}px`;
|
|
38998
|
-
if (btn.borderWidth !== undefined)
|
|
38999
|
-
styles['--button-border-width'] = `${btn.borderWidth}px`;
|
|
39000
|
-
if (btn.borderColor)
|
|
39001
|
-
styles['--button-border-color'] = btn.borderColor;
|
|
39002
|
-
if (btn.borderOpacity !== undefined)
|
|
39003
|
-
styles['--button-border-opacity'] = btn.borderOpacity.toString();
|
|
39004
|
-
if (btn.backdropBlur !== undefined)
|
|
39005
|
-
styles['--button-backdrop-blur'] = `${btn.backdropBlur}px`;
|
|
39006
|
-
if (btn.shadow)
|
|
39007
|
-
styles['--button-shadow'] = getShadowValue(btn.shadow);
|
|
39008
|
-
// ========================================================================
|
|
39009
|
-
// CARD/WINDOW APPEARANCE
|
|
39010
|
-
// ========================================================================
|
|
39011
|
-
const card = themeConfig.card;
|
|
39012
|
-
if (card.backgroundColor)
|
|
39013
|
-
styles['--card-background'] = card.backgroundColor;
|
|
39014
|
-
if (card.opacity !== undefined)
|
|
39015
|
-
styles['--card-opacity'] = card.opacity.toString();
|
|
39016
|
-
if (card.borderRadius !== undefined)
|
|
39017
|
-
styles['--card-border-radius'] = `${card.borderRadius}px`;
|
|
39018
|
-
if (card.borderWidth !== undefined)
|
|
39019
|
-
styles['--card-border-width'] = `${card.borderWidth}px`;
|
|
39020
|
-
if (card.borderColor) {
|
|
39021
|
-
styles['--card-border-color'] = card.borderColor;
|
|
39022
|
-
// Create rgba border color with opacity for box-shadow
|
|
39023
|
-
if (card.borderOpacity !== undefined) {
|
|
39024
|
-
const opacity = card.borderOpacity;
|
|
39025
|
-
// Convert hex to rgba
|
|
39026
|
-
const hex = card.borderColor.replace('#', '');
|
|
39027
|
-
const r = parseInt(hex.substring(0, 2), 16);
|
|
39028
|
-
const g = parseInt(hex.substring(2, 4), 16);
|
|
39029
|
-
const b = parseInt(hex.substring(4, 6), 16);
|
|
39030
|
-
styles['--card-border-color-rgba'] = `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
39031
|
-
}
|
|
39032
|
-
}
|
|
39033
|
-
if (card.borderOpacity !== undefined)
|
|
39034
|
-
styles['--card-border-opacity'] = card.borderOpacity.toString();
|
|
39035
|
-
if (card.backdropBlur !== undefined)
|
|
39036
|
-
styles['--card-backdrop-blur'] = `${card.backdropBlur}px`;
|
|
39037
|
-
if (card.shadow)
|
|
39038
|
-
styles['--card-shadow'] = getShadowValue(card.shadow);
|
|
39039
|
-
// ========================================================================
|
|
39040
|
-
// HEADER APPEARANCE
|
|
39041
|
-
// ========================================================================
|
|
39042
|
-
const header = themeConfig.header;
|
|
39043
|
-
if (header.backgroundColor)
|
|
39044
|
-
styles['--header-background'] = header.backgroundColor;
|
|
39045
|
-
if (header.opacity !== undefined)
|
|
39046
|
-
styles['--header-opacity'] = header.opacity.toString();
|
|
39047
|
-
if (header.textColor)
|
|
39048
|
-
styles['--header-text-color'] = header.textColor;
|
|
39049
|
-
if (header.borderBottomWidth !== undefined)
|
|
39050
|
-
styles['--header-border-bottom-width'] = `${header.borderBottomWidth}px`;
|
|
39051
|
-
if (header.borderBottomColor)
|
|
39052
|
-
styles['--header-border-bottom-color'] = header.borderBottomColor;
|
|
39053
|
-
if (header.borderBottomOpacity !== undefined)
|
|
39054
|
-
styles['--header-border-bottom-opacity'] = header.borderBottomOpacity.toString();
|
|
39055
|
-
// ========================================================================
|
|
39056
|
-
// CHAT APPEARANCE
|
|
39057
|
-
// ========================================================================
|
|
39058
|
-
const chat = themeConfig.chat;
|
|
39059
|
-
if (chat.backgroundColor)
|
|
39060
|
-
styles['--chat-background'] = chat.backgroundColor;
|
|
39061
|
-
if (chat.opacity !== undefined)
|
|
39062
|
-
styles['--chat-opacity'] = chat.opacity.toString();
|
|
39063
|
-
// Welcome message
|
|
39064
|
-
if (chat.welcomeColor)
|
|
39065
|
-
styles['--welcome-color'] = chat.welcomeColor;
|
|
39066
|
-
// Message bubbles
|
|
39067
|
-
if (chat.enableBubbles) {
|
|
39068
|
-
if (chat.bubbleUserColor)
|
|
39069
|
-
styles['--bubble-user-color'] = chat.bubbleUserColor;
|
|
39070
|
-
if (chat.bubbleUserOpacity !== undefined)
|
|
39071
|
-
styles['--bubble-user-opacity'] = chat.bubbleUserOpacity.toString();
|
|
39072
|
-
if (chat.bubbleAssistantColor)
|
|
39073
|
-
styles['--bubble-assistant-color'] = chat.bubbleAssistantColor;
|
|
39074
|
-
if (chat.bubbleAssistantOpacity !== undefined)
|
|
39075
|
-
styles['--bubble-assistant-opacity'] = chat.bubbleAssistantOpacity.toString();
|
|
39076
|
-
if (chat.bubbleBorderWidth !== undefined)
|
|
39077
|
-
styles['--bubble-border-width'] = `${chat.bubbleBorderWidth}px`;
|
|
39078
|
-
if (chat.bubbleBorderColor)
|
|
39079
|
-
styles['--bubble-border-color'] = chat.bubbleBorderColor;
|
|
39080
|
-
if (chat.bubbleBorderOpacity !== undefined)
|
|
39081
|
-
styles['--bubble-border-opacity'] = chat.bubbleBorderOpacity.toString();
|
|
39082
|
-
}
|
|
39083
|
-
else {
|
|
39084
|
-
// Plain text mode
|
|
39085
|
-
if (chat.textColor)
|
|
39086
|
-
styles['--message-text-color'] = chat.textColor;
|
|
39087
|
-
}
|
|
39088
|
-
// ========================================================================
|
|
39089
|
-
// FOOTER APPEARANCE
|
|
39090
|
-
// ========================================================================
|
|
39091
|
-
const footer = themeConfig.footer;
|
|
39092
|
-
// Only if separate from chat
|
|
39093
|
-
if (footer.separateFromChat) {
|
|
39094
|
-
if (footer.backgroundColor)
|
|
39095
|
-
styles['--footer-background'] = footer.backgroundColor;
|
|
39096
|
-
if (footer.opacity !== undefined)
|
|
39097
|
-
styles['--footer-opacity'] = footer.opacity.toString();
|
|
39098
|
-
if (footer.borderTopWidth !== undefined)
|
|
39099
|
-
styles['--footer-border-top-width'] = `${footer.borderTopWidth}px`;
|
|
39100
|
-
if (footer.borderTopColor)
|
|
39101
|
-
styles['--footer-border-top-color'] = footer.borderTopColor;
|
|
39102
|
-
if (footer.borderTopOpacity !== undefined)
|
|
39103
|
-
styles['--footer-border-top-opacity'] = footer.borderTopOpacity.toString();
|
|
39104
|
-
}
|
|
39105
|
-
// Backdrop blur (only when floating)
|
|
39106
|
-
if (!footer.separateFromChat && footer.backdropBlur !== undefined) {
|
|
39107
|
-
styles['--footer-backdrop-blur'] = `${footer.backdropBlur}px`;
|
|
39108
|
-
}
|
|
39109
|
-
// Input field
|
|
39110
|
-
if (footer.inputBackgroundColor)
|
|
39111
|
-
styles['--input-background'] = footer.inputBackgroundColor;
|
|
39112
|
-
if (footer.inputBackgroundOpacity !== undefined)
|
|
39113
|
-
styles['--input-background-opacity'] = footer.inputBackgroundOpacity.toString();
|
|
39114
|
-
if (footer.inputBorderRadius !== undefined)
|
|
39115
|
-
styles['--input-border-radius'] = `${footer.inputBorderRadius}px`;
|
|
39116
|
-
if (footer.inputBorderWidth !== undefined)
|
|
39117
|
-
styles['--input-border-width'] = `${footer.inputBorderWidth}px`;
|
|
39118
|
-
if (footer.inputBorderColor)
|
|
39119
|
-
styles['--input-border-color'] = footer.inputBorderColor;
|
|
39120
|
-
if (footer.inputBorderOpacity !== undefined)
|
|
39121
|
-
styles['--input-border-opacity'] = footer.inputBorderOpacity.toString();
|
|
39122
|
-
if (footer.inputShadow)
|
|
39123
|
-
styles['--input-shadow'] = getShadowValue(footer.inputShadow);
|
|
39124
|
-
// Send button
|
|
39125
|
-
if (footer.buttonBackgroundColor)
|
|
39126
|
-
styles['--send-button-background'] = footer.buttonBackgroundColor;
|
|
39127
|
-
if (footer.buttonOpacity !== undefined)
|
|
39128
|
-
styles['--send-button-opacity'] = footer.buttonOpacity.toString();
|
|
39129
|
-
if (footer.buttonBorderRadius !== undefined)
|
|
39130
|
-
styles['--send-button-border-radius'] = `${footer.buttonBorderRadius}px`;
|
|
39131
|
-
if (footer.buttonBorderWidth !== undefined)
|
|
39132
|
-
styles['--send-button-border-width'] = `${footer.buttonBorderWidth}px`;
|
|
39133
|
-
if (footer.buttonBorderColor)
|
|
39134
|
-
styles['--send-button-border-color'] = footer.buttonBorderColor;
|
|
39135
|
-
if (footer.buttonBorderOpacity !== undefined)
|
|
39136
|
-
styles['--send-button-border-opacity'] = footer.buttonBorderOpacity.toString();
|
|
39137
|
-
// ========================================================================
|
|
39138
|
-
// HOVER STATES
|
|
39139
|
-
// ========================================================================
|
|
39140
|
-
const hover = themeConfig.hover;
|
|
39141
|
-
if (hover.buttonScale !== undefined)
|
|
39142
|
-
styles['--hover-button-scale'] = hover.buttonScale.toString();
|
|
39143
|
-
if (hover.buttonOpacity !== undefined)
|
|
39144
|
-
styles['--hover-button-opacity'] = hover.buttonOpacity.toString();
|
|
39145
|
-
if (hover.inputBorderColor)
|
|
39146
|
-
styles['--hover-input-border-color'] = hover.inputBorderColor;
|
|
39147
|
-
if (hover.sendButtonOpacity !== undefined)
|
|
39148
|
-
styles['--hover-send-button-opacity'] = hover.sendButtonOpacity.toString();
|
|
39149
|
-
if (hover.closeButtonOpacity !== undefined)
|
|
39150
|
-
styles['--hover-close-button-opacity'] = hover.closeButtonOpacity.toString();
|
|
39151
|
-
// ========================================================================
|
|
39152
|
-
// ACTIVE STATES
|
|
39153
|
-
// ========================================================================
|
|
39154
|
-
const active = themeConfig.active;
|
|
39155
|
-
if (active.inputBorderColor)
|
|
39156
|
-
styles['--active-input-border-color'] = active.inputBorderColor;
|
|
39157
|
-
if (active.inputShadow)
|
|
39158
|
-
styles['--active-input-shadow'] = active.inputShadow;
|
|
39159
|
-
}
|
|
39160
|
-
else {
|
|
39161
|
-
// Fallback to legacy fields if no theme config
|
|
39162
|
-
if (appearance.primaryColor)
|
|
39163
|
-
styles['--primary-color'] = appearance.primaryColor;
|
|
39164
|
-
if (appearance.borderRadius !== undefined)
|
|
39165
|
-
styles['--border-radius'] = `${appearance.borderRadius}px`;
|
|
39166
|
-
// Legacy button
|
|
39167
|
-
if (appearance.button) {
|
|
39168
|
-
const btn = appearance.button;
|
|
39169
|
-
if (btn.color)
|
|
39170
|
-
styles['--button-color'] = btn.color;
|
|
39171
|
-
if (btn.size)
|
|
39172
|
-
styles['--button-size'] = `${btn.size}px`;
|
|
39173
|
-
if (btn.borderRadius !== undefined)
|
|
39174
|
-
styles['--button-border-radius'] = `${btn.borderRadius}px`;
|
|
39175
|
-
if (btn.borderWidth !== undefined)
|
|
39176
|
-
styles['--button-border-width'] = `${btn.borderWidth}px`;
|
|
39177
|
-
if (btn.borderColor)
|
|
39178
|
-
styles['--button-border-color'] = btn.borderColor;
|
|
39179
|
-
if (btn.opacity !== undefined)
|
|
39180
|
-
styles['--button-opacity'] = btn.opacity.toString();
|
|
39181
|
-
}
|
|
39200
|
+
// Apply primary color
|
|
39201
|
+
if (appearance.primaryColor) {
|
|
39202
|
+
styles['--primary-color'] = appearance.primaryColor;
|
|
39182
39203
|
}
|
|
39204
|
+
// Note: All legacy theme system code (lightMode, darkMode, ThemeAppearanceConfig)
|
|
39205
|
+
// has been removed. The widget now uses a simplified flat appearance schema.
|
|
39206
|
+
// Theme-specific styling is handled by generateThemeStyles() using auto-detected theme.
|
|
39183
39207
|
return styles;
|
|
39184
39208
|
}
|
|
39185
39209
|
|
|
@@ -39541,19 +39565,23 @@
|
|
|
39541
39565
|
* Create a MutationObserver to watch for theme changes
|
|
39542
39566
|
*/
|
|
39543
39567
|
function createThemeObserver(element, callback) {
|
|
39568
|
+
let lastTheme = detectTheme(element);
|
|
39544
39569
|
const observer = new MutationObserver(() => {
|
|
39545
39570
|
const theme = detectTheme(element);
|
|
39546
|
-
|
|
39571
|
+
if (theme !== lastTheme) {
|
|
39572
|
+
lastTheme = theme;
|
|
39573
|
+
callback(theme);
|
|
39574
|
+
}
|
|
39547
39575
|
});
|
|
39548
39576
|
// Observe body for class/style changes (common for theme switching)
|
|
39549
39577
|
observer.observe(document.body, {
|
|
39550
39578
|
attributes: true,
|
|
39551
|
-
attributeFilter: ['class', 'style', 'data-theme'],
|
|
39579
|
+
attributeFilter: ['class', 'style', 'data-theme', 'data-bs-theme'],
|
|
39552
39580
|
});
|
|
39553
39581
|
// Also observe html element
|
|
39554
39582
|
observer.observe(document.documentElement, {
|
|
39555
39583
|
attributes: true,
|
|
39556
|
-
attributeFilter: ['class', 'style', 'data-theme'],
|
|
39584
|
+
attributeFilter: ['class', 'style', 'data-theme', 'data-bs-theme'],
|
|
39557
39585
|
});
|
|
39558
39586
|
return observer;
|
|
39559
39587
|
}
|
|
@@ -39585,7 +39613,7 @@
|
|
|
39585
39613
|
}
|
|
39586
39614
|
}
|
|
39587
39615
|
|
|
39588
|
-
var css_248z$1 = ".ai-chat-widget{--primary-color:#07f;--background-color:#fff;--text-color:#1f2937;--border-color:#e5e7eb;--user-message-bg:var(--primary-color);--user-message-text:#fff;--assistant-message-bg:#f3f4f6;--assistant-message-text:#374151;--input-bg:#fff;--input-border:#d1d5db;--shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);--shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--button-color:#07f;--button-size:56px;--button-border-radius:28px;--button-border-width:0px;--button-border-color:#07f;--button-opacity:1;--button-backdrop-blur:0px;--button-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--card-background:#fff;--card-border-radius:16px;--card-border-width:0px;--card-border-color:#e5e7eb;--card-opacity:1;--card-backdrop-blur:0px;--card-shadow:0 25px 50px -12px rgba(0,0,0,.25);--header-background:#07f;--header-text-color:#fff;--header-font-size:18px;--header-border-bottom-width:0px;--header-border-bottom-color:#e5e7eb;--header-opacity:1;--header-backdrop-blur:0px;--chat-background:#fff;--chat-opacity:1;--chat-backdrop-blur:0px;--welcome-font-size:16px;--welcome-color:#1f2937;--welcome-opacity:1;--bubble-user-color:#07f;--bubble-assistant-color:#f3f4f6;--bubble-border-radius:16px;--bubble-border-width:0px;--bubble-border-color:#e5e7eb;--bubble-opacity:1;--typing-animation-color:#f3f4f6;--typing-animation-opacity:1;--typing-animation-border-width:0px;--typing-animation-border-color:#e5e7eb;--typing-animation-border-radius:16px;--footer-background:#fff;--footer-border-top-width:1px;--footer-border-top-color:#e5e7eb;--footer-opacity:1;--footer-backdrop-blur:0px;--input-background:#fff;--input-border-radius:24px;--input-border-width:1.5px;--input-border-color:#d1d5db;--input-opacity:1;--input-shadow:0 1px 2px 0 rgba(0,0,0,.05);--send-button-background:#07f;--send-button-border-radius:20px;--send-button-border-width:0px;--send-button-border-color:#07f;--send-button-opacity:1;--hover-button-scale:1.05;--hover-button-opacity:0.9;--hover-input-border-color:#9ca3af;--hover-send-button-opacity:0.85;--hover-close-button-opacity:1;--active-input-border-color:#07f;--active-input-shadow:0 0 0 3px rgba(0,119,255,.1);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.ai-chat-widget.dark{--background-color:#001d3d;--text-color:#f9fafb;--border-color:#374151;--assistant-message-bg:#036;--assistant-message-text:#e5e7eb;--input-bg:#002855;--input-border:#374151}.ai-chat-widget.dark .ai-chat-message.system .ai-chat-message-content{background-color:#78350f;color:#fef3c7}.ai-chat-widget.dark .ai-chat-message.tool .ai-chat-message-content{background-color:#1e3a8a;color:#dbeafe}.ai-chat-widget-container{font-size:14px;line-height:1.5;position:fixed;z-index:9999}.ai-chat-widget-container.bottom-right{bottom:20px;right:20px}.ai-chat-widget-container.bottom-left{bottom:20px;left:20px}.ai-chat-widget-container.top-right{right:20px;top:20px}.ai-chat-widget-container.top-left{left:20px;top:20px}.ai-chat-button{align-items:center;backdrop-filter:blur(var(--button-backdrop-blur));-webkit-backdrop-filter:blur(var(--button-backdrop-blur));background-color:var(--button-color);border:var(--button-border-width) solid var(--button-border-color);border-radius:var(--button-border-radius);box-shadow:var(--button-shadow);color:#fff;cursor:pointer;display:flex;height:var(--button-size);justify-content:center;opacity:var(--button-opacity);transition:all .3s cubic-bezier(.4,0,.2,1);width:var(--button-size)}.ai-chat-button:hover{opacity:.9}.ai-chat-button:active{opacity:.8}.ai-chat-button-svg{height:50%;min-height:24px;min-width:24px;width:50%}.ai-chat-button-icon{font-size:1.5em;line-height:1}.ai-chat-window{border-radius:var(--card-border-radius);box-shadow:0 0 0 var(--card-border-width) var(--card-border-color-rgba,var(--card-border-color)),var(--card-shadow);display:flex;flex-direction:column;overflow:hidden;position:absolute}.ai-chat-window>*{position:relative;z-index:1}.ai-chat-window:before{backdrop-filter:blur(var(--card-backdrop-blur));-webkit-backdrop-filter:blur(var(--card-backdrop-blur));background-color:var(--card-background);border-radius:var(--card-border-radius);content:\"\";inset:0;opacity:var(--card-opacity);pointer-events:none;position:absolute;z-index:0}.ai-chat-widget-container.bottom-right .ai-chat-window{bottom:calc(var(--button-size, 60px) + 16px);right:0}.ai-chat-widget-container.bottom-left .ai-chat-window{bottom:calc(var(--button-size, 60px) + 16px);left:0}.ai-chat-widget-container.top-right .ai-chat-window{right:0;top:calc(var(--button-size, 60px) + 16px)}.ai-chat-widget-container.top-left .ai-chat-window{left:0;top:calc(var(--button-size, 60px) + 16px)}.ai-chat-button{z-index:1}.ai-chat-window{z-index:2}.ai-chat-window.size-small{height:500px;width:380px}.ai-chat-window.size-medium{height:650px;width:440px}.ai-chat-window.size-large{height:750px;width:520px}.ai-chat-logo{border-radius:50%;height:32px;object-fit:cover;width:32px}.ai-chat-messages::-webkit-scrollbar{width:6px}.ai-chat-messages::-webkit-scrollbar-track{background:transparent}.ai-chat-messages::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.ai-chat-messages::-webkit-scrollbar-thumb:hover{background:var(--input-border)}.ai-chat-message{display:flex;flex-direction:column;gap:4px}.ai-chat-message.user{align-items:flex-end}.ai-chat-message.assistant{align-items:flex-start}.ai-chat-message.system{align-items:center}.ai-chat-message.tool{align-items:flex-start}.ai-chat-message-content{word-wrap:break-word;border:var(--bubble-border-width) solid var(--bubble-border-color);border-radius:var(--bubble-border-radius);font-size:15px;line-height:1.6;max-width:80%;opacity:var(--bubble-opacity);padding:12px 16px}.ai-chat-message.user .ai-chat-message-content{background-color:var(--bubble-user-color);border-bottom-right-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.1);color:var(--user-message-text)}.ai-chat-message.assistant .ai-chat-message-content{background-color:var(--bubble-assistant-color,#f3f4f6);border:1px solid var(--bubble-border-color,rgba(0,0,0,.08));border-radius:var(--bubble-border-radius,16px);border-bottom-left-radius:4px;box-shadow:none;color:var(--assistant-message-text);max-width:85%;padding:12px 16px}.ai-chat-message.assistant .ai-chat-message-content p{margin:0 0 12px}.ai-chat-message.assistant .ai-chat-message-content p:last-child{margin-bottom:0}.ai-chat-message.assistant .ai-chat-message-content ol,.ai-chat-message.assistant .ai-chat-message-content ul{margin:8px 0 12px;padding-left:24px}.ai-chat-message.assistant .ai-chat-message-content li{line-height:1.5;margin:6px 0}.ai-chat-message.assistant .ai-chat-message-content li::marker{color:var(--primary-color,#07f)}.ai-chat-message.assistant .ai-chat-message-content ol li::marker{font-weight:600}.ai-chat-message.assistant .ai-chat-message-content strong{font-weight:600}.ai-chat-message.assistant .ai-chat-message-content em{font-style:italic}.ai-chat-message.assistant .ai-chat-message-content code{background-color:rgba(0,0,0,.06);border-radius:4px;font-family:SF Mono,Consolas,Monaco,monospace;font-size:.9em;padding:2px 6px}.ai-chat-widget.dark .ai-chat-message.assistant .ai-chat-message-content code{background-color:hsla(0,0%,100%,.1)}.ai-chat-message.assistant .ai-chat-message-content pre{background-color:rgba(0,0,0,.06);border-radius:8px;margin:8px 0 12px;overflow-x:auto;padding:12px}.ai-chat-widget.dark .ai-chat-message.assistant .ai-chat-message-content pre{background-color:hsla(0,0%,100%,.08)}.ai-chat-message.assistant .ai-chat-message-content pre code{background-color:transparent;border-radius:0;padding:0}.ai-chat-message.assistant .ai-chat-message-content blockquote{border-left:3px solid var(--primary-color,#07f);color:var(--text-muted,#6b7280);margin:8px 0 12px;padding:4px 0 4px 12px}.ai-chat-message.assistant .ai-chat-message-content a{color:var(--primary-color,#07f);text-decoration:underline}.ai-chat-message.assistant .ai-chat-message-content a:hover{opacity:.8}.ai-chat-message.assistant .ai-chat-message-content h1,.ai-chat-message.assistant .ai-chat-message-content h2,.ai-chat-message.assistant .ai-chat-message-content h3,.ai-chat-message.assistant .ai-chat-message-content h4,.ai-chat-message.assistant .ai-chat-message-content h5,.ai-chat-message.assistant .ai-chat-message-content h6{font-weight:600;line-height:1.3;margin:16px 0 8px}.ai-chat-message.assistant .ai-chat-message-content h1:first-child,.ai-chat-message.assistant .ai-chat-message-content h2:first-child,.ai-chat-message.assistant .ai-chat-message-content h3:first-child{margin-top:0}.ai-chat-message.assistant .ai-chat-message-content hr{border:none;border-top:1px solid var(--border-color,#e5e7eb);margin:12px 0}.ai-chat-message.system .ai-chat-message-content{background-color:#fef3c7;border-radius:8px;color:#92400e;font-size:12px;font-style:italic;max-width:90%;text-align:center}.ai-chat-message.tool .ai-chat-message-content{background-color:#dbeafe;border-bottom-left-radius:4px;color:#1e40af;font-family:Courier New,monospace;font-size:13px}.ai-chat-tool-indicators{display:flex;gap:6px;margin-top:6px}.tool-indicator{align-items:center;background:#dbeafe;border-radius:50%;color:#1e40af;display:inline-flex;height:18px;justify-content:center;overflow:hidden;position:relative;width:18px}.tool-indicator .icon{font-size:12px;line-height:1;z-index:1}.tool-indicator.started:after{animation:ai-spin 1s linear infinite;border:2px solid rgba(30,64,175,.25);border-radius:50%;border-top-color:#1e40af;content:\"\";inset:0;position:absolute}@keyframes ai-spin{to{transform:rotate(1turn)}}.ai-chat-tool-message{align-items:center;background:rgba(16,185,129,.1);border:1px solid rgba(16,185,129,.2);border-radius:20px;color:#059669;display:inline-flex;gap:8px;padding:8px 14px}.ai-chat-widget.dark .ai-chat-tool-message{background:rgba(16,185,129,.15);border-color:rgba(16,185,129,.25);color:#34d399}.tool-finished{align-items:center;display:inline-flex;font-size:14px;justify-content:center}.tool-finished .tool-icon{display:none}.tool-finished .tool-check{font-size:14px;font-weight:700}.tool-name{font-size:13px;font-weight:500}.ai-chat-message-timestamp{color:rgba(0,0,0,.6);filter:invert(1) grayscale(1) contrast(1.2);mix-blend-mode:difference;padding:0 4px}.ai-chat-welcome{align-items:center;color:var(--welcome-color);display:flex;flex-direction:column;justify-content:center;min-height:200px;opacity:var(--welcome-opacity);padding:60px 32px 40px;text-align:center}.ai-chat-welcome-title{color:var(--primary-color);font-size:28px;font-weight:700;letter-spacing:-.03em;margin-bottom:12px}.ai-chat-welcome-text{color:var(--assistant-message-text);font-size:16px;line-height:1.6;max-width:280px;opacity:.7}.ai-chat-typing{align-items:center;background-color:var(--assistant-message-bg);border-radius:12px;border-bottom-left-radius:4px;display:flex;gap:4px;max-width:80px;padding:10px 14px}.ai-chat-typing-dot{animation:typingBounce 1.4s infinite;background-color:#9ca3af;border-radius:50%;height:8px;width:8px}.ai-chat-typing-dot:nth-child(2){animation-delay:.2s}.ai-chat-typing-dot:nth-child(3){animation-delay:.4s}@keyframes typingBounce{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-8px)}}.ai-chat-file-button{align-items:center;background:none;border:none;border-radius:6px;color:var(--text-color);cursor:pointer;display:flex;justify-content:center;padding:8px;transition:background-color .2s}.ai-chat-file-button:hover:not(:disabled){background-color:rgba(0,0,0,.05)}.ai-chat-file-button:disabled{cursor:not-allowed;opacity:.5}.ai-chat-file-list{display:flex;flex-wrap:wrap;gap:8px;padding:8px 12px}.ai-chat-file-item{align-items:center;background-color:rgba(0,0,0,.05);border-radius:6px;display:flex;font-size:12px;gap:8px;padding:6px 10px}.ai-chat-file-extension{background-color:var(--primary-color);border-radius:3px;color:#fff;display:inline-block;font-size:10px;font-weight:600;min-width:40px;padding:2px 6px;text-align:center;text-transform:uppercase}.ai-chat-file-info{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}.ai-chat-file-name{font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-chat-file-size{color:var(--text-muted);font-size:10px;opacity:.7}.ai-chat-file-remove{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;justify-content:center;opacity:.5;padding:4px;transition:opacity .15s ease}.ai-chat-file-remove:hover{opacity:1}.ai-chat-message-attachments{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.ai-chat-message-attachment{align-items:center;background-color:rgba(0,0,0,.08);border-radius:4px;display:inline-flex;font-size:11px;gap:4px;padding:3px 8px}.ai-chat-attachment-icon{font-size:12px}.ai-chat-attachment-ext{background-color:var(--primary-color);border-radius:2px;color:#fff;display:inline-block;font-size:9px;font-weight:600;padding:1px 4px;text-transform:uppercase}.ai-chat-attachment-name{max-width:120px;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-chat-sources{background-color:rgba(0,0,0,.02);border-radius:6px;font-size:12px;margin-top:8px;overflow:hidden}.ai-chat-sources-toggle{align-items:center;background:none;border:none;cursor:pointer;display:flex;gap:6px;padding:8px 10px;text-align:left;transition:background-color .2s;width:100%}.ai-chat-sources-toggle:hover{background-color:rgba(0,0,0,.03)}.ai-chat-sources-icon{color:var(--text-muted);font-size:10px;transition:transform .2s}.ai-chat-sources-title{color:var(--text-color);flex:1;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}.ai-chat-source-item{border-top:1px solid rgba(0,0,0,.05);color:#6b7280;display:flex;gap:8px;padding:8px 10px}.ai-chat-source-item:last-child{border-bottom:none}.ai-chat-source-number{color:var(--primary-color);flex-shrink:0;font-weight:600}.ai-chat-source-details{display:flex;flex:1;flex-direction:column;gap:4px}.ai-chat-source-score{color:#9ca3af;font-size:11px}.ai-chat-source-content{color:#6b7280;font-size:11px;font-style:italic;line-height:1.4}.ai-chat-source-metadata{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}.ai-chat-source-meta-item{background-color:rgba(0,0,0,.05);border-radius:3px;color:#6b7280;font-size:10px;padding:2px 6px}.ai-chat-message-meta{align-items:center;display:inline-flex;gap:6px;height:20px}.ai-chat-message-timestamp{color:#71717a;font-size:11px;line-height:1}.ai-chat-feedback{gap:0}.ai-chat-feedback,.ai-chat-feedback-button{align-items:center;display:inline-flex;height:20px}.ai-chat-feedback-button{background:none!important;border:none;border-radius:0;color:#71717a;cursor:pointer;justify-content:center;padding:0 4px;transition:color .15s ease}.ai-chat-feedback-button:hover:not(:disabled){background:none!important;color:#52525b}.ai-chat-feedback-button:active:not(:disabled){opacity:.7}.ai-chat-feedback-button:disabled{cursor:not-allowed;opacity:.4}.ai-chat-feedback-button.active{background:none!important;color:var(--primary-color,#07f)}.ai-chat-feedback-submitted{align-items:center;animation:feedbackMorph .3s cubic-bezier(.34,1.56,.64,1);display:flex;gap:6px}.ai-chat-feedback-checkmark{animation:checkmarkPop .3s cubic-bezier(.34,1.56,.64,1);color:#10b981;font-size:16px;font-weight:700}.ai-chat-feedback-text{animation:textSlideIn .3s ease;color:#10b981;font-size:13px;font-weight:500}@keyframes feedbackMorph{0%{opacity:.5;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes checkmarkPop{0%{opacity:0;transform:scale(0) rotate(-45deg)}50%{transform:scale(1.3) rotate(0deg)}to{opacity:1;transform:scale(1) rotate(0deg)}}@keyframes textSlideIn{0%{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:translateX(0)}}.ai-chat-error{align-items:flex-start;background-color:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:12px;color:#ef4444;display:flex;font-size:14px;font-weight:500;gap:10px;line-height:1.5;margin:8px 16px;padding:12px 16px}.ai-chat-widget.dark .ai-chat-error{background-color:rgba(239,68,68,.15);border-color:rgba(239,68,68,.25);color:#fca5a5}.ai-chat-error:before{align-items:center;background:rgba(239,68,68,.2);border-radius:50%;content:\"⚠\";display:flex;flex-shrink:0;font-size:14px;font-weight:700;height:20px;justify-content:center;width:20px}.ai-chat-widget.dark .ai-chat-error:before{background:rgba(239,68,68,.25)}.ai-chat-warning{background-color:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.2);border-radius:12px;color:#d97706;font-size:13px;margin:8px 16px;padding:12px 16px}.ai-chat-widget.dark .ai-chat-warning{background-color:rgba(245,158,11,.15);border-color:rgba(245,158,11,.25);color:#fbbf24}.ai-chat-suggested-questions{bottom:80px;left:0;padding:0 20px 16px;position:absolute;right:0;z-index:5}.ai-chat-suggested-questions-list{display:flex;flex-direction:column;gap:8px}.ai-chat-suggested-question{align-items:center;background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.04);color:#374151;cursor:pointer;display:flex;font-size:14px;font-weight:500;gap:12px;justify-content:space-between;padding:14px 16px;text-align:left;transition:all .15s ease;width:100%}.ai-chat-suggested-question:hover{background:#f9fafb;border-color:rgba(0,0,0,.12);box-shadow:0 2px 8px rgba(0,0,0,.06)}.ai-chat-suggested-question:active{transform:scale(.98)}.ai-chat-suggested-question-text{flex:1;line-height:1.4}.ai-chat-suggested-question-icon{color:var(--primary-color,#07f);flex-shrink:0;opacity:.7;transition:transform .15s ease,opacity .15s ease}.ai-chat-suggested-question:hover .ai-chat-suggested-question-icon{opacity:1;transform:translateX(3px)}@media (max-width:480px){.ai-chat-window{border-radius:0!important;bottom:0!important;height:100%!important;left:0!important;position:fixed!important;right:0!important;top:0!important;width:100%!important}.ai-chat-widget-container{bottom:20px!important;right:20px!important}.ai-chat-suggested-question{font-size:13px;padding:9px 10px}}.ai-chat-action-approval{background:linear-gradient(135deg,#07f,#001d3d);border-radius:16px;box-shadow:0 4px 12px rgba(0,119,255,.3);color:#fff;margin:16px;padding:16px}.ai-chat-action-approval-content{align-items:flex-start;display:flex;gap:12px;margin-bottom:16px}.ai-chat-action-approval-icon{align-items:center;background:hsla(0,0%,100%,.2);border-radius:8px;display:flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.ai-chat-action-approval-text{flex:1}.ai-chat-action-approval-title{font-size:15px;font-weight:600;margin-bottom:4px}.ai-chat-action-approval-description{font-size:13px;line-height:1.4;opacity:.95}.ai-chat-action-approval-buttons{display:flex;gap:8px;justify-content:flex-end}.ai-chat-action-button{align-items:center;border:none;border-radius:8px;cursor:pointer;display:flex;font-family:inherit;font-size:14px;font-weight:500;gap:6px;padding:8px 16px;transition:all .2s ease}.ai-chat-action-button:disabled{cursor:not-allowed;opacity:.6}.ai-chat-action-button-reject{background:hsla(0,0%,100%,.2);color:#fff}.ai-chat-action-button-reject:hover:not(:disabled){background:hsla(0,0%,100%,.3)}.ai-chat-action-button-approve{background:#fff;color:#07f}.ai-chat-action-button-approve:hover:not(:disabled){background:#f0f0f0;box-shadow:0 2px 8px rgba(0,0,0,.15);transform:translateY(-1px)}.ai-chat-action-spinner{animation:ai-chat-spin .6s linear infinite;border:2px solid rgba(0,119,255,.3);border-radius:50%;border-top-color:#07f;display:inline-block;height:14px;width:14px}@keyframes ai-chat-spin{to{transform:rotate(1turn)}}";
|
|
39616
|
+
var css_248z$1 = ".ai-chat-widget{--primary-color:#07f;--background-color:#fff;--text-color:#1f2937;--border-color:#e5e7eb;--user-message-bg:var(--primary-color);--user-message-text:#fff;--assistant-message-bg:#f3f4f6;--assistant-message-text:#374151;--input-bg:#fff;--input-border:#d1d5db;--shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);--shadow-lg:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--button-color:#07f;--button-size:56px;--button-border-radius:28px;--button-border-width:0px;--button-border-color:#07f;--button-opacity:1;--button-backdrop-blur:0px;--button-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);--card-background:#fff;--card-border-radius:16px;--card-border-width:0px;--card-border-color:#e5e7eb;--card-opacity:1;--card-backdrop-blur:0px;--card-shadow:0 25px 50px -12px rgba(0,0,0,.25);--header-background:#07f;--header-text-color:#fff;--header-font-size:18px;--header-border-bottom-width:0px;--header-border-bottom-color:#e5e7eb;--header-opacity:1;--header-backdrop-blur:0px;--chat-background:#fff;--chat-opacity:1;--chat-backdrop-blur:0px;--welcome-font-size:16px;--welcome-color:#1f2937;--welcome-opacity:1;--bubble-user-color:#07f;--bubble-assistant-color:#f3f4f6;--bubble-border-radius:16px;--bubble-border-width:0px;--bubble-border-color:#e5e7eb;--bubble-opacity:1;--typing-animation-color:#f3f4f6;--typing-animation-opacity:1;--typing-animation-border-width:0px;--typing-animation-border-color:#e5e7eb;--typing-animation-border-radius:16px;--footer-background:#fff;--footer-border-top-width:1px;--footer-border-top-color:#e5e7eb;--footer-opacity:1;--footer-backdrop-blur:0px;--input-background:#fff;--input-border-radius:24px;--input-border-width:1.5px;--input-border-color:#d1d5db;--input-opacity:1;--input-shadow:0 1px 2px 0 rgba(0,0,0,.05);--send-button-background:#07f;--send-button-border-radius:20px;--send-button-border-width:0px;--send-button-border-color:#07f;--send-button-opacity:1;--hover-button-scale:1.05;--hover-button-opacity:0.9;--hover-input-border-color:#9ca3af;--hover-send-button-opacity:0.85;--hover-close-button-opacity:1;--active-input-border-color:#07f;--active-input-shadow:0 0 0 3px rgba(0,119,255,.1);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.ai-chat-widget.dark{--background-color:#001d3d;--text-color:#f9fafb;--border-color:#374151;--assistant-message-bg:#036;--assistant-message-text:#e5e7eb;--input-bg:#002855;--input-border:#374151}.ai-chat-widget.dark .ai-chat-message.system .ai-chat-message-content{background-color:#78350f;color:#fef3c7}.ai-chat-widget.dark .ai-chat-message.tool .ai-chat-message-content{background-color:#1e3a8a;color:#dbeafe}.ai-chat-widget-container{font-size:14px;line-height:1.5;position:fixed;z-index:9999}.ai-chat-widget-container.bottom-right{bottom:20px;right:20px}.ai-chat-widget-container.bottom-left{bottom:20px;left:20px}.ai-chat-widget-container.top-right{right:20px;top:20px}.ai-chat-widget-container.top-left{left:20px;top:20px}.ai-chat-button{align-items:center;backdrop-filter:blur(var(--button-backdrop-blur));-webkit-backdrop-filter:blur(var(--button-backdrop-blur));background-color:var(--button-color);border:var(--button-border-width) solid var(--button-border-color);border-radius:var(--button-border-radius);box-shadow:var(--button-shadow);color:#fff;cursor:pointer;display:flex;height:var(--button-size);justify-content:center;opacity:var(--button-opacity);transition:all .3s cubic-bezier(.4,0,.2,1);width:var(--button-size)}.ai-chat-button:hover{opacity:.9}.ai-chat-button:active{opacity:.8}.ai-chat-button-svg{height:50%;min-height:24px;min-width:24px;width:50%}.ai-chat-button-icon{font-size:1.5em;line-height:1}.ai-chat-window{border-radius:var(--card-border-radius);box-shadow:0 0 0 var(--card-border-width) var(--card-border-color-rgba,var(--card-border-color)),var(--card-shadow);display:flex;flex-direction:column;overflow:hidden;position:absolute}.ai-chat-window>*{position:relative;z-index:1}.ai-chat-window:before{backdrop-filter:blur(var(--card-backdrop-blur));-webkit-backdrop-filter:blur(var(--card-backdrop-blur));background-color:var(--card-background);border-radius:var(--card-border-radius);content:\"\";inset:0;opacity:var(--card-opacity);pointer-events:none;position:absolute;z-index:0}.ai-chat-widget-container.bottom-right .ai-chat-window{bottom:calc(var(--button-size, 60px) + 16px);right:0}.ai-chat-widget-container.bottom-left .ai-chat-window{bottom:calc(var(--button-size, 60px) + 16px);left:0}.ai-chat-widget-container.top-right .ai-chat-window{right:0;top:calc(var(--button-size, 60px) + 16px)}.ai-chat-widget-container.top-left .ai-chat-window{left:0;top:calc(var(--button-size, 60px) + 16px)}.ai-chat-button{z-index:1}.ai-chat-window{z-index:2}.ai-chat-window.size-small{height:500px;width:380px}.ai-chat-window.size-medium{height:650px;width:440px}.ai-chat-window.size-large{height:750px;width:520px}.ai-chat-logo{border-radius:50%;height:32px;object-fit:cover;width:32px}.ai-chat-messages::-webkit-scrollbar{width:6px}.ai-chat-messages::-webkit-scrollbar-track{background:transparent}.ai-chat-messages::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.ai-chat-messages::-webkit-scrollbar-thumb:hover{background:var(--input-border)}.ai-chat-message{display:flex;flex-direction:column;gap:4px}.ai-chat-message.user{align-items:flex-end}.ai-chat-message.assistant{align-items:flex-start}.ai-chat-message.system{align-items:center}.ai-chat-message.tool{align-items:flex-start}.ai-chat-message-content{word-wrap:break-word;border:var(--bubble-border-width) solid var(--bubble-border-color);border-radius:var(--bubble-border-radius);font-size:15px;line-height:1.6;max-width:80%;opacity:var(--bubble-opacity);padding:12px 16px}.ai-chat-message.user .ai-chat-message-content{background-color:var(--bubble-user-color);border-bottom-right-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.1);color:var(--user-message-text)}.ai-chat-message.assistant .ai-chat-message-content{background-color:var(--bubble-assistant-color,#f3f4f6);border:1px solid var(--bubble-border-color,rgba(0,0,0,.08));border-radius:var(--bubble-border-radius,16px);border-bottom-left-radius:4px;box-shadow:none;color:var(--assistant-message-text);max-width:85%;padding:12px 16px}.ai-chat-message.assistant .ai-chat-message-content p{margin:0 0 12px}.ai-chat-message.assistant .ai-chat-message-content p:last-child{margin-bottom:0}.ai-chat-message.assistant .ai-chat-message-content ol,.ai-chat-message.assistant .ai-chat-message-content ul{margin:8px 0 12px;padding-left:24px}.ai-chat-message.assistant .ai-chat-message-content li{line-height:1.5;margin:6px 0}.ai-chat-message.assistant .ai-chat-message-content li::marker{color:var(--primary-color,#07f)}.ai-chat-message.assistant .ai-chat-message-content ol li::marker{font-weight:600}.ai-chat-message.assistant .ai-chat-message-content strong{font-weight:600}.ai-chat-message.assistant .ai-chat-message-content em{font-style:italic}.ai-chat-message.assistant .ai-chat-message-content code{background-color:rgba(0,0,0,.06);border-radius:4px;font-family:SF Mono,Consolas,Monaco,monospace;font-size:.9em;padding:2px 6px}.ai-chat-widget.dark .ai-chat-message.assistant .ai-chat-message-content code{background-color:hsla(0,0%,100%,.1)}.ai-chat-message.assistant .ai-chat-message-content pre{background-color:rgba(0,0,0,.06);border-radius:8px;margin:8px 0 12px;overflow-x:auto;padding:12px}.ai-chat-widget.dark .ai-chat-message.assistant .ai-chat-message-content pre{background-color:hsla(0,0%,100%,.08)}.ai-chat-message.assistant .ai-chat-message-content pre code{background-color:transparent;border-radius:0;padding:0}.ai-chat-message.assistant .ai-chat-message-content blockquote{border-left:3px solid var(--primary-color,#07f);color:var(--text-muted,#6b7280);margin:8px 0 12px;padding:4px 0 4px 12px}.ai-chat-message.assistant .ai-chat-message-content a{color:var(--primary-color,#07f);text-decoration:underline}.ai-chat-message.assistant .ai-chat-message-content a:hover{opacity:.8}.ai-chat-message.assistant .ai-chat-message-content h1,.ai-chat-message.assistant .ai-chat-message-content h2,.ai-chat-message.assistant .ai-chat-message-content h3,.ai-chat-message.assistant .ai-chat-message-content h4,.ai-chat-message.assistant .ai-chat-message-content h5,.ai-chat-message.assistant .ai-chat-message-content h6{font-weight:600;line-height:1.3;margin:16px 0 8px}.ai-chat-message.assistant .ai-chat-message-content h1:first-child,.ai-chat-message.assistant .ai-chat-message-content h2:first-child,.ai-chat-message.assistant .ai-chat-message-content h3:first-child{margin-top:0}.ai-chat-message.assistant .ai-chat-message-content hr{border:none;border-top:1px solid var(--border-color,#e5e7eb);margin:12px 0}.ai-chat-message.system .ai-chat-message-content{background-color:#fef3c7;border-radius:8px;color:#92400e;font-size:12px;font-style:italic;max-width:90%;text-align:center}.ai-chat-message.tool .ai-chat-message-content{background-color:#dbeafe;border-bottom-left-radius:4px;color:#1e40af;font-family:Courier New,monospace;font-size:13px}.ai-chat-tool-indicators{display:flex;gap:6px;margin-top:6px}.tool-indicator{align-items:center;background:#dbeafe;border-radius:50%;color:#1e40af;display:inline-flex;height:18px;justify-content:center;overflow:hidden;position:relative;width:18px}.tool-indicator .icon{font-size:12px;line-height:1;z-index:1}.tool-indicator.started:after{animation:ai-spin 1s linear infinite;border:2px solid rgba(30,64,175,.25);border-radius:50%;border-top-color:#1e40af;content:\"\";inset:0;position:absolute}@keyframes ai-spin{to{transform:rotate(1turn)}}.ai-chat-tool-message{align-items:center;background:rgba(16,185,129,.1);border:1px solid rgba(16,185,129,.2);border-radius:20px;color:#059669;display:inline-flex;gap:8px;padding:8px 14px}.ai-chat-widget.dark .ai-chat-tool-message{background:rgba(16,185,129,.15);border-color:rgba(16,185,129,.25);color:#34d399}.tool-finished{align-items:center;display:inline-flex;font-size:14px;justify-content:center}.tool-finished .tool-icon{display:none}.tool-finished .tool-check{font-size:14px;font-weight:700}.tool-name{font-size:13px;font-weight:500}.ai-chat-message-timestamp{color:rgba(0,0,0,.6);filter:invert(1) grayscale(1) contrast(1.2);mix-blend-mode:difference;padding:0 4px}.ai-chat-welcome{align-items:center;color:var(--welcome-color);display:flex;flex-direction:column;justify-content:center;min-height:200px;opacity:var(--welcome-opacity);padding:60px 32px 40px;text-align:center}.ai-chat-welcome-title{color:var(--primary-color);font-size:28px;font-weight:700;letter-spacing:-.03em;margin-bottom:12px}.ai-chat-welcome-text{color:var(--assistant-message-text);font-size:16px;line-height:1.6;max-width:280px;opacity:.7}.ai-chat-typing{align-items:center;background-color:var(--assistant-message-bg);border-radius:12px;border-bottom-left-radius:4px;display:flex;gap:4px;max-width:80px;padding:10px 14px}.ai-chat-typing-dot{animation:typingBounce 1.4s infinite;background-color:#9ca3af;border-radius:50%;height:8px;width:8px}.ai-chat-typing-dot:nth-child(2){animation-delay:.2s}.ai-chat-typing-dot:nth-child(3){animation-delay:.4s}@keyframes typingBounce{0%,60%,to{transform:translateY(0)}30%{transform:translateY(-8px)}}.ai-chat-file-button{align-items:center;background:none;border:none;border-radius:6px;color:var(--text-color);cursor:pointer;display:flex;justify-content:center;padding:8px;transition:background-color .2s}.ai-chat-file-button:hover:not(:disabled){background-color:rgba(0,0,0,.05)}.ai-chat-file-button:disabled{cursor:not-allowed;opacity:.5}.ai-chat-file-list{display:flex;flex-wrap:wrap;gap:8px;padding:8px 12px}.ai-chat-file-item{align-items:center;background-color:rgba(0,0,0,.05);border-radius:6px;display:flex;font-size:12px;gap:8px;padding:6px 10px}.ai-chat-file-extension{background-color:var(--primary-color);border-radius:3px;color:#fff;display:inline-block;font-size:10px;font-weight:600;min-width:40px;padding:2px 6px;text-align:center;text-transform:uppercase}.ai-chat-file-info{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}.ai-chat-file-name{font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-chat-file-size{color:var(--text-muted);font-size:10px;opacity:.7}.ai-chat-file-remove{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;justify-content:center;opacity:.5;padding:4px;transition:opacity .15s ease}.ai-chat-file-remove:hover{opacity:1}.ai-chat-message-attachments{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.ai-chat-message-attachment{align-items:center;background-color:rgba(0,0,0,.08);border-radius:4px;display:inline-flex;font-size:11px;gap:4px;padding:3px 8px}.ai-chat-attachment-icon{font-size:12px}.ai-chat-attachment-ext{background-color:var(--primary-color);border-radius:2px;color:#fff;display:inline-block;font-size:9px;font-weight:600;padding:1px 4px;text-transform:uppercase}.ai-chat-attachment-name{max-width:120px;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-chat-sources{background-color:rgba(0,0,0,.02);border-radius:6px;font-size:12px;margin-top:8px;overflow:hidden}.ai-chat-sources-toggle{align-items:center;background:none;border:none;cursor:pointer;display:flex;gap:6px;padding:8px 10px;text-align:left;transition:background-color .2s;width:100%}.ai-chat-sources-toggle:hover{background-color:rgba(0,0,0,.03)}.ai-chat-sources-icon{color:var(--text-muted);font-size:10px;transition:transform .2s}.ai-chat-sources-title{color:var(--text-color);flex:1;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}.ai-chat-source-item{border-top:1px solid rgba(0,0,0,.05);color:#6b7280;display:flex;gap:8px;padding:8px 10px}.ai-chat-source-item:last-child{border-bottom:none}.ai-chat-source-number{color:var(--primary-color);flex-shrink:0;font-weight:600}.ai-chat-source-details{display:flex;flex:1;flex-direction:column;gap:4px}.ai-chat-source-score{color:#9ca3af;font-size:11px}.ai-chat-source-content{color:#6b7280;font-size:11px;font-style:italic;line-height:1.4}.ai-chat-source-metadata{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}.ai-chat-source-meta-item{background-color:rgba(0,0,0,.05);border-radius:3px;color:#6b7280;font-size:10px;padding:2px 6px}.ai-chat-message-meta{align-items:center;display:inline-flex;gap:6px;height:20px}.ai-chat-message-timestamp{color:#71717a;font-size:11px;line-height:1}.ai-chat-feedback{gap:0}.ai-chat-feedback,.ai-chat-feedback-button{align-items:center;display:inline-flex;height:20px}.ai-chat-feedback-button{background:none!important;border:none;border-radius:0;color:#71717a;cursor:pointer;justify-content:center;padding:0 4px;transition:color .15s ease}.ai-chat-feedback-button:hover:not(:disabled){background:none!important;color:#52525b}.ai-chat-feedback-button:active:not(:disabled){opacity:.7}.ai-chat-feedback-button:disabled{cursor:not-allowed;opacity:.4}.ai-chat-feedback-button.active{background:none!important;color:var(--primary-color,#07f)}.ai-chat-feedback-submitted{align-items:center;animation:feedbackMorph .3s cubic-bezier(.34,1.56,.64,1);display:flex;gap:6px}.ai-chat-feedback-checkmark{animation:checkmarkPop .3s cubic-bezier(.34,1.56,.64,1);color:#10b981;font-size:16px;font-weight:700}.ai-chat-feedback-text{animation:textSlideIn .3s ease;color:#10b981;font-size:13px;font-weight:500}@keyframes feedbackMorph{0%{opacity:.5;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes checkmarkPop{0%{opacity:0;transform:scale(0) rotate(-45deg)}50%{transform:scale(1.3) rotate(0deg)}to{opacity:1;transform:scale(1) rotate(0deg)}}@keyframes textSlideIn{0%{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:translateX(0)}}.ai-chat-error{align-items:flex-start;background-color:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);border-radius:12px;color:#ef4444;display:flex;font-size:14px;font-weight:500;gap:10px;line-height:1.5;margin:8px 16px;padding:12px 16px}.ai-chat-widget.dark .ai-chat-error{background-color:rgba(239,68,68,.15);border-color:rgba(239,68,68,.25);color:#fca5a5}.ai-chat-error:before{align-items:center;background:rgba(239,68,68,.2);border-radius:50%;content:\"⚠\";display:flex;flex-shrink:0;font-size:14px;font-weight:700;height:20px;justify-content:center;width:20px}.ai-chat-widget.dark .ai-chat-error:before{background:rgba(239,68,68,.25)}.ai-chat-warning{background-color:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.2);border-radius:12px;color:#d97706;font-size:13px;margin:8px 16px;padding:12px 16px}.ai-chat-widget.dark .ai-chat-warning{background-color:rgba(245,158,11,.15);border-color:rgba(245,158,11,.25);color:#fbbf24}.ai-chat-suggested-questions{bottom:80px;left:0;padding:0 20px 16px;position:absolute;right:0;z-index:5}.ai-chat-suggested-questions-list{display:flex;flex-direction:column;gap:8px}.ai-chat-suggested-question{align-items:center;background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.04);color:#374151;cursor:pointer;display:flex;font-size:14px;font-weight:500;gap:12px;justify-content:space-between;padding:14px 16px;text-align:left;transition:all .15s ease;width:100%}.ai-chat-suggested-question:hover{background:#f9fafb;border-color:rgba(0,0,0,.12);box-shadow:0 2px 8px rgba(0,0,0,.06)}.ai-chat-suggested-question:active{transform:scale(.98)}.ai-chat-suggested-question-text{flex:1;line-height:1.4}.ai-chat-suggested-question-icon{color:var(--primary-color,#07f);flex-shrink:0;opacity:.7;transition:transform .15s ease,opacity .15s ease}.ai-chat-suggested-question:hover .ai-chat-suggested-question-icon{opacity:1;transform:translateX(3px)}@media (max-width:480px){.ai-chat-window{border-radius:0!important;bottom:0!important;height:100%!important;left:0!important;position:fixed!important;right:0!important;top:0!important;width:100%!important}.ai-chat-widget-container{bottom:20px!important;right:20px!important}.ai-chat-suggested-question{font-size:13px;padding:9px 10px}}.ai-chat-action-approval{background:linear-gradient(135deg,#07f,#001d3d);border-radius:16px;box-shadow:0 4px 12px rgba(0,119,255,.3);color:#fff;margin:16px;padding:16px}.ai-chat-action-approval-content{align-items:flex-start;display:flex;gap:12px;margin-bottom:16px}.ai-chat-action-approval-icon{align-items:center;background:hsla(0,0%,100%,.2);border-radius:8px;display:flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.ai-chat-action-approval-text{flex:1}.ai-chat-action-approval-title{font-size:15px;font-weight:600;margin-bottom:4px}.ai-chat-action-approval-description{font-size:13px;line-height:1.4;opacity:.95}.ai-chat-action-approval-buttons{display:flex;gap:8px;justify-content:flex-end}.ai-chat-action-button{align-items:center;border:none;border-radius:8px;cursor:pointer;display:flex;font-family:inherit;font-size:14px;font-weight:500;gap:6px;padding:8px 16px;transition:all .2s ease}.ai-chat-action-button:disabled{cursor:not-allowed;opacity:.6}.ai-chat-action-button-reject{background:hsla(0,0%,100%,.2);color:#fff}.ai-chat-action-button-reject:hover:not(:disabled){background:hsla(0,0%,100%,.3)}.ai-chat-action-button-approve{background:#fff;color:#07f}.ai-chat-action-button-approve:hover:not(:disabled){background:#f0f0f0;box-shadow:0 2px 8px rgba(0,0,0,.15);transform:translateY(-1px)}.ai-chat-action-spinner{animation:ai-chat-spin .6s linear infinite;border:2px solid rgba(0,119,255,.3);border-radius:50%;border-top-color:#07f;display:inline-block;height:14px;width:14px}@keyframes ai-chat-spin{to{transform:rotate(1turn)}}.ai-chat-header-actions{align-items:center;display:flex;gap:4px}.ai-chat-header-button{align-items:center;background:transparent;border:none;border-radius:8px;color:var(--header-text-color,#fff);cursor:pointer;display:flex;height:32px;justify-content:center;opacity:.8;transition:background-color .15s ease;width:32px}.ai-chat-header-button:hover{background:hsla(0,0%,100%,.15);opacity:1}.ai-chat-header-button svg{height:18px;width:18px}.ai-chat-history-panel{background:var(--chat-background,#fff);display:flex;flex:1;flex-direction:column;overflow:hidden}.ai-chat-history-empty,.ai-chat-history-loading{align-items:center;color:var(--text-color,#6b7280);display:flex;flex:1;font-size:14px;justify-content:center;padding:24px;text-align:center}.ai-chat-history-list{flex:1;overflow-y:auto;padding:8px}.ai-chat-history-item{align-items:stretch;background:transparent;border:none;border-bottom:1px solid var(--border-color,rgba(0,0,0,.06));border-radius:0;cursor:pointer;display:flex;flex-direction:column;padding:12px 16px;text-align:left;transition:background-color .12s ease;width:100%}.ai-chat-history-item:last-child{border-bottom:none}.ai-chat-history-item:hover{background:rgba(0,0,0,.03)}.ai-chat-widget.dark .ai-chat-history-item:hover{background:hsla(0,0%,100%,.05)}.ai-chat-history-item.active{background:rgba(0,0,0,.05)}.ai-chat-widget.dark .ai-chat-history-item.active{background:hsla(0,0%,100%,.08)}.ai-chat-history-item.active .ai-chat-history-item-meta{opacity:.8}.ai-chat-history-item-preview{color:var(--text-color,#1f2937);font-size:14px;font-weight:400;line-height:1.4;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-chat-history-item.active .ai-chat-history-item-preview{font-weight:500}.ai-chat-history-item-meta{color:var(--text-color,#9ca3af);display:flex;font-size:11px;gap:8px;opacity:.8}.ai-chat-history-list::-webkit-scrollbar{width:6px}.ai-chat-history-list::-webkit-scrollbar-track{background:transparent}.ai-chat-history-list::-webkit-scrollbar-thumb{background:var(--border-color,#e5e7eb);border-radius:3px}.ai-chat-history-list::-webkit-scrollbar-thumb:hover{background:var(--input-border,#d1d5db)}";
|
|
39589
39617
|
styleInject(css_248z$1);
|
|
39590
39618
|
|
|
39591
39619
|
var css_248z = ".ai-chat-widget{--spring-bounce:cubic-bezier(0.34,1.56,0.64,1);--spring-smooth:cubic-bezier(0.4,0,0.2,1);--spring-snappy:cubic-bezier(0.2,0,0,1);--duration-fast:0.2s;--duration-normal:0.35s;--duration-slow:0.5s}.ai-chat-button{align-items:center;background:var(--button-color,var(--primary-color,#07f));border:none;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.15);cursor:pointer;display:flex;height:48px;justify-content:center;overflow:hidden;position:relative;transition:opacity .15s ease;width:48px}.ai-chat-button:hover{opacity:.9}.ai-chat-button:active{opacity:.8}.ai-chat-button-svg{height:20px;transition:transform .15s ease;width:20px}.ai-chat-button.is-open .ai-chat-button-svg{transform:rotate(0deg)}.ai-chat-window{animation:windowOpen var(--duration-slow) var(--spring-bounce);background:#fff;border:1px solid #e5e7eb;border-radius:16px;box-shadow:0 4px 24px rgba(0,0,0,.12),0 1px 3px rgba(0,0,0,.08);display:flex;flex-direction:column;overflow:hidden;position:absolute;transform-origin:bottom right}.ai-chat-widget.dark .ai-chat-window{background:#18181b;border-color:#27272a}@keyframes windowOpen{0%{opacity:0;transform:scale(.9) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}.ai-chat-window.closing{animation:windowClose var(--duration-normal) var(--spring-smooth) forwards}@keyframes windowClose{0%{opacity:1;transform:scale(1) translateY(0)}to{opacity:0;transform:scale(.9) translateY(20px)}}.ai-chat-header{align-items:center;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;justify-content:space-between;padding:16px 20px;position:relative;z-index:10}.ai-chat-widget.dark .ai-chat-header{background:#18181b;border-bottom-color:#27272a}.ai-chat-header-content{align-items:center;display:flex;flex:1;gap:12px}.ai-chat-logo{border-radius:10px;height:36px;object-fit:cover;width:36px}.ai-chat-title{color:#18181b;font-size:15px;font-weight:600;letter-spacing:-.01em}.ai-chat-widget.dark .ai-chat-title{color:#fafafa}.ai-chat-close-button{align-items:center;background:transparent;border:none;border-radius:8px;color:#a1a1aa;cursor:pointer;display:flex;height:32px;justify-content:center;padding:0;transition:all .15s ease;width:32px}.ai-chat-widget.dark .ai-chat-close-button{color:#71717a}.ai-chat-close-button:hover{background:#f4f4f5;color:#52525b}.ai-chat-widget.dark .ai-chat-close-button:hover{background:#27272a;color:#a1a1aa}.ai-chat-close-button:active{transform:scale(.95)}.ai-chat-messages{-webkit-overflow-scrolling:touch;background:#f4f4f5;display:flex;flex:1;flex-direction:column;gap:12px;overflow-x:hidden;overflow-y:auto;padding:16px 16px 90px;position:relative;scroll-behavior:smooth}.ai-chat-widget.dark .ai-chat-messages{background:#18181b}.ai-chat-messages::-webkit-scrollbar{width:4px}.ai-chat-messages::-webkit-scrollbar-track{background:transparent}.ai-chat-messages::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);border-radius:4px}.ai-chat-messages::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.25)}.ai-chat-message{animation:messageSlideIn var(--duration-normal) var(--spring-bounce);display:flex;flex-direction:column;gap:6px}@keyframes messageSlideIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.ai-chat-message-content{word-wrap:break-word;border-radius:12px;font-size:14px;line-height:1.5;max-width:85%;padding:8px 14px}.ai-chat-message.user .ai-chat-message-content{background:var(--bubble-user-color,var(--primary-color,#07f));border-bottom-right-radius:4px;color:#fff;margin-left:auto}.ai-chat-message.assistant .ai-chat-message-content{background:#fff;border:1px solid #e5e7eb;border-bottom-left-radius:4px;color:#374151}.ai-chat-widget.dark .ai-chat-message.assistant .ai-chat-message-content{background:#18181b;border-color:#27272a;color:#e4e4e7}.ai-chat-typing{align-items:center;animation:messageSlideIn var(--duration-normal) var(--spring-bounce);background:#fff;border:1px solid #e5e7eb;border-radius:12px;border-bottom-left-radius:4px;display:flex;gap:4px;max-width:64px;padding:12px 16px}.ai-chat-widget.dark .ai-chat-typing{background:#18181b;border-color:#27272a}.ai-chat-typing-dot{animation:typingPulse 1.4s ease-in-out infinite;background:linear-gradient(135deg,var(--primary-color) 0,color-mix(in srgb,var(--primary-color) 70%,#000) 100%);border-radius:50%;height:8px;width:8px}.ai-chat-typing-dot:nth-child(2){animation-delay:.15s}.ai-chat-typing-dot:nth-child(3){animation-delay:.3s}@keyframes typingPulse{0%,60%,to{opacity:.4;transform:translateY(0) scale(1)}30%{opacity:1;transform:translateY(-6px) scale(1.1)}}.ai-chat-input-container{background:transparent;bottom:0;left:0;padding:0 16px 16px;position:absolute;right:0;z-index:10}.ai-chat-input-container:before{background:linear-gradient(0deg,#f4f4f5 80%,transparent);bottom:0;content:\"\";height:48px;left:0;pointer-events:none;position:absolute;right:0;z-index:-1}.ai-chat-widget.dark .ai-chat-input-container:before{background:linear-gradient(0deg,#18181b 80%,transparent)}.ai-chat-input-wrapper{align-items:center;background:#f4f4f5;border:1px solid #e5e7eb;border-radius:9999px;display:flex;gap:0;padding:4px 4px 4px 16px;position:relative;transition:all .15s ease;z-index:5}.ai-chat-widget.dark .ai-chat-input-wrapper{background:#27272a;border-color:#3f3f46}.ai-chat-input-wrapper:focus-within{border-color:var(--primary-color);box-shadow:0 0 0 2px rgba(var(--primary-color-rgb,0,119,255),.15)}.ai-chat-input{background:transparent;border:none;color:var(--text-color);flex:1;font-family:inherit;font-size:14px;line-height:1.4;max-height:100px;min-height:20px;outline:none;padding:8px 0;resize:none}.ai-chat-input::placeholder{color:rgba(0,0,0,.35)}.ai-chat-widget.dark .ai-chat-input::placeholder{color:hsla(0,0%,100%,.35)}.ai-chat-send-button{align-items:center;background:transparent;border:none;border-radius:8px;color:#a1a1aa;cursor:pointer;display:flex;flex-shrink:0;height:36px;justify-content:center;padding:0;transition:all .15s ease;width:36px}.ai-chat-widget.dark .ai-chat-send-button{color:#71717a}.ai-chat-send-button.active{background:var(--primary-color,#07f);color:#fff}.ai-chat-send-button.active:hover:not(:disabled){opacity:.9}.ai-chat-send-button:active:not(:disabled){transform:scale(.95)}.ai-chat-send-button:disabled{cursor:not-allowed;opacity:.4}.ai-chat-tool-message{align-items:center;animation:toolPulse 2s ease-in-out infinite;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:linear-gradient(135deg,rgba(16,185,129,.15),rgba(16,185,129,.08));border:1px solid rgba(16,185,129,.2);border-radius:16px;display:inline-flex;gap:10px;padding:10px 16px}@keyframes toolPulse{0%,to{box-shadow:0 0 0 0 rgba(16,185,129,.2)}50%{box-shadow:0 0 0 8px rgba(16,185,129,0)}}.tool-finished{align-items:center;animation:toolComplete .5s var(--spring-bounce);background:linear-gradient(135deg,#10b981,#059669);border-radius:50%;color:#fff;display:inline-flex;height:28px;justify-content:center;position:relative;width:28px}@keyframes toolComplete{0%{transform:scale(0) rotate(-180deg)}to{transform:scale(1) rotate(0deg)}}.tool-indicator{align-items:center;background:linear-gradient(135deg,rgba(59,130,246,.2),rgba(59,130,246,.1));border-radius:50%;color:#3b82f6;display:inline-flex;height:24px;justify-content:center;position:relative;width:24px}.tool-indicator.started:after{animation:toolSpin .8s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#3b82f6;content:\"\";inset:-2px;position:absolute}@keyframes toolSpin{to{transform:rotate(1turn)}}.ai-chat-welcome{align-items:center;animation:welcomeFadeIn var(--duration-slow) var(--spring-smooth);display:flex;flex-direction:column;justify-content:center;min-height:200px;padding:60px 32px 40px;text-align:center}@keyframes welcomeFadeIn{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.ai-chat-welcome-title{color:var(--primary-color);font-size:28px;font-weight:700;letter-spacing:-.03em;margin-bottom:12px}.ai-chat-welcome-text{color:var(--text-color);font-size:16px;line-height:1.6;max-width:280px;opacity:.6}.ai-chat-suggested-questions{bottom:76px;left:0;padding:0 16px 12px;position:absolute;right:0;z-index:5}.ai-chat-suggested-questions-list{display:flex;flex-direction:column;gap:6px}.ai-chat-suggested-question{align-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:10px;color:#374151;cursor:pointer;display:flex;font-size:13px;font-weight:500;gap:10px;justify-content:space-between;padding:10px 14px;text-align:left;transition:all .15s ease;width:100%}.ai-chat-widget.dark .ai-chat-suggested-question{background:#18181b;border-color:#27272a;color:#e4e4e7}.ai-chat-suggested-question:hover{background:#f4f4f5;border-color:#d4d4d8}.ai-chat-widget.dark .ai-chat-suggested-question:hover{background:#27272a;border-color:#3f3f46}.ai-chat-suggested-question:active{transform:scale(.98)}.ai-chat-suggested-question-text{flex:1;line-height:1.4}.ai-chat-suggested-question-icon{color:var(--primary-color,#07f);flex-shrink:0;opacity:.7;transition:transform .15s ease,opacity .15s ease}.ai-chat-suggested-question:hover .ai-chat-suggested-question-icon{opacity:1;transform:translateX(3px)}.ai-chat-feedback-button{align-items:center;background:rgba(0,0,0,.04);border:none;border-radius:8px;cursor:pointer;display:flex;font-size:16px;gap:4px;padding:6px 10px;transition:all var(--duration-fast) var(--spring-bounce)}.ai-chat-feedback-button:hover:not(:disabled){background:rgba(0,0,0,.08);transform:scale(1.15)}.ai-chat-feedback-button:active:not(:disabled){transform:scale(.9)}.ai-chat-feedback-button.active{background:rgba(var(--primary-color-rgb,0,119,255),.15)}@media (max-width:480px){.ai-chat-window{animation:mobileSlideUp var(--duration-normal) var(--spring-smooth);border-radius:0!important;bottom:0!important;height:100%!important;left:0!important;position:fixed!important;right:0!important;top:0!important;width:100%!important}@keyframes mobileSlideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.ai-chat-header{padding-top:max(16px,env(safe-area-inset-top))}.ai-chat-input-container{padding-bottom:max(20px,env(safe-area-inset-bottom))}}";
|
|
@@ -39594,24 +39622,16 @@
|
|
|
39594
39622
|
// Icon components mapping
|
|
39595
39623
|
const iconComponents = {
|
|
39596
39624
|
FiMessageCircle: () => (jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("path", { d: "M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" }) })),
|
|
39597
|
-
FiMessageSquare: () => (jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.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" }) })),
|
|
39598
|
-
FiMail: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" }), jsxRuntimeExports.jsx("polyline", { points: "22,6 12,13 2,6" })] })),
|
|
39599
|
-
FiPhone: () => (jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" }) })),
|
|
39600
|
-
FiHelpCircle: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "10" }), jsxRuntimeExports.jsx("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }), jsxRuntimeExports.jsx("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })] })),
|
|
39601
|
-
FiZap: () => (jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" }) })),
|
|
39602
|
-
FiSend: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("line", { x1: "22", y1: "2", x2: "11", y2: "13" }), jsxRuntimeExports.jsx("polygon", { points: "22 2 15 22 11 13 2 9 22 2" })] })),
|
|
39603
|
-
FiUser: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }), jsxRuntimeExports.jsx("circle", { cx: "12", cy: "7", r: "4" })] })),
|
|
39604
|
-
FiUsers: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }), jsxRuntimeExports.jsx("circle", { cx: "9", cy: "7", r: "4" }), jsxRuntimeExports.jsx("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }), jsxRuntimeExports.jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })] })),
|
|
39605
|
-
FiHeadphones: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M3 18v-6a9 9 0 0 1 18 0v6" }), jsxRuntimeExports.jsx("path", { d: "M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z" })] })),
|
|
39606
|
-
FiCpu: () => (jsxRuntimeExports.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2", ry: "2" }), jsxRuntimeExports.jsx("rect", { x: "9", y: "9", width: "6", height: "6" }), jsxRuntimeExports.jsx("line", { x1: "9", y1: "1", x2: "9", y2: "4" }), jsxRuntimeExports.jsx("line", { x1: "15", y1: "1", x2: "15", y2: "4" }), jsxRuntimeExports.jsx("line", { x1: "9", y1: "20", x2: "9", y2: "23" }), jsxRuntimeExports.jsx("line", { x1: "15", y1: "20", x2: "15", y2: "23" }), jsxRuntimeExports.jsx("line", { x1: "20", y1: "9", x2: "23", y2: "9" }), jsxRuntimeExports.jsx("line", { x1: "20", y1: "14", x2: "23", y2: "14" }), jsxRuntimeExports.jsx("line", { x1: "1", y1: "9", x2: "4", y2: "9" }), jsxRuntimeExports.jsx("line", { x1: "1", y1: "14", x2: "4", y2: "14" })] })),
|
|
39607
39625
|
FiChevronDown: () => (jsxRuntimeExports.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: jsxRuntimeExports.jsx("polyline", { points: "6 9 12 15 18 9" }) })),
|
|
39608
39626
|
};
|
|
39609
|
-
const ChatWidget = ({ widgetId, apiUrl = window.location.origin, position = 'bottom-right',
|
|
39627
|
+
const ChatWidget = ({ widgetId, apiUrl = window.location.origin, position = 'bottom-right', primaryColor, onOpen, onClose, onMessage, onError, }) => {
|
|
39610
39628
|
const [isOpen, setIsOpen] = reactExports.useState(false);
|
|
39611
39629
|
const [autoDetectedTheme, setAutoDetectedTheme] = reactExports.useState('light');
|
|
39612
39630
|
const widgetRef = reactExports.useRef(null);
|
|
39613
39631
|
const containerRef = reactExports.useRef(null);
|
|
39614
|
-
const { messages, isLoading, isTyping, error, config, sendMessage, submitFeedback,
|
|
39632
|
+
const { messages, isLoading, isTyping, error, config, sendMessage, submitFeedback,
|
|
39633
|
+
// Chat history (only active when persistConversation is true)
|
|
39634
|
+
conversations, loadConversations, switchConversation, startNewConversation, conversationId, } = useChat({
|
|
39615
39635
|
widgetId,
|
|
39616
39636
|
apiUrl,
|
|
39617
39637
|
onMessage,
|
|
@@ -39647,7 +39667,6 @@
|
|
|
39647
39667
|
console.log('[ChatWidget] Config loaded:', config ? 'YES' : 'NO');
|
|
39648
39668
|
if (config) {
|
|
39649
39669
|
console.log('[ChatWidget] Config details:', {
|
|
39650
|
-
theme: config.appearance?.theme,
|
|
39651
39670
|
accentColor: config.appearance?.primaryColor,
|
|
39652
39671
|
autoDetectedTheme,
|
|
39653
39672
|
});
|
|
@@ -39665,29 +39684,9 @@
|
|
|
39665
39684
|
}
|
|
39666
39685
|
return undefined;
|
|
39667
39686
|
}, [config, onOpen]);
|
|
39668
|
-
// Handle close on outside click - always enabled for better UX
|
|
39669
|
-
reactExports.useEffect(() => {
|
|
39670
|
-
if (!isOpen)
|
|
39671
|
-
return;
|
|
39672
|
-
const handleClickOutside = (event) => {
|
|
39673
|
-
// Check if click is outside the widget container
|
|
39674
|
-
if (widgetRef.current && !widgetRef.current.contains(event.target)) {
|
|
39675
|
-
setIsOpen(false);
|
|
39676
|
-
onClose?.();
|
|
39677
|
-
}
|
|
39678
|
-
};
|
|
39679
|
-
// Small delay to prevent immediate close on open
|
|
39680
|
-
const timer = setTimeout(() => {
|
|
39681
|
-
document.addEventListener('mousedown', handleClickOutside);
|
|
39682
|
-
}, 150);
|
|
39683
|
-
return () => {
|
|
39684
|
-
clearTimeout(timer);
|
|
39685
|
-
document.removeEventListener('mousedown', handleClickOutside);
|
|
39686
|
-
};
|
|
39687
|
-
}, [isOpen, onClose]);
|
|
39688
39687
|
// Handle close on Escape key
|
|
39689
39688
|
reactExports.useEffect(() => {
|
|
39690
|
-
if (!isOpen
|
|
39689
|
+
if (!isOpen)
|
|
39691
39690
|
return;
|
|
39692
39691
|
const handleEscapeKey = (event) => {
|
|
39693
39692
|
if (event.key === 'Escape') {
|
|
@@ -39697,16 +39696,10 @@
|
|
|
39697
39696
|
};
|
|
39698
39697
|
document.addEventListener('keydown', handleEscapeKey);
|
|
39699
39698
|
return () => document.removeEventListener('keydown', handleEscapeKey);
|
|
39700
|
-
}, [isOpen,
|
|
39701
|
-
// Determine theme -
|
|
39699
|
+
}, [isOpen, onClose]);
|
|
39700
|
+
// Determine theme - always auto-detect from background
|
|
39702
39701
|
const appearanceConfig = config?.appearance;
|
|
39703
|
-
const
|
|
39704
|
-
// Use auto-detected theme, or explicit override
|
|
39705
|
-
const effectiveTheme = themeSetting === 'auto'
|
|
39706
|
-
? autoDetectedTheme
|
|
39707
|
-
: themeSetting === 'dark'
|
|
39708
|
-
? 'dark'
|
|
39709
|
-
: 'light';
|
|
39702
|
+
const effectiveTheme = autoDetectedTheme;
|
|
39710
39703
|
// Determine position (config takes priority over prop)
|
|
39711
39704
|
const effectivePosition = config?.appearance.position || position;
|
|
39712
39705
|
// Get accent color from config or prop
|
|
@@ -39715,17 +39708,15 @@
|
|
|
39715
39708
|
const simpleAppearance = {
|
|
39716
39709
|
accentColor,
|
|
39717
39710
|
size: appearanceConfig?.size || 'small',
|
|
39718
|
-
|
|
39719
|
-
|
|
39720
|
-
|
|
39721
|
-
headerTitle: appearanceConfig?.lightMode?.header?.title,
|
|
39722
|
-
buttonIcon: appearanceConfig?.buttonIcon || appearanceConfig?.lightMode?.button?.icon,
|
|
39711
|
+
welcomeMessage: appearanceConfig?.welcomeMessage || '',
|
|
39712
|
+
placeholder: appearanceConfig?.placeholder || '',
|
|
39713
|
+
headerTitle: appearanceConfig?.headerTitle || '',
|
|
39723
39714
|
};
|
|
39724
39715
|
// Generate theme styles from accent color
|
|
39725
39716
|
const generatedStyles = generateThemeStyles(simpleAppearance, effectiveTheme);
|
|
39726
39717
|
// Also apply legacy styles for backward compatibility
|
|
39727
39718
|
const legacyStyles = appearanceConfig
|
|
39728
|
-
? applyAppearanceStyles(appearanceConfig
|
|
39719
|
+
? applyAppearanceStyles(appearanceConfig)
|
|
39729
39720
|
: {};
|
|
39730
39721
|
// Merge styles (generated takes priority for new simplified system)
|
|
39731
39722
|
const customStyles = {
|
|
@@ -39737,10 +39728,9 @@
|
|
|
39737
39728
|
console.log('[ChatWidget] Theme info:', {
|
|
39738
39729
|
effectiveTheme,
|
|
39739
39730
|
autoDetectedTheme,
|
|
39740
|
-
themeSetting,
|
|
39741
39731
|
accentColor,
|
|
39742
39732
|
});
|
|
39743
|
-
}, [effectiveTheme, autoDetectedTheme,
|
|
39733
|
+
}, [effectiveTheme, autoDetectedTheme, accentColor]);
|
|
39744
39734
|
const handleToggle = () => {
|
|
39745
39735
|
const newState = !isOpen;
|
|
39746
39736
|
console.log('[ChatWidget] handleToggle called, setting isOpen to:', newState);
|
|
@@ -39762,24 +39752,10 @@
|
|
|
39762
39752
|
}
|
|
39763
39753
|
console.log('[ChatWidget] Rendering widget', { isOpen, hasConfig: !!config });
|
|
39764
39754
|
// Get button icon based on state
|
|
39765
|
-
const
|
|
39766
|
-
|
|
39767
|
-
|
|
39768
|
-
|
|
39769
|
-
const themeConfig = effectiveTheme === 'dark'
|
|
39770
|
-
? appearanceConfig?.darkMode
|
|
39771
|
-
: appearanceConfig?.lightMode;
|
|
39772
|
-
const buttonIcon = themeConfig?.button?.icon || 'FiMessageCircle';
|
|
39773
|
-
return iconComponents[buttonIcon] || iconComponents.FiMessageCircle;
|
|
39774
|
-
};
|
|
39775
|
-
const buttonIconColor = (() => {
|
|
39776
|
-
const themeConfig = effectiveTheme === 'dark'
|
|
39777
|
-
? appearanceConfig?.darkMode
|
|
39778
|
-
: appearanceConfig?.lightMode;
|
|
39779
|
-
return themeConfig?.button?.iconColor || customStyles['--button-icon-color'] || '#ffffff';
|
|
39780
|
-
})();
|
|
39781
|
-
const IconComponent = getButtonIcon();
|
|
39782
|
-
return (jsxRuntimeExports.jsx("div", { ref: containerRef, className: `ai-chat-widget ${effectiveTheme}`, style: customStyles, children: jsxRuntimeExports.jsxs("div", { ref: widgetRef, className: `ai-chat-widget-container ${effectivePosition}`, children: [isOpen && (jsxRuntimeExports.jsx(ChatWindow, { messages: messages, isLoading: isLoading, isTyping: isTyping, error: error, config: config, onSendMessage: sendMessage, onClose: handleToggle, onFeedback: handleFeedback })), jsxRuntimeExports.jsx("button", { className: `ai-chat-button ${isOpen ? 'is-open' : ''}`, onClick: handleToggle, "aria-label": isOpen ? "Minimize chat" : "Open chat", style: { color: buttonIconColor }, children: jsxRuntimeExports.jsx("div", { className: "ai-chat-button-svg", children: jsxRuntimeExports.jsx(IconComponent, {}) }) })] }) }));
|
|
39755
|
+
const IconComponent = isOpen ? iconComponents.FiChevronDown : iconComponents.FiMessageCircle;
|
|
39756
|
+
return (jsxRuntimeExports.jsx("div", { ref: containerRef, className: `ai-chat-widget ${effectiveTheme}`, style: customStyles, children: jsxRuntimeExports.jsxs("div", { ref: widgetRef, className: `ai-chat-widget-container ${effectivePosition}`, children: [isOpen && (jsxRuntimeExports.jsx(ChatWindow, { messages: messages, isLoading: isLoading, isTyping: isTyping, error: error, config: config, onSendMessage: sendMessage, onClose: handleToggle, onFeedback: handleFeedback,
|
|
39757
|
+
// Chat history props (only active when persistConversation is true)
|
|
39758
|
+
conversations: conversations, onLoadConversations: loadConversations, onSwitchConversation: switchConversation, onStartNewConversation: startNewConversation, currentConversationId: conversationId })), jsxRuntimeExports.jsx("button", { className: `ai-chat-button ${isOpen ? 'is-open' : ''}`, onClick: handleToggle, "aria-label": isOpen ? "Minimize chat" : "Open chat", children: jsxRuntimeExports.jsx("div", { className: "ai-chat-button-svg", children: jsxRuntimeExports.jsx(IconComponent, {}) }) })] }) }));
|
|
39783
39759
|
};
|
|
39784
39760
|
|
|
39785
39761
|
/**
|
|
@@ -39807,7 +39783,6 @@
|
|
|
39807
39783
|
widgetId: options.widgetId,
|
|
39808
39784
|
apiUrl: options.apiUrl,
|
|
39809
39785
|
position: options.position,
|
|
39810
|
-
theme: options.theme,
|
|
39811
39786
|
primaryColor: options.primaryColor,
|
|
39812
39787
|
onOpen: options.onOpen,
|
|
39813
39788
|
onClose: options.onClose,
|