hazo_chat 2.0.13 → 2.0.15
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/README.md +104 -7
- package/SETUP_CHECKLIST.md +73 -0
- package/package.json +1 -1
- package/dist/api/index.d.ts +0 -26
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -25
- package/dist/api/index.js.map +0 -1
- package/dist/api/messages.d.ts +0 -34
- package/dist/api/messages.d.ts.map +0 -1
- package/dist/api/messages.js +0 -214
- package/dist/api/messages.js.map +0 -1
- package/dist/api/types.d.ts +0 -69
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js +0 -8
- package/dist/api/types.js.map +0 -1
- package/dist/api/unread_count.d.ts +0 -57
- package/dist/api/unread_count.d.ts.map +0 -1
- package/dist/api/unread_count.js +0 -86
- package/dist/api/unread_count.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat.d.ts +0 -28
- package/dist/components/hazo_chat/hazo_chat.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat.js +0 -201
- package/dist/components/hazo_chat/hazo_chat.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts +0 -17
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.js +0 -60
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_context.d.ts +0 -42
- package/dist/components/hazo_chat/hazo_chat_context.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_context.js +0 -273
- package/dist/components/hazo_chat/hazo_chat_context.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts +0 -15
- package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_document_viewer.js +0 -111
- package/dist/components/hazo_chat/hazo_chat_document_viewer.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_header.d.ts +0 -16
- package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_header.js +0 -24
- package/dist/components/hazo_chat/hazo_chat_header.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_input.d.ts +0 -16
- package/dist/components/hazo_chat/hazo_chat_input.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_input.js +0 -75
- package/dist/components/hazo_chat/hazo_chat_input.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_messages.d.ts +0 -17
- package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_messages.js +0 -109
- package/dist/components/hazo_chat/hazo_chat_messages.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts +0 -16
- package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_reference_list.js +0 -59
- package/dist/components/hazo_chat/hazo_chat_reference_list.js.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts +0 -18
- package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts.map +0 -1
- package/dist/components/hazo_chat/hazo_chat_sidebar.js +0 -72
- package/dist/components/hazo_chat/hazo_chat_sidebar.js.map +0 -1
- package/dist/components/hazo_chat/index.d.ts +0 -16
- package/dist/components/hazo_chat/index.d.ts.map +0 -1
- package/dist/components/hazo_chat/index.js +0 -19
- package/dist/components/hazo_chat/index.js.map +0 -1
- package/dist/components/index.d.ts +0 -9
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -11
- package/dist/components/index.js.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -13
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/avatar.js +0 -28
- package/dist/components/ui/avatar.js.map +0 -1
- package/dist/components/ui/badge.d.ts +0 -16
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/badge.js +0 -36
- package/dist/components/ui/badge.js.map +0 -1
- package/dist/components/ui/button.d.ts +0 -18
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/button.js +0 -47
- package/dist/components/ui/button.js.map +0 -1
- package/dist/components/ui/chat_bubble.d.ts +0 -18
- package/dist/components/ui/chat_bubble.d.ts.map +0 -1
- package/dist/components/ui/chat_bubble.js +0 -107
- package/dist/components/ui/chat_bubble.js.map +0 -1
- package/dist/components/ui/hover-card.d.ts +0 -13
- package/dist/components/ui/hover-card.d.ts.map +0 -1
- package/dist/components/ui/hover-card.js +0 -17
- package/dist/components/ui/hover-card.js.map +0 -1
- package/dist/components/ui/index.d.ts +0 -19
- package/dist/components/ui/index.d.ts.map +0 -1
- package/dist/components/ui/index.js +0 -21
- package/dist/components/ui/index.js.map +0 -1
- package/dist/components/ui/input.d.ts +0 -11
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/input.js +0 -18
- package/dist/components/ui/input.js.map +0 -1
- package/dist/components/ui/loading_skeleton.d.ts +0 -19
- package/dist/components/ui/loading_skeleton.d.ts.map +0 -1
- package/dist/components/ui/loading_skeleton.js +0 -30
- package/dist/components/ui/loading_skeleton.js.map +0 -1
- package/dist/components/ui/scroll-area.d.ts +0 -12
- package/dist/components/ui/scroll-area.d.ts.map +0 -1
- package/dist/components/ui/scroll-area.js +0 -25
- package/dist/components/ui/scroll-area.js.map +0 -1
- package/dist/components/ui/separator.d.ts +0 -11
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/separator.js +0 -18
- package/dist/components/ui/separator.js.map +0 -1
- package/dist/components/ui/skeleton.d.ts +0 -9
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/skeleton.js +0 -16
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/textarea.d.ts +0 -11
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/textarea.js +0 -18
- package/dist/components/ui/textarea.js.map +0 -1
- package/dist/components/ui/tooltip.d.ts +0 -14
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components/ui/tooltip.js +0 -30
- package/dist/components/ui/tooltip.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -10
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -10
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/use_chat_messages.d.ts +0 -33
- package/dist/hooks/use_chat_messages.d.ts.map +0 -1
- package/dist/hooks/use_chat_messages.js +0 -466
- package/dist/hooks/use_chat_messages.js.map +0 -1
- package/dist/hooks/use_chat_references.d.ts +0 -17
- package/dist/hooks/use_chat_references.d.ts.map +0 -1
- package/dist/hooks/use_chat_references.js +0 -133
- package/dist/hooks/use_chat_references.js.map +0 -1
- package/dist/hooks/use_file_upload.d.ts +0 -23
- package/dist/hooks/use_file_upload.d.ts.map +0 -1
- package/dist/hooks/use_file_upload.js +0 -212
- package/dist/hooks/use_file_upload.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -17
- package/dist/index.js.map +0 -1
- package/dist/lib/config.d.ts +0 -41
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -93
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -41
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -72
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/index.d.ts +0 -9
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/index.js +0 -9
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/utils.d.ts +0 -17
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/lib/utils.js +0 -20
- package/dist/lib/utils.js.map +0 -1
- package/dist/types/index.d.ts +0 -404
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -11
- package/dist/types/index.js.map +0 -1
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatContext - React context for shared state management
|
|
3
|
-
*
|
|
4
|
-
* Provides centralized state management for:
|
|
5
|
-
* - Selected reference/document
|
|
6
|
-
* - Current user profile (fetched via API)
|
|
7
|
-
* - Pending file attachments
|
|
8
|
-
* - Sidebar collapsed state (mobile)
|
|
9
|
-
* - Polling connection status
|
|
10
|
-
* - Error handling
|
|
11
|
-
*
|
|
12
|
-
* Uses API calls to fetch user data - no server-side dependencies.
|
|
13
|
-
*/
|
|
14
|
-
'use client';
|
|
15
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
-
import { createContext, useContext, useReducer, useCallback, useEffect, useMemo } from 'react';
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Initial State
|
|
19
|
-
// ============================================================================
|
|
20
|
-
const initial_state = {
|
|
21
|
-
current_user: null,
|
|
22
|
-
selected_reference: null,
|
|
23
|
-
highlighted_message_id: null,
|
|
24
|
-
pending_attachments: [],
|
|
25
|
-
is_sidebar_open: false,
|
|
26
|
-
polling_status: 'connected',
|
|
27
|
-
all_references: [],
|
|
28
|
-
error_message: null
|
|
29
|
-
};
|
|
30
|
-
// ============================================================================
|
|
31
|
-
// Reducer
|
|
32
|
-
// ============================================================================
|
|
33
|
-
function hazo_chat_reducer(state, action) {
|
|
34
|
-
switch (action.type) {
|
|
35
|
-
case 'SET_CURRENT_USER':
|
|
36
|
-
return { ...state, current_user: action.payload };
|
|
37
|
-
case 'SET_SELECTED_REFERENCE':
|
|
38
|
-
return { ...state, selected_reference: action.payload };
|
|
39
|
-
case 'SET_HIGHLIGHTED_MESSAGE_ID':
|
|
40
|
-
return { ...state, highlighted_message_id: action.payload };
|
|
41
|
-
case 'ADD_PENDING_ATTACHMENT':
|
|
42
|
-
return {
|
|
43
|
-
...state,
|
|
44
|
-
pending_attachments: [...state.pending_attachments, action.payload]
|
|
45
|
-
};
|
|
46
|
-
case 'REMOVE_PENDING_ATTACHMENT':
|
|
47
|
-
return {
|
|
48
|
-
...state,
|
|
49
|
-
pending_attachments: state.pending_attachments.filter((attachment) => attachment.id !== action.payload)
|
|
50
|
-
};
|
|
51
|
-
case 'UPDATE_PENDING_ATTACHMENT':
|
|
52
|
-
return {
|
|
53
|
-
...state,
|
|
54
|
-
pending_attachments: state.pending_attachments.map((attachment) => attachment.id === action.payload.id
|
|
55
|
-
? { ...attachment, ...action.payload.updates }
|
|
56
|
-
: attachment)
|
|
57
|
-
};
|
|
58
|
-
case 'CLEAR_PENDING_ATTACHMENTS':
|
|
59
|
-
// Revoke any object URLs to prevent memory leaks
|
|
60
|
-
state.pending_attachments.forEach((attachment) => {
|
|
61
|
-
if (attachment.preview_url) {
|
|
62
|
-
URL.revokeObjectURL(attachment.preview_url);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
return { ...state, pending_attachments: [] };
|
|
66
|
-
case 'TOGGLE_SIDEBAR':
|
|
67
|
-
return { ...state, is_sidebar_open: !state.is_sidebar_open };
|
|
68
|
-
case 'SET_SIDEBAR_OPEN':
|
|
69
|
-
return { ...state, is_sidebar_open: action.payload };
|
|
70
|
-
case 'SET_POLLING_STATUS':
|
|
71
|
-
return { ...state, polling_status: action.payload };
|
|
72
|
-
case 'ADD_REFERENCE':
|
|
73
|
-
// Check if reference already exists
|
|
74
|
-
if (state.all_references.some((ref) => ref.id === action.payload.id)) {
|
|
75
|
-
return state;
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
...state,
|
|
79
|
-
all_references: [...state.all_references, action.payload]
|
|
80
|
-
};
|
|
81
|
-
case 'SET_ALL_REFERENCES':
|
|
82
|
-
return { ...state, all_references: action.payload };
|
|
83
|
-
case 'SET_ERROR_MESSAGE':
|
|
84
|
-
return { ...state, error_message: action.payload };
|
|
85
|
-
default:
|
|
86
|
-
return state;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// ============================================================================
|
|
90
|
-
// Context
|
|
91
|
-
// ============================================================================
|
|
92
|
-
const HazoChatContext = createContext(null);
|
|
93
|
-
// ============================================================================
|
|
94
|
-
// Provider Component
|
|
95
|
-
// ============================================================================
|
|
96
|
-
/**
|
|
97
|
-
* HazoChatProvider - Context provider for HazoChat component tree
|
|
98
|
-
*
|
|
99
|
-
* Fetches current user via API on mount.
|
|
100
|
-
*
|
|
101
|
-
* @param children - Child components
|
|
102
|
-
* @param api_base_url - Base URL for API endpoints
|
|
103
|
-
* @param initial_references - Initial references from props
|
|
104
|
-
*/
|
|
105
|
-
export function HazoChatProvider({ children, api_base_url = '/api/hazo_chat', initial_references = [] }) {
|
|
106
|
-
const [state, dispatch] = useReducer(hazo_chat_reducer, {
|
|
107
|
-
...initial_state,
|
|
108
|
-
all_references: initial_references
|
|
109
|
-
});
|
|
110
|
-
// -------------------------------------------------------------------------
|
|
111
|
-
// Load current user on mount via API
|
|
112
|
-
// -------------------------------------------------------------------------
|
|
113
|
-
useEffect(() => {
|
|
114
|
-
async function load_current_user() {
|
|
115
|
-
try {
|
|
116
|
-
// Try to get current user from hazo_auth me endpoint
|
|
117
|
-
const response = await fetch('/api/hazo_auth/me', {
|
|
118
|
-
credentials: 'include'
|
|
119
|
-
});
|
|
120
|
-
if (response.ok) {
|
|
121
|
-
const data = await response.json();
|
|
122
|
-
if (data.authenticated) {
|
|
123
|
-
// Handle two different response structures:
|
|
124
|
-
// Structure 1 (with nested user object): { authenticated: true, user: { id, email_address, ... } }
|
|
125
|
-
// Structure 2 (flat): { authenticated: true, user_id, email, name, ... }
|
|
126
|
-
const user_data = data.user || data;
|
|
127
|
-
const user_id = user_data.id || data.user_id || '';
|
|
128
|
-
// Support both email_address (hazo_auth standard) and email (legacy)
|
|
129
|
-
const email = user_data.email_address || user_data.email || data.email || '';
|
|
130
|
-
const name = user_data.name || data.name || '';
|
|
131
|
-
const profile_picture_url = user_data.profile_picture_url || data.profile_picture_url;
|
|
132
|
-
if (user_id) {
|
|
133
|
-
const user_profile = {
|
|
134
|
-
id: user_id,
|
|
135
|
-
name: name || (email ? email.split('@')[0] : 'User'),
|
|
136
|
-
email: email,
|
|
137
|
-
avatar_url: profile_picture_url
|
|
138
|
-
};
|
|
139
|
-
dispatch({ type: 'SET_CURRENT_USER', payload: user_profile });
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
console.error('[HazoChatContext] Failed to load current user:', error);
|
|
146
|
-
dispatch({
|
|
147
|
-
type: 'SET_ERROR_MESSAGE',
|
|
148
|
-
payload: 'Failed to authenticate user'
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
load_current_user();
|
|
153
|
-
}, [api_base_url]);
|
|
154
|
-
// -------------------------------------------------------------------------
|
|
155
|
-
// Action creators
|
|
156
|
-
// -------------------------------------------------------------------------
|
|
157
|
-
const set_selected_reference = useCallback((reference) => {
|
|
158
|
-
dispatch({ type: 'SET_SELECTED_REFERENCE', payload: reference });
|
|
159
|
-
// Also set highlighted message if reference has a message_id
|
|
160
|
-
if (reference?.message_id) {
|
|
161
|
-
dispatch({
|
|
162
|
-
type: 'SET_HIGHLIGHTED_MESSAGE_ID',
|
|
163
|
-
payload: reference.message_id
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}, []);
|
|
167
|
-
const set_highlighted_message_id = useCallback((message_id) => {
|
|
168
|
-
dispatch({ type: 'SET_HIGHLIGHTED_MESSAGE_ID', payload: message_id });
|
|
169
|
-
}, []);
|
|
170
|
-
const add_pending_attachment = useCallback((file) => {
|
|
171
|
-
const id = `attachment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
172
|
-
// Create preview URL for images
|
|
173
|
-
let preview_url;
|
|
174
|
-
if (file.type.startsWith('image/')) {
|
|
175
|
-
preview_url = URL.createObjectURL(file);
|
|
176
|
-
}
|
|
177
|
-
const attachment = {
|
|
178
|
-
id,
|
|
179
|
-
file,
|
|
180
|
-
preview_url,
|
|
181
|
-
upload_status: 'pending'
|
|
182
|
-
};
|
|
183
|
-
dispatch({ type: 'ADD_PENDING_ATTACHMENT', payload: attachment });
|
|
184
|
-
}, []);
|
|
185
|
-
const remove_pending_attachment = useCallback((attachment_id) => {
|
|
186
|
-
// Find and revoke object URL before removing
|
|
187
|
-
const attachment = state.pending_attachments.find((a) => a.id === attachment_id);
|
|
188
|
-
if (attachment?.preview_url) {
|
|
189
|
-
URL.revokeObjectURL(attachment.preview_url);
|
|
190
|
-
}
|
|
191
|
-
dispatch({ type: 'REMOVE_PENDING_ATTACHMENT', payload: attachment_id });
|
|
192
|
-
}, [state.pending_attachments]);
|
|
193
|
-
const update_pending_attachment = useCallback((attachment_id, updates) => {
|
|
194
|
-
dispatch({
|
|
195
|
-
type: 'UPDATE_PENDING_ATTACHMENT',
|
|
196
|
-
payload: { id: attachment_id, updates }
|
|
197
|
-
});
|
|
198
|
-
}, []);
|
|
199
|
-
const clear_pending_attachments = useCallback(() => {
|
|
200
|
-
dispatch({ type: 'CLEAR_PENDING_ATTACHMENTS' });
|
|
201
|
-
}, []);
|
|
202
|
-
const toggle_sidebar = useCallback(() => {
|
|
203
|
-
dispatch({ type: 'TOGGLE_SIDEBAR' });
|
|
204
|
-
}, []);
|
|
205
|
-
const set_sidebar_open = useCallback((is_open) => {
|
|
206
|
-
dispatch({ type: 'SET_SIDEBAR_OPEN', payload: is_open });
|
|
207
|
-
}, []);
|
|
208
|
-
const set_error_message = useCallback((message) => {
|
|
209
|
-
dispatch({ type: 'SET_ERROR_MESSAGE', payload: message });
|
|
210
|
-
}, []);
|
|
211
|
-
const add_reference = useCallback((reference) => {
|
|
212
|
-
dispatch({ type: 'ADD_REFERENCE', payload: reference });
|
|
213
|
-
}, []);
|
|
214
|
-
// -------------------------------------------------------------------------
|
|
215
|
-
// Memoized context value
|
|
216
|
-
// -------------------------------------------------------------------------
|
|
217
|
-
const context_value = useMemo(() => ({
|
|
218
|
-
// State
|
|
219
|
-
current_user: state.current_user,
|
|
220
|
-
selected_reference: state.selected_reference,
|
|
221
|
-
highlighted_message_id: state.highlighted_message_id,
|
|
222
|
-
pending_attachments: state.pending_attachments,
|
|
223
|
-
is_sidebar_open: state.is_sidebar_open,
|
|
224
|
-
polling_status: state.polling_status,
|
|
225
|
-
all_references: state.all_references,
|
|
226
|
-
error_message: state.error_message,
|
|
227
|
-
// Actions
|
|
228
|
-
set_selected_reference,
|
|
229
|
-
set_highlighted_message_id,
|
|
230
|
-
add_pending_attachment,
|
|
231
|
-
remove_pending_attachment,
|
|
232
|
-
update_pending_attachment,
|
|
233
|
-
clear_pending_attachments,
|
|
234
|
-
toggle_sidebar,
|
|
235
|
-
set_sidebar_open,
|
|
236
|
-
set_error_message,
|
|
237
|
-
add_reference
|
|
238
|
-
}), [
|
|
239
|
-
state,
|
|
240
|
-
set_selected_reference,
|
|
241
|
-
set_highlighted_message_id,
|
|
242
|
-
add_pending_attachment,
|
|
243
|
-
remove_pending_attachment,
|
|
244
|
-
update_pending_attachment,
|
|
245
|
-
clear_pending_attachments,
|
|
246
|
-
toggle_sidebar,
|
|
247
|
-
set_sidebar_open,
|
|
248
|
-
set_error_message,
|
|
249
|
-
add_reference
|
|
250
|
-
]);
|
|
251
|
-
return (_jsx(HazoChatContext.Provider, { value: context_value, children: children }));
|
|
252
|
-
}
|
|
253
|
-
// ============================================================================
|
|
254
|
-
// Custom Hook
|
|
255
|
-
// ============================================================================
|
|
256
|
-
/**
|
|
257
|
-
* useHazoChatContext - Hook to access HazoChat context
|
|
258
|
-
*
|
|
259
|
-
* @throws Error if used outside of HazoChatProvider
|
|
260
|
-
* @returns HazoChatContextValue
|
|
261
|
-
*/
|
|
262
|
-
export function useHazoChatContext() {
|
|
263
|
-
const context = useContext(HazoChatContext);
|
|
264
|
-
if (!context) {
|
|
265
|
-
throw new Error('useHazoChatContext must be used within a HazoChatProvider');
|
|
266
|
-
}
|
|
267
|
-
return context;
|
|
268
|
-
}
|
|
269
|
-
// ============================================================================
|
|
270
|
-
// Export Context for testing
|
|
271
|
-
// ============================================================================
|
|
272
|
-
export { HazoChatContext };
|
|
273
|
-
//# sourceMappingURL=hazo_chat_context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_context.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_context.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatDocumentViewer Component
|
|
3
|
-
*
|
|
4
|
-
* Document preview area supporting:
|
|
5
|
-
* - PDF viewing via hazo_pdf
|
|
6
|
-
* - Image preview (png, jpg, gif, webp)
|
|
7
|
-
* - Text file preview
|
|
8
|
-
* - Download link for unsupported types
|
|
9
|
-
*/
|
|
10
|
-
import type { HazoChatDocumentViewerProps } from '../../types/index.js';
|
|
11
|
-
export declare function HazoChatDocumentViewer({ reference, className }: HazoChatDocumentViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export declare namespace HazoChatDocumentViewer {
|
|
13
|
-
var displayName: string;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=hazo_chat_document_viewer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_document_viewer.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_document_viewer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AA2LxE,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,SAAS,EACV,EAAE,2BAA2B,2CA2C7B;yBA9Ce,sBAAsB"}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatDocumentViewer Component
|
|
3
|
-
*
|
|
4
|
-
* Document preview area supporting:
|
|
5
|
-
* - PDF viewing via hazo_pdf
|
|
6
|
-
* - Image preview (png, jpg, gif, webp)
|
|
7
|
-
* - Text file preview
|
|
8
|
-
* - Download link for unsupported types
|
|
9
|
-
*/
|
|
10
|
-
'use client';
|
|
11
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
-
import React, { useMemo } from 'react';
|
|
13
|
-
import { IoDocumentOutline, IoDownloadOutline } from 'react-icons/io5';
|
|
14
|
-
import { cn } from '../../lib/utils.js';
|
|
15
|
-
import { PREVIEWABLE_TYPES } from '../../lib/constants.js';
|
|
16
|
-
import { LoadingSkeleton } from '../ui/loading_skeleton.js';
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Helper Functions
|
|
19
|
-
// ============================================================================
|
|
20
|
-
/**
|
|
21
|
-
* Check if file is previewable as image
|
|
22
|
-
*/
|
|
23
|
-
function is_image(mime_type) {
|
|
24
|
-
if (!mime_type)
|
|
25
|
-
return false;
|
|
26
|
-
return PREVIEWABLE_TYPES.image.includes(mime_type);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Check if file is previewable as PDF
|
|
30
|
-
*/
|
|
31
|
-
function is_pdf(mime_type) {
|
|
32
|
-
if (!mime_type)
|
|
33
|
-
return false;
|
|
34
|
-
return PREVIEWABLE_TYPES.pdf.includes(mime_type);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Check if file is previewable as text
|
|
38
|
-
*/
|
|
39
|
-
function is_text(mime_type) {
|
|
40
|
-
if (!mime_type)
|
|
41
|
-
return false;
|
|
42
|
-
return PREVIEWABLE_TYPES.text.includes(mime_type);
|
|
43
|
-
}
|
|
44
|
-
function PdfViewer({ url, name }) {
|
|
45
|
-
// Note: In production, this would use hazo_pdf component
|
|
46
|
-
// For now, we use an iframe fallback
|
|
47
|
-
return (_jsx("div", { className: "cls_pdf_viewer w-full h-full flex flex-col", children: _jsx("iframe", { src: `${url}#view=FitH`, title: name, className: "w-full flex-1 border-0 rounded-lg", "aria-label": `PDF document: ${name}` }) }));
|
|
48
|
-
}
|
|
49
|
-
function ImageViewer({ url, name }) {
|
|
50
|
-
return (_jsx("div", { className: "cls_image_viewer w-full h-full flex items-center justify-center p-4 overflow-auto", children: _jsx("img", { src: url, alt: name, className: "max-w-full max-h-full object-contain rounded-lg shadow-sm" }) }));
|
|
51
|
-
}
|
|
52
|
-
function TextViewer({ url, name }) {
|
|
53
|
-
const [content, set_content] = React.useState(null);
|
|
54
|
-
const [is_loading, set_is_loading] = React.useState(true);
|
|
55
|
-
const [error, set_error] = React.useState(null);
|
|
56
|
-
React.useEffect(() => {
|
|
57
|
-
async function fetch_content() {
|
|
58
|
-
try {
|
|
59
|
-
set_is_loading(true);
|
|
60
|
-
const response = await fetch(url);
|
|
61
|
-
if (!response.ok)
|
|
62
|
-
throw new Error('Failed to fetch');
|
|
63
|
-
const text = await response.text();
|
|
64
|
-
set_content(text);
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
set_error('Failed to load text content');
|
|
68
|
-
}
|
|
69
|
-
finally {
|
|
70
|
-
set_is_loading(false);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
fetch_content();
|
|
74
|
-
}, [url]);
|
|
75
|
-
if (is_loading) {
|
|
76
|
-
return _jsx(LoadingSkeleton, { variant: "reference", count: 5 });
|
|
77
|
-
}
|
|
78
|
-
if (error) {
|
|
79
|
-
return (_jsx("div", { className: "cls_text_viewer_error flex items-center justify-center h-full text-muted-foreground", children: error }));
|
|
80
|
-
}
|
|
81
|
-
return (_jsx("div", { className: "cls_text_viewer w-full h-full overflow-auto p-4", children: _jsx("pre", { className: "text-sm font-mono bg-muted p-4 rounded-lg whitespace-pre-wrap break-words", "aria-label": `Text file: ${name}`, children: content }) }));
|
|
82
|
-
}
|
|
83
|
-
function DownloadFallback({ url, name, mime_type }) {
|
|
84
|
-
return (_jsxs("div", { className: "cls_download_fallback flex flex-col items-center justify-center h-full gap-4 p-4", children: [_jsx(IoDocumentOutline, { className: "w-16 h-16 text-muted-foreground" }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "font-medium text-foreground", children: name }), mime_type && (_jsx("p", { className: "text-sm text-muted-foreground mt-1", children: mime_type }))] }), _jsxs("a", { href: url, download: name, className: cn('cls_download_btn', 'flex items-center gap-2 px-4 py-2 rounded-lg', 'bg-primary text-primary-foreground', 'hover:bg-primary/90 transition-colors'), children: [_jsx(IoDownloadOutline, { className: "w-4 h-4" }), "Download"] })] }));
|
|
85
|
-
}
|
|
86
|
-
// ============================================================================
|
|
87
|
-
// Empty State Component
|
|
88
|
-
// ============================================================================
|
|
89
|
-
function EmptyState() {
|
|
90
|
-
return (_jsxs("div", { className: "cls_viewer_empty flex flex-col items-center justify-center h-full gap-2 p-4 text-muted-foreground", children: [_jsx(IoDocumentOutline, { className: "w-12 h-12 opacity-50" }), _jsx("p", { className: "text-sm", children: "Select a document to preview" })] }));
|
|
91
|
-
}
|
|
92
|
-
// ============================================================================
|
|
93
|
-
// Main Component
|
|
94
|
-
// ============================================================================
|
|
95
|
-
export function HazoChatDocumentViewer({ reference, className }) {
|
|
96
|
-
// Determine viewer type based on mime_type
|
|
97
|
-
const viewer_type = useMemo(() => {
|
|
98
|
-
if (!reference)
|
|
99
|
-
return 'empty';
|
|
100
|
-
if (is_pdf(reference.mime_type))
|
|
101
|
-
return 'pdf';
|
|
102
|
-
if (is_image(reference.mime_type))
|
|
103
|
-
return 'image';
|
|
104
|
-
if (is_text(reference.mime_type))
|
|
105
|
-
return 'text';
|
|
106
|
-
return 'download';
|
|
107
|
-
}, [reference]);
|
|
108
|
-
return (_jsxs("div", { className: cn('cls_hazo_chat_document_viewer', 'flex-1 bg-muted/30 rounded-lg overflow-hidden', className), role: "region", "aria-label": "Document viewer", children: [viewer_type === 'empty' && _jsx(EmptyState, {}), viewer_type === 'pdf' && reference && (_jsx(PdfViewer, { url: reference.url, name: reference.name })), viewer_type === 'image' && reference && (_jsx(ImageViewer, { url: reference.url, name: reference.name })), viewer_type === 'text' && reference && (_jsx(TextViewer, { url: reference.url, name: reference.name })), viewer_type === 'download' && reference && (_jsx(DownloadFallback, { url: reference.url, name: reference.name, mime_type: reference.mime_type }))] }));
|
|
109
|
-
}
|
|
110
|
-
HazoChatDocumentViewer.displayName = 'HazoChatDocumentViewer';
|
|
111
|
-
//# sourceMappingURL=hazo_chat_document_viewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_document_viewer.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_document_viewer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatHeader Component
|
|
3
|
-
*
|
|
4
|
-
* Header row for the chat window containing:
|
|
5
|
-
* - Sidebar toggle button (hamburger menu)
|
|
6
|
-
* - Title and subtitle
|
|
7
|
-
* - Close button
|
|
8
|
-
*
|
|
9
|
-
* Uses shadcn/ui Button and Tooltip components.
|
|
10
|
-
*/
|
|
11
|
-
import type { HazoChatHeaderProps } from '../../types/index.js';
|
|
12
|
-
export declare function HazoChatHeader({ title, subtitle, on_close, on_refresh, is_refreshing, on_toggle_sidebar, is_sidebar_open, show_sidebar_toggle, className }: HazoChatHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export declare namespace HazoChatHeader {
|
|
14
|
-
var displayName: string;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=hazo_chat_header.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_header.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_header.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAYhE,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,mBAA2B,EAC3B,SAAS,EACV,EAAE,mBAAmB,2CAiHrB;yBA3He,cAAc"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatHeader Component
|
|
3
|
-
*
|
|
4
|
-
* Header row for the chat window containing:
|
|
5
|
-
* - Sidebar toggle button (hamburger menu)
|
|
6
|
-
* - Title and subtitle
|
|
7
|
-
* - Close button
|
|
8
|
-
*
|
|
9
|
-
* Uses shadcn/ui Button and Tooltip components.
|
|
10
|
-
*/
|
|
11
|
-
'use client';
|
|
12
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
-
import { IoClose, IoMenuOutline, IoRefresh } from 'react-icons/io5';
|
|
14
|
-
import { cn } from '../../lib/utils.js';
|
|
15
|
-
import { Button } from '../ui/button.js';
|
|
16
|
-
import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip.js';
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// Component
|
|
19
|
-
// ============================================================================
|
|
20
|
-
export function HazoChatHeader({ title, subtitle, on_close, on_refresh, is_refreshing, on_toggle_sidebar, is_sidebar_open, show_sidebar_toggle = false, className }) {
|
|
21
|
-
return (_jsxs("header", { className: cn('cls_hazo_chat_header', 'flex items-center justify-between', 'h-14 px-4', 'border-b border-border/40', 'bg-card/80 backdrop-blur-md', 'shadow-sm', className), children: [_jsxs("div", { className: "cls_header_left flex items-center gap-3", children: [show_sidebar_toggle && on_toggle_sidebar && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", onClick: on_toggle_sidebar, className: cn('cls_sidebar_toggle md:hidden', 'h-8 w-8 rounded-md', 'hover:bg-accent hover:text-accent-foreground', 'transition-colors'), "aria-label": is_sidebar_open ? 'Close sidebar' : 'Open sidebar', "aria-expanded": is_sidebar_open, children: _jsx(IoMenuOutline, { className: "h-5 w-5" }) }) }), _jsx(TooltipContent, { side: "bottom", className: "text-xs", children: is_sidebar_open ? 'Close sidebar' : 'Open sidebar' })] })), _jsxs("div", { className: "cls_header_titles flex flex-col gap-0.5", children: [title && (_jsx("h2", { className: "cls_header_title text-sm font-semibold tracking-tight text-foreground", children: title })), subtitle && (_jsx("p", { className: "cls_header_subtitle text-xs font-medium text-muted-foreground", children: subtitle }))] })] }), _jsxs("div", { className: "cls_header_right flex items-center gap-1", children: [on_refresh && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", onClick: on_refresh, disabled: is_refreshing, className: cn('cls_header_refresh', 'h-8 w-8 rounded-md', 'text-muted-foreground', 'hover:bg-accent hover:text-accent-foreground', 'transition-colors'), "aria-label": "Refresh chat history", children: _jsx(IoRefresh, { className: cn('h-4 w-4', is_refreshing && 'animate-spin') }) }) }), _jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Refresh chat" })] })), on_close && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", onClick: on_close, className: cn('cls_header_close', 'h-8 w-8 rounded-md', 'text-muted-foreground', 'hover:bg-destructive/10 hover:text-destructive', 'transition-colors'), "aria-label": "Close chat", children: _jsx(IoClose, { className: "h-4 w-4" }) }) }), _jsx(TooltipContent, { side: "bottom", className: "text-xs", children: "Close chat" })] }))] })] }));
|
|
22
|
-
}
|
|
23
|
-
HazoChatHeader.displayName = 'HazoChatHeader';
|
|
24
|
-
//# sourceMappingURL=hazo_chat_header.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_header.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatInput Component
|
|
3
|
-
*
|
|
4
|
-
* Message input area with:
|
|
5
|
-
* - Text input (shadcn Input component)
|
|
6
|
-
* - Send button (shadcn Button component)
|
|
7
|
-
* - Attachment preview (when attachments exist)
|
|
8
|
-
*
|
|
9
|
-
* Uses shadcn/ui Input and Button components.
|
|
10
|
-
*/
|
|
11
|
-
import type { HazoChatInputProps } from '../../types/index.js';
|
|
12
|
-
export declare function HazoChatInput({ on_send, pending_attachments, on_add_attachment, on_remove_attachment, is_disabled, placeholder, className }: HazoChatInputProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
export declare namespace HazoChatInput {
|
|
14
|
-
var displayName: string;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=hazo_chat_input.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_input.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_input.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAS/D,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,WAAmB,EACnB,WAAiC,EACjC,SAAS,EACV,EAAE,kBAAkB,2CA2GpB;yBAnHe,aAAa"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatInput Component
|
|
3
|
-
*
|
|
4
|
-
* Message input area with:
|
|
5
|
-
* - Text input (shadcn Input component)
|
|
6
|
-
* - Send button (shadcn Button component)
|
|
7
|
-
* - Attachment preview (when attachments exist)
|
|
8
|
-
*
|
|
9
|
-
* Uses shadcn/ui Input and Button components.
|
|
10
|
-
*/
|
|
11
|
-
'use client';
|
|
12
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
-
import { useState, useRef, useCallback } from 'react';
|
|
14
|
-
import { IoSend } from 'react-icons/io5';
|
|
15
|
-
import { cn } from '../../lib/utils.js';
|
|
16
|
-
import { HazoChatAttachmentPreview } from './hazo_chat_attachment_preview.js';
|
|
17
|
-
import { Button } from '../ui/button.js';
|
|
18
|
-
import { Input } from '../ui/input.js';
|
|
19
|
-
// ============================================================================
|
|
20
|
-
// Component
|
|
21
|
-
// ============================================================================
|
|
22
|
-
export function HazoChatInput({ on_send, pending_attachments, on_add_attachment, on_remove_attachment, is_disabled = false, placeholder = 'Type a message...', className }) {
|
|
23
|
-
const [message, set_message] = useState('');
|
|
24
|
-
const input_ref = useRef(null);
|
|
25
|
-
// -------------------------------------------------------------------------
|
|
26
|
-
// Handle text change
|
|
27
|
-
// -------------------------------------------------------------------------
|
|
28
|
-
const handle_change = useCallback((e) => {
|
|
29
|
-
set_message(e.target.value);
|
|
30
|
-
}, []);
|
|
31
|
-
// -------------------------------------------------------------------------
|
|
32
|
-
// Handle send
|
|
33
|
-
// -------------------------------------------------------------------------
|
|
34
|
-
const handle_send = useCallback(() => {
|
|
35
|
-
const trimmed = message.trim();
|
|
36
|
-
const has_attachments = pending_attachments.length > 0;
|
|
37
|
-
if (!trimmed && !has_attachments)
|
|
38
|
-
return;
|
|
39
|
-
if (is_disabled)
|
|
40
|
-
return;
|
|
41
|
-
// Convert pending attachments to uploaded files format
|
|
42
|
-
const uploaded_files = pending_attachments
|
|
43
|
-
.filter((a) => a.upload_status === 'uploaded' || a.upload_status === 'pending')
|
|
44
|
-
.map((a) => ({
|
|
45
|
-
id: a.id,
|
|
46
|
-
name: a.file.name,
|
|
47
|
-
url: '', // Will be filled after upload
|
|
48
|
-
mime_type: a.file.type,
|
|
49
|
-
file_size: a.file.size
|
|
50
|
-
}));
|
|
51
|
-
on_send(trimmed, uploaded_files);
|
|
52
|
-
set_message('');
|
|
53
|
-
// Reset input
|
|
54
|
-
if (input_ref.current) {
|
|
55
|
-
input_ref.current.value = '';
|
|
56
|
-
}
|
|
57
|
-
}, [message, pending_attachments, is_disabled, on_send]);
|
|
58
|
-
// -------------------------------------------------------------------------
|
|
59
|
-
// Handle keyboard events
|
|
60
|
-
// -------------------------------------------------------------------------
|
|
61
|
-
const handle_key_down = useCallback((e) => {
|
|
62
|
-
// Send on Enter
|
|
63
|
-
if (e.key === 'Enter') {
|
|
64
|
-
e.preventDefault();
|
|
65
|
-
handle_send();
|
|
66
|
-
}
|
|
67
|
-
}, [handle_send]);
|
|
68
|
-
// -------------------------------------------------------------------------
|
|
69
|
-
// Check if can send
|
|
70
|
-
// -------------------------------------------------------------------------
|
|
71
|
-
const can_send = !is_disabled && (message.trim().length > 0 || pending_attachments.length > 0);
|
|
72
|
-
return (_jsxs("div", { className: cn('cls_hazo_chat_input', 'border-t bg-background p-4', className), children: [pending_attachments.length > 0 && (_jsx(HazoChatAttachmentPreview, { attachments: pending_attachments, on_remove: on_remove_attachment })), _jsxs("div", { className: "cls_input_row flex items-center gap-2", children: [_jsx(Input, { ref: input_ref, type: "text", value: message, onChange: handle_change, onKeyDown: handle_key_down, placeholder: placeholder, disabled: is_disabled, className: "cls_message_input flex-1", "aria-label": "Message input" }), _jsx(Button, { variant: "default", onClick: handle_send, disabled: !can_send, className: "cls_send_btn", "aria-label": "Send message", children: _jsx(IoSend, { className: "w-4 h-4" }) })] })] }));
|
|
73
|
-
}
|
|
74
|
-
HazoChatInput.displayName = 'HazoChatInput';
|
|
75
|
-
//# sourceMappingURL=hazo_chat_input.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_input.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HazoChatMessages Component
|
|
3
|
-
*
|
|
4
|
-
* Scrollable message list with:
|
|
5
|
-
* - Infinite scroll for older messages
|
|
6
|
-
* - Auto-scroll to new messages
|
|
7
|
-
* - Scroll to highlighted message
|
|
8
|
-
* - Empty and loading states
|
|
9
|
-
*
|
|
10
|
-
* Uses shadcn/ui ScrollArea component.
|
|
11
|
-
*/
|
|
12
|
-
import type { HazoChatMessagesProps } from '../../types/index.js';
|
|
13
|
-
export declare function HazoChatMessages({ messages, current_user_id, timezone, is_loading, has_more, on_load_more, on_delete_message, on_scroll_to_message, highlighted_message_id, show_delete_button, bubble_radius, className }: HazoChatMessagesProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
export declare namespace HazoChatMessages {
|
|
15
|
-
var displayName: string;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=hazo_chat_messages.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat_messages.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_messages.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,qBAAqB,EAAqB,MAAM,sBAAsB,CAAC;AAUrF,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAyB,EACzB,aAAyB,EACzB,SAAS,EACV,EAAE,qBAAqB,2CA4JvB;yBAzKe,gBAAgB"}
|