hazo_chat 1.1.0
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 +437 -0
- package/SETUP_CHECKLIST.md +858 -0
- package/dist/components/hazo_chat/hazo_chat.d.ts +16 -0
- package/dist/components/hazo_chat/hazo_chat.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat.js +155 -0
- package/dist/components/hazo_chat/hazo_chat.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts +17 -0
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.js +60 -0
- package/dist/components/hazo_chat/hazo_chat_attachment_preview.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_context.d.ts +36 -0
- package/dist/components/hazo_chat/hazo_chat_context.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_context.js +249 -0
- package/dist/components/hazo_chat/hazo_chat_context.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts +15 -0
- package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_document_viewer.js +111 -0
- package/dist/components/hazo_chat/hazo_chat_document_viewer.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_header.d.ts +16 -0
- package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_header.js +24 -0
- package/dist/components/hazo_chat/hazo_chat_header.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_input.d.ts +18 -0
- package/dist/components/hazo_chat/hazo_chat_input.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_input.js +134 -0
- package/dist/components/hazo_chat/hazo_chat_input.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_messages.d.ts +17 -0
- package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_messages.js +109 -0
- package/dist/components/hazo_chat/hazo_chat_messages.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts +16 -0
- package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_reference_list.js +59 -0
- package/dist/components/hazo_chat/hazo_chat_reference_list.js.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts +18 -0
- package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts.map +1 -0
- package/dist/components/hazo_chat/hazo_chat_sidebar.js +72 -0
- package/dist/components/hazo_chat/hazo_chat_sidebar.js.map +1 -0
- package/dist/components/hazo_chat/index.d.ts +16 -0
- package/dist/components/hazo_chat/index.d.ts.map +1 -0
- package/dist/components/hazo_chat/index.js +19 -0
- package/dist/components/hazo_chat/index.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +11 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +13 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +28 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +16 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +36 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +18 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +47 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/chat_bubble.d.ts +19 -0
- package/dist/components/ui/chat_bubble.d.ts.map +1 -0
- package/dist/components/ui/chat_bubble.js +101 -0
- package/dist/components/ui/chat_bubble.js.map +1 -0
- package/dist/components/ui/index.d.ts +18 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +20 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/components/ui/input.d.ts +11 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +18 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/loading_skeleton.d.ts +19 -0
- package/dist/components/ui/loading_skeleton.d.ts.map +1 -0
- package/dist/components/ui/loading_skeleton.js +30 -0
- package/dist/components/ui/loading_skeleton.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +12 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +25 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/separator.d.ts +11 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +18 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +9 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +16 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +11 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +18 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +14 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +30 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use_chat_messages.d.ts +25 -0
- package/dist/hooks/use_chat_messages.d.ts.map +1 -0
- package/dist/hooks/use_chat_messages.js +430 -0
- package/dist/hooks/use_chat_messages.js.map +1 -0
- package/dist/hooks/use_chat_references.d.ts +17 -0
- package/dist/hooks/use_chat_references.d.ts.map +1 -0
- package/dist/hooks/use_chat_references.js +133 -0
- package/dist/hooks/use_chat_references.js.map +1 -0
- package/dist/hooks/use_file_upload.d.ts +23 -0
- package/dist/hooks/use_file_upload.d.ts.map +1 -0
- package/dist/hooks/use_file_upload.js +212 -0
- package/dist/hooks/use_file_upload.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +41 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +93 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +39 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +70 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/index.d.ts +9 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +9 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/utils.d.ts +17 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +20 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/types/index.d.ts +367 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazoChat Component
|
|
3
|
+
*
|
|
4
|
+
* Main chat UI component with:
|
|
5
|
+
* - Responsive grid layout (sidebar + chat area)
|
|
6
|
+
* - Context provider for shared state
|
|
7
|
+
* - Integration with hazo_connect, hazo_auth
|
|
8
|
+
* - Document viewer and reference list
|
|
9
|
+
* - Message polling and pagination
|
|
10
|
+
*/
|
|
11
|
+
import type { HazoChatProps } from '../../types/index.js';
|
|
12
|
+
export declare function HazoChat(props: HazoChatProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare namespace HazoChat {
|
|
14
|
+
var displayName: string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=hazo_chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_chat.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,sBAAsB,CAAC;AAkT9B,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CA8B5C;yBA9Be,QAAQ"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazoChat Component
|
|
3
|
+
*
|
|
4
|
+
* Main chat UI component with:
|
|
5
|
+
* - Responsive grid layout (sidebar + chat area)
|
|
6
|
+
* - Context provider for shared state
|
|
7
|
+
* - Integration with hazo_connect, hazo_auth
|
|
8
|
+
* - Document viewer and reference list
|
|
9
|
+
* - Message polling and pagination
|
|
10
|
+
*/
|
|
11
|
+
'use client';
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useCallback, useMemo } from 'react';
|
|
14
|
+
import { cn } from '../../lib/utils.js';
|
|
15
|
+
import { DEFAULT_TIMEZONE, DEFAULT_POLLING_INTERVAL, DEFAULT_MESSAGES_PER_PAGE } from '../../lib/constants.js';
|
|
16
|
+
// Sub-components
|
|
17
|
+
import { HazoChatProvider, useHazoChatContext } from './hazo_chat_context.js';
|
|
18
|
+
import { HazoChatHeader } from './hazo_chat_header.js';
|
|
19
|
+
import { HazoChatReferenceList } from './hazo_chat_reference_list.js';
|
|
20
|
+
import { HazoChatDocumentViewer } from './hazo_chat_document_viewer.js';
|
|
21
|
+
import { HazoChatMessages } from './hazo_chat_messages.js';
|
|
22
|
+
import { HazoChatInput } from './hazo_chat_input.js';
|
|
23
|
+
import { TooltipProvider } from '../ui/tooltip.js';
|
|
24
|
+
// Hooks
|
|
25
|
+
import { useChatMessages } from '../../hooks/use_chat_messages.js';
|
|
26
|
+
import { useChatReferences } from '../../hooks/use_chat_references.js';
|
|
27
|
+
import { useFileUpload } from '../../hooks/use_file_upload.js';
|
|
28
|
+
function HazoChatInner({ hazo_connect, receiver_user_id, document_save_location, reference_id, reference_type = 'chat', additional_references = [], timezone = DEFAULT_TIMEZONE, title, subtitle, on_close, className, polling_interval = DEFAULT_POLLING_INTERVAL, messages_per_page = DEFAULT_MESSAGES_PER_PAGE }) {
|
|
29
|
+
// Get context
|
|
30
|
+
const { current_user, selected_reference, highlighted_message_id, pending_attachments, is_sidebar_open, set_selected_reference, set_highlighted_message_id, add_pending_attachment, remove_pending_attachment, clear_pending_attachments, toggle_sidebar, set_sidebar_open, add_reference } = useHazoChatContext();
|
|
31
|
+
// -------------------------------------------------------------------------
|
|
32
|
+
// Messages hook
|
|
33
|
+
// -------------------------------------------------------------------------
|
|
34
|
+
const { messages, is_loading: is_loading_messages, has_more, load_more, send_message, delete_message, polling_status } = useChatMessages({
|
|
35
|
+
hazo_connect,
|
|
36
|
+
hazo_auth: { hazo_get_auth: async () => current_user ? { id: current_user.id } : null, hazo_get_user_profiles: async () => [] },
|
|
37
|
+
reference_id,
|
|
38
|
+
receiver_user_id,
|
|
39
|
+
polling_interval,
|
|
40
|
+
messages_per_page
|
|
41
|
+
});
|
|
42
|
+
// -------------------------------------------------------------------------
|
|
43
|
+
// References hook
|
|
44
|
+
// -------------------------------------------------------------------------
|
|
45
|
+
const { references, select_reference, get_message_for_reference } = useChatReferences({
|
|
46
|
+
messages,
|
|
47
|
+
initial_references: additional_references.map((ref) => ({
|
|
48
|
+
...ref,
|
|
49
|
+
scope: ref.scope || 'field'
|
|
50
|
+
})),
|
|
51
|
+
on_selection_change: (ref) => {
|
|
52
|
+
set_selected_reference(ref);
|
|
53
|
+
// If ref has message_id, highlight it
|
|
54
|
+
if (ref?.message_id) {
|
|
55
|
+
set_highlighted_message_id(ref.message_id);
|
|
56
|
+
// Close sidebar on mobile after selection
|
|
57
|
+
set_sidebar_open(false);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
// -------------------------------------------------------------------------
|
|
62
|
+
// File upload hook
|
|
63
|
+
// -------------------------------------------------------------------------
|
|
64
|
+
const { add_files, remove_file, upload_all, is_uploading } = useFileUpload({
|
|
65
|
+
upload_location: document_save_location
|
|
66
|
+
});
|
|
67
|
+
// -------------------------------------------------------------------------
|
|
68
|
+
// Handle send message
|
|
69
|
+
// -------------------------------------------------------------------------
|
|
70
|
+
const handle_send = useCallback(async (text, attachments) => {
|
|
71
|
+
if (!current_user || !reference_id)
|
|
72
|
+
return;
|
|
73
|
+
// Upload pending files first
|
|
74
|
+
const uploaded = await upload_all();
|
|
75
|
+
// Build reference list from attachments
|
|
76
|
+
const attachment_refs = [
|
|
77
|
+
...attachments,
|
|
78
|
+
...uploaded
|
|
79
|
+
].map((file) => ({
|
|
80
|
+
id: file.id,
|
|
81
|
+
type: 'document',
|
|
82
|
+
scope: 'chat',
|
|
83
|
+
name: file.name,
|
|
84
|
+
url: file.url,
|
|
85
|
+
mime_type: file.mime_type,
|
|
86
|
+
file_size: file.file_size
|
|
87
|
+
}));
|
|
88
|
+
const payload = {
|
|
89
|
+
reference_id,
|
|
90
|
+
reference_type,
|
|
91
|
+
receiver_user_id,
|
|
92
|
+
message_text: text,
|
|
93
|
+
reference_list: attachment_refs.length > 0 ? attachment_refs : undefined
|
|
94
|
+
};
|
|
95
|
+
const success = await send_message(payload);
|
|
96
|
+
if (success) {
|
|
97
|
+
clear_pending_attachments();
|
|
98
|
+
// Add new references to the list
|
|
99
|
+
attachment_refs.forEach((ref) => add_reference(ref));
|
|
100
|
+
}
|
|
101
|
+
}, [
|
|
102
|
+
current_user,
|
|
103
|
+
reference_id,
|
|
104
|
+
reference_type,
|
|
105
|
+
receiver_user_id,
|
|
106
|
+
upload_all,
|
|
107
|
+
send_message,
|
|
108
|
+
clear_pending_attachments,
|
|
109
|
+
add_reference
|
|
110
|
+
]);
|
|
111
|
+
// -------------------------------------------------------------------------
|
|
112
|
+
// Handle add attachment
|
|
113
|
+
// -------------------------------------------------------------------------
|
|
114
|
+
const handle_add_attachment = useCallback((files) => {
|
|
115
|
+
files.forEach((file) => {
|
|
116
|
+
add_pending_attachment(file);
|
|
117
|
+
});
|
|
118
|
+
add_files(files);
|
|
119
|
+
}, [add_pending_attachment, add_files]);
|
|
120
|
+
// -------------------------------------------------------------------------
|
|
121
|
+
// Handle remove attachment
|
|
122
|
+
// -------------------------------------------------------------------------
|
|
123
|
+
const handle_remove_attachment = useCallback((attachment_id) => {
|
|
124
|
+
remove_pending_attachment(attachment_id);
|
|
125
|
+
remove_file(attachment_id);
|
|
126
|
+
}, [remove_pending_attachment, remove_file]);
|
|
127
|
+
// -------------------------------------------------------------------------
|
|
128
|
+
// Handle reference selection
|
|
129
|
+
// -------------------------------------------------------------------------
|
|
130
|
+
const handle_reference_select = useCallback((reference) => {
|
|
131
|
+
select_reference(reference);
|
|
132
|
+
}, [select_reference]);
|
|
133
|
+
// -------------------------------------------------------------------------
|
|
134
|
+
// Render
|
|
135
|
+
// -------------------------------------------------------------------------
|
|
136
|
+
return (_jsxs("div", { className: cn('cls_hazo_chat', 'flex flex-col h-full w-full', 'bg-background rounded-lg border overflow-hidden', className), children: [_jsx(HazoChatHeader, { title: title, subtitle: subtitle, on_close: on_close, on_toggle_sidebar: toggle_sidebar, is_sidebar_open: is_sidebar_open }), _jsx("div", { className: "cls_references_row border-b bg-muted/30", children: _jsxs("div", { className: "cls_references_container px-3 py-2", children: [_jsx("h3", { className: "text-[10px] font-medium text-muted-foreground uppercase tracking-wider mb-1.5", children: "References" }), _jsx(HazoChatReferenceList, { references: references, selected_reference_id: selected_reference?.id, on_select: handle_reference_select, className: "flex-wrap" })] }) }), _jsxs("div", { className: "cls_main_content flex flex-1 overflow-hidden relative", children: [_jsx("div", { className: cn('cls_doc_preview_column', 'border-r bg-muted/20', 'w-[280px] md:w-[320px] lg:w-[380px]', 'flex-shrink-0', 'flex flex-col',
|
|
137
|
+
// Mobile: hidden by default, shown when sidebar is open
|
|
138
|
+
is_sidebar_open ? 'flex' : 'hidden md:flex'), children: _jsx(HazoChatDocumentViewer, { reference: selected_reference || undefined }) }), _jsx("div", { className: "cls_chat_column flex flex-col flex-1 min-w-0", children: _jsx(HazoChatMessages, { messages: messages, current_user_id: current_user?.id || '', timezone: timezone, is_loading: is_loading_messages, has_more: has_more, on_load_more: load_more, on_delete_message: delete_message, highlighted_message_id: highlighted_message_id || undefined }) })] }), _jsx("div", { className: "cls_input_row border-t bg-background", children: _jsx(HazoChatInput, { on_send: handle_send, pending_attachments: pending_attachments, on_add_attachment: handle_add_attachment, on_remove_attachment: handle_remove_attachment, is_disabled: !current_user || is_uploading }) }), polling_status !== 'connected' && (_jsx("div", { className: cn('cls_connection_status', 'absolute bottom-20 left-1/2 -translate-x-1/2', 'px-3 py-1.5 rounded-full text-xs font-medium z-10', polling_status === 'reconnecting'
|
|
139
|
+
? 'bg-yellow-100 text-yellow-800'
|
|
140
|
+
: 'bg-red-100 text-red-800'), children: polling_status === 'reconnecting' ? 'Reconnecting...' : 'Connection error' }))] }));
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// Main Component (with Provider)
|
|
144
|
+
// ============================================================================
|
|
145
|
+
export function HazoChat(props) {
|
|
146
|
+
const { hazo_auth, additional_references = [], ...inner_props } = props;
|
|
147
|
+
// Convert ReferenceItem[] to ChatReferenceItem[]
|
|
148
|
+
const initial_refs = useMemo(() => additional_references.map((ref) => ({
|
|
149
|
+
...ref,
|
|
150
|
+
scope: ref.scope || 'field'
|
|
151
|
+
})), [additional_references]);
|
|
152
|
+
return (_jsx(TooltipProvider, { children: _jsx(HazoChatProvider, { hazo_auth: hazo_auth, initial_references: initial_refs, children: _jsx(HazoChatInner, { ...inner_props, additional_references: additional_references }) }) }));
|
|
153
|
+
}
|
|
154
|
+
HazoChat.displayName = 'HazoChat';
|
|
155
|
+
//# sourceMappingURL=hazo_chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_chat.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazoChatAttachmentPreview Component
|
|
3
|
+
*
|
|
4
|
+
* Shows thumbnails of pending file attachments before sending with:
|
|
5
|
+
* - Image previews for image files
|
|
6
|
+
* - File icon for non-image files
|
|
7
|
+
* - Upload status indicator
|
|
8
|
+
* - Remove button
|
|
9
|
+
*
|
|
10
|
+
* Uses shadcn/ui Button and Badge components.
|
|
11
|
+
*/
|
|
12
|
+
import type { HazoChatAttachmentPreviewProps } from '../../types/index.js';
|
|
13
|
+
export declare function HazoChatAttachmentPreview({ attachments, on_remove, className }: HazoChatAttachmentPreviewProps): import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
export declare namespace HazoChatAttachmentPreview {
|
|
15
|
+
var displayName: string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=hazo_chat_attachment_preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_chat_attachment_preview.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_attachment_preview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,8BAA8B,EAAqB,MAAM,sBAAsB,CAAC;AA+H9F,wBAAgB,yBAAyB,CAAC,EACxC,WAAW,EACX,SAAS,EACT,SAAS,EACV,EAAE,8BAA8B,kDA+BhC;yBAnCe,yBAAyB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazoChatAttachmentPreview Component
|
|
3
|
+
*
|
|
4
|
+
* Shows thumbnails of pending file attachments before sending with:
|
|
5
|
+
* - Image previews for image files
|
|
6
|
+
* - File icon for non-image files
|
|
7
|
+
* - Upload status indicator
|
|
8
|
+
* - Remove button
|
|
9
|
+
*
|
|
10
|
+
* Uses shadcn/ui Button and Badge components.
|
|
11
|
+
*/
|
|
12
|
+
'use client';
|
|
13
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { useCallback } from 'react';
|
|
15
|
+
import { IoClose, IoDocumentOutline, IoAlertCircle } from 'react-icons/io5';
|
|
16
|
+
import { cn } from '../../lib/utils.js';
|
|
17
|
+
import { Button } from '../ui/button.js';
|
|
18
|
+
import { Badge } from '../ui/badge.js';
|
|
19
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip.js';
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Helper Functions
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Get file extension from filename
|
|
25
|
+
*/
|
|
26
|
+
function get_file_extension(filename) {
|
|
27
|
+
const parts = filename.split('.');
|
|
28
|
+
return parts.length > 1 ? parts.pop()?.toUpperCase() || '' : '';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format file size
|
|
32
|
+
*/
|
|
33
|
+
function format_file_size(bytes) {
|
|
34
|
+
if (bytes < 1024)
|
|
35
|
+
return `${bytes} B`;
|
|
36
|
+
if (bytes < 1024 * 1024)
|
|
37
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
38
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
39
|
+
}
|
|
40
|
+
function AttachmentItem({ attachment, on_remove }) {
|
|
41
|
+
const extension = get_file_extension(attachment.file.name);
|
|
42
|
+
const is_image = attachment.file.type.startsWith('image/');
|
|
43
|
+
const is_uploading = attachment.upload_status === 'uploading';
|
|
44
|
+
const has_error = attachment.upload_status === 'failed';
|
|
45
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: cn('cls_attachment_item', 'relative group', 'w-16 h-16 rounded-lg overflow-hidden', 'bg-muted border', has_error && 'border-destructive'), children: [is_image && attachment.preview_url ? (_jsx("img", { src: attachment.preview_url, alt: attachment.file.name, className: "w-full h-full object-cover" })) : (_jsxs("div", { className: "w-full h-full flex flex-col items-center justify-center", children: [_jsx(IoDocumentOutline, { className: "w-6 h-6 text-muted-foreground" }), _jsx("span", { className: "text-[8px] font-medium text-muted-foreground mt-1", children: extension })] })), is_uploading && (_jsx("div", { className: "absolute inset-0 bg-black/50 flex items-center justify-center", children: _jsx("div", { className: "w-6 h-6 border-2 border-white border-t-transparent rounded-full animate-spin" }) })), has_error && (_jsx("div", { className: "absolute inset-0 bg-destructive/20 flex items-center justify-center", children: _jsx(IoAlertCircle, { className: "w-6 h-6 text-destructive" }) })), _jsx(Button, { variant: "ghost", size: "icon", onClick: on_remove, className: cn('cls_attachment_remove', 'absolute top-0.5 right-0.5', 'w-5 h-5 p-0', 'bg-black/60 text-white hover:bg-black/80', 'opacity-0 group-hover:opacity-100 transition-opacity'), "aria-label": `Remove ${attachment.file.name}`, children: _jsx(IoClose, { className: "w-3 h-3" }) }), _jsx(Badge, { variant: "secondary", className: "absolute bottom-0.5 left-0.5 right-0.5 text-[8px] px-1 py-0 justify-center bg-black/60 text-white border-0", children: format_file_size(attachment.file.size) })] }) }), _jsxs(TooltipContent, { children: [_jsx("p", { className: "font-medium", children: attachment.file.name }), _jsx("p", { className: "text-xs text-muted-foreground", children: format_file_size(attachment.file.size) })] })] }));
|
|
46
|
+
}
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// Main Component
|
|
49
|
+
// ============================================================================
|
|
50
|
+
export function HazoChatAttachmentPreview({ attachments, on_remove, className }) {
|
|
51
|
+
const handle_remove = useCallback((attachment_id) => {
|
|
52
|
+
on_remove(attachment_id);
|
|
53
|
+
}, [on_remove]);
|
|
54
|
+
if (attachments.length === 0) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return (_jsx("div", { className: cn('cls_hazo_chat_attachment_preview', 'flex flex-wrap gap-2 p-2 border-t bg-muted/30', className), role: "list", "aria-label": "Pending attachments", children: attachments.map((attachment) => (_jsx(AttachmentItem, { attachment: attachment, on_remove: () => handle_remove(attachment.id) }, attachment.id))) }));
|
|
58
|
+
}
|
|
59
|
+
HazoChatAttachmentPreview.displayName = 'HazoChatAttachmentPreview';
|
|
60
|
+
//# sourceMappingURL=hazo_chat_attachment_preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_chat_attachment_preview.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_attachment_preview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,CAAC;;AAEb,OAAc,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC;AAWD,SAAS,cAAc,CAAC,EAAE,UAAU,EAAE,SAAS,EAAuB;IACpE,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,KAAK,WAAW,CAAC;IAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,KAAK,QAAQ,CAAC;IAExD,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,eACE,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,gBAAgB,EAChB,sCAAsC,EACtC,iBAAiB,EACjB,SAAS,IAAI,oBAAoB,CAClC,aAGA,QAAQ,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CACpC,cACE,GAAG,EAAE,UAAU,CAAC,WAAW,EAC3B,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EACzB,SAAS,EAAC,4BAA4B,GACtC,CACH,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,yDAAyD,aACtE,KAAC,iBAAiB,IAAC,SAAS,EAAC,+BAA+B,GAAG,EAC/D,eAAM,SAAS,EAAC,mDAAmD,YAChE,SAAS,GACL,IACH,CACP,EAGA,YAAY,IAAI,CACf,cAAK,SAAS,EAAC,+DAA+D,YAC5E,cAAK,SAAS,EAAC,8EAA8E,GAAG,GAC5F,CACP,EAGA,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,qEAAqE,YAClF,KAAC,aAAa,IAAC,SAAS,EAAC,0BAA0B,GAAG,GAClD,CACP,EAGD,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,EAAE,CACX,uBAAuB,EACvB,4BAA4B,EAC5B,aAAa,EACb,0CAA0C,EAC1C,sDAAsD,CACvD,gBACW,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAE5C,KAAC,OAAO,IAAC,SAAS,EAAC,SAAS,GAAG,GACxB,EAGT,KAAC,KAAK,IACJ,OAAO,EAAC,WAAW,EACnB,SAAS,EAAC,4GAA4G,YAErH,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GACjC,IACJ,GACS,EACjB,MAAC,cAAc,eACb,YAAG,SAAS,EAAC,aAAa,YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,GAAK,EACrD,YAAG,SAAS,EAAC,+BAA+B,YACzC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GACrC,IACW,IACT,CACX,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,UAAU,yBAAyB,CAAC,EACxC,WAAW,EACX,SAAS,EACT,SAAS,EACsB;IAC/B,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,aAAqB,EAAE,EAAE;QACxB,SAAS,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,kCAAkC,EAClC,+CAA+C,EAC/C,SAAS,CACV,EACD,IAAI,EAAC,MAAM,gBACA,qBAAqB,YAE/B,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAC/B,KAAC,cAAc,IAEb,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,IAFxC,UAAU,CAAC,EAAE,CAGlB,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,yBAAyB,CAAC,WAAW,GAAG,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazoChatContext - React context for shared state management
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized state management for:
|
|
5
|
+
* - Selected reference/document
|
|
6
|
+
* - Current user profile (cached)
|
|
7
|
+
* - Pending file attachments
|
|
8
|
+
* - Sidebar collapsed state (mobile)
|
|
9
|
+
* - Polling connection status
|
|
10
|
+
* - Error handling
|
|
11
|
+
*/
|
|
12
|
+
import React, { type ReactNode } from 'react';
|
|
13
|
+
import type { HazoChatContextValue, ChatReferenceItem, HazoAuthInstance } from '../../types/index.js';
|
|
14
|
+
declare const HazoChatContext: React.Context<HazoChatContextValue | null>;
|
|
15
|
+
interface HazoChatProviderProps {
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
hazo_auth: HazoAuthInstance;
|
|
18
|
+
initial_references?: ChatReferenceItem[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* HazoChatProvider - Context provider for HazoChat component tree
|
|
22
|
+
*
|
|
23
|
+
* @param children - Child components
|
|
24
|
+
* @param hazo_auth - Authentication service instance
|
|
25
|
+
* @param initial_references - Initial references from props
|
|
26
|
+
*/
|
|
27
|
+
export declare function HazoChatProvider({ children, hazo_auth, initial_references }: HazoChatProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
/**
|
|
29
|
+
* useHazoChatContext - Hook to access HazoChat context
|
|
30
|
+
*
|
|
31
|
+
* @throws Error if used outside of HazoChatProvider
|
|
32
|
+
* @returns HazoChatContextValue
|
|
33
|
+
*/
|
|
34
|
+
export declare function useHazoChatContext(): HazoChatContextValue;
|
|
35
|
+
export { HazoChatContext };
|
|
36
|
+
//# sourceMappingURL=hazo_chat_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_chat_context.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,oBAAoB,EAEpB,iBAAiB,EAIjB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAyH9B,QAAA,MAAM,eAAe,4CAAmD,CAAC;AAMzE,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,kBAAuB,EACxB,EAAE,qBAAqB,2CAgKvB;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,oBAAoB,CAUzD;AAMD,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HazoChatContext - React context for shared state management
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized state management for:
|
|
5
|
+
* - Selected reference/document
|
|
6
|
+
* - Current user profile (cached)
|
|
7
|
+
* - Pending file attachments
|
|
8
|
+
* - Sidebar collapsed state (mobile)
|
|
9
|
+
* - Polling connection status
|
|
10
|
+
* - Error handling
|
|
11
|
+
*/
|
|
12
|
+
'use client';
|
|
13
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
+
import { createContext, useContext, useReducer, useCallback, useEffect, useMemo } from 'react';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Initial State
|
|
17
|
+
// ============================================================================
|
|
18
|
+
const initial_state = {
|
|
19
|
+
current_user: null,
|
|
20
|
+
selected_reference: null,
|
|
21
|
+
highlighted_message_id: null,
|
|
22
|
+
pending_attachments: [],
|
|
23
|
+
is_sidebar_open: false,
|
|
24
|
+
polling_status: 'connected',
|
|
25
|
+
all_references: [],
|
|
26
|
+
error_message: null
|
|
27
|
+
};
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Reducer
|
|
30
|
+
// ============================================================================
|
|
31
|
+
function hazo_chat_reducer(state, action) {
|
|
32
|
+
switch (action.type) {
|
|
33
|
+
case 'SET_CURRENT_USER':
|
|
34
|
+
return { ...state, current_user: action.payload };
|
|
35
|
+
case 'SET_SELECTED_REFERENCE':
|
|
36
|
+
return { ...state, selected_reference: action.payload };
|
|
37
|
+
case 'SET_HIGHLIGHTED_MESSAGE_ID':
|
|
38
|
+
return { ...state, highlighted_message_id: action.payload };
|
|
39
|
+
case 'ADD_PENDING_ATTACHMENT':
|
|
40
|
+
return {
|
|
41
|
+
...state,
|
|
42
|
+
pending_attachments: [...state.pending_attachments, action.payload]
|
|
43
|
+
};
|
|
44
|
+
case 'REMOVE_PENDING_ATTACHMENT':
|
|
45
|
+
return {
|
|
46
|
+
...state,
|
|
47
|
+
pending_attachments: state.pending_attachments.filter((attachment) => attachment.id !== action.payload)
|
|
48
|
+
};
|
|
49
|
+
case 'UPDATE_PENDING_ATTACHMENT':
|
|
50
|
+
return {
|
|
51
|
+
...state,
|
|
52
|
+
pending_attachments: state.pending_attachments.map((attachment) => attachment.id === action.payload.id
|
|
53
|
+
? { ...attachment, ...action.payload.updates }
|
|
54
|
+
: attachment)
|
|
55
|
+
};
|
|
56
|
+
case 'CLEAR_PENDING_ATTACHMENTS':
|
|
57
|
+
// Revoke any object URLs to prevent memory leaks
|
|
58
|
+
state.pending_attachments.forEach((attachment) => {
|
|
59
|
+
if (attachment.preview_url) {
|
|
60
|
+
URL.revokeObjectURL(attachment.preview_url);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return { ...state, pending_attachments: [] };
|
|
64
|
+
case 'TOGGLE_SIDEBAR':
|
|
65
|
+
return { ...state, is_sidebar_open: !state.is_sidebar_open };
|
|
66
|
+
case 'SET_SIDEBAR_OPEN':
|
|
67
|
+
return { ...state, is_sidebar_open: action.payload };
|
|
68
|
+
case 'SET_POLLING_STATUS':
|
|
69
|
+
return { ...state, polling_status: action.payload };
|
|
70
|
+
case 'ADD_REFERENCE':
|
|
71
|
+
// Check if reference already exists
|
|
72
|
+
if (state.all_references.some((ref) => ref.id === action.payload.id)) {
|
|
73
|
+
return state;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
...state,
|
|
77
|
+
all_references: [...state.all_references, action.payload]
|
|
78
|
+
};
|
|
79
|
+
case 'SET_ALL_REFERENCES':
|
|
80
|
+
return { ...state, all_references: action.payload };
|
|
81
|
+
case 'SET_ERROR_MESSAGE':
|
|
82
|
+
return { ...state, error_message: action.payload };
|
|
83
|
+
default:
|
|
84
|
+
return state;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// ============================================================================
|
|
88
|
+
// Context
|
|
89
|
+
// ============================================================================
|
|
90
|
+
const HazoChatContext = createContext(null);
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// Provider Component
|
|
93
|
+
// ============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* HazoChatProvider - Context provider for HazoChat component tree
|
|
96
|
+
*
|
|
97
|
+
* @param children - Child components
|
|
98
|
+
* @param hazo_auth - Authentication service instance
|
|
99
|
+
* @param initial_references - Initial references from props
|
|
100
|
+
*/
|
|
101
|
+
export function HazoChatProvider({ children, hazo_auth, initial_references = [] }) {
|
|
102
|
+
const [state, dispatch] = useReducer(hazo_chat_reducer, {
|
|
103
|
+
...initial_state,
|
|
104
|
+
all_references: initial_references
|
|
105
|
+
});
|
|
106
|
+
// -------------------------------------------------------------------------
|
|
107
|
+
// Load current user on mount
|
|
108
|
+
// -------------------------------------------------------------------------
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
async function load_current_user() {
|
|
111
|
+
try {
|
|
112
|
+
const auth_user = await hazo_auth.hazo_get_auth();
|
|
113
|
+
if (auth_user) {
|
|
114
|
+
const profiles = await hazo_auth.hazo_get_user_profiles([auth_user.id]);
|
|
115
|
+
if (profiles.length > 0) {
|
|
116
|
+
dispatch({ type: 'SET_CURRENT_USER', payload: profiles[0] });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('[HazoChatContext] Failed to load current user:', error);
|
|
122
|
+
dispatch({
|
|
123
|
+
type: 'SET_ERROR_MESSAGE',
|
|
124
|
+
payload: 'Failed to authenticate user'
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
load_current_user();
|
|
129
|
+
}, [hazo_auth]);
|
|
130
|
+
// -------------------------------------------------------------------------
|
|
131
|
+
// Action creators
|
|
132
|
+
// -------------------------------------------------------------------------
|
|
133
|
+
const set_selected_reference = useCallback((reference) => {
|
|
134
|
+
dispatch({ type: 'SET_SELECTED_REFERENCE', payload: reference });
|
|
135
|
+
// Also set highlighted message if reference has a message_id
|
|
136
|
+
if (reference?.message_id) {
|
|
137
|
+
dispatch({
|
|
138
|
+
type: 'SET_HIGHLIGHTED_MESSAGE_ID',
|
|
139
|
+
payload: reference.message_id
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}, []);
|
|
143
|
+
const set_highlighted_message_id = useCallback((message_id) => {
|
|
144
|
+
dispatch({ type: 'SET_HIGHLIGHTED_MESSAGE_ID', payload: message_id });
|
|
145
|
+
}, []);
|
|
146
|
+
const add_pending_attachment = useCallback((file) => {
|
|
147
|
+
const id = `attachment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
148
|
+
// Create preview URL for images
|
|
149
|
+
let preview_url;
|
|
150
|
+
if (file.type.startsWith('image/')) {
|
|
151
|
+
preview_url = URL.createObjectURL(file);
|
|
152
|
+
}
|
|
153
|
+
const attachment = {
|
|
154
|
+
id,
|
|
155
|
+
file,
|
|
156
|
+
preview_url,
|
|
157
|
+
upload_status: 'pending'
|
|
158
|
+
};
|
|
159
|
+
dispatch({ type: 'ADD_PENDING_ATTACHMENT', payload: attachment });
|
|
160
|
+
}, []);
|
|
161
|
+
const remove_pending_attachment = useCallback((attachment_id) => {
|
|
162
|
+
// Find and revoke object URL before removing
|
|
163
|
+
const attachment = state.pending_attachments.find((a) => a.id === attachment_id);
|
|
164
|
+
if (attachment?.preview_url) {
|
|
165
|
+
URL.revokeObjectURL(attachment.preview_url);
|
|
166
|
+
}
|
|
167
|
+
dispatch({ type: 'REMOVE_PENDING_ATTACHMENT', payload: attachment_id });
|
|
168
|
+
}, [state.pending_attachments]);
|
|
169
|
+
const update_pending_attachment = useCallback((attachment_id, updates) => {
|
|
170
|
+
dispatch({
|
|
171
|
+
type: 'UPDATE_PENDING_ATTACHMENT',
|
|
172
|
+
payload: { id: attachment_id, updates }
|
|
173
|
+
});
|
|
174
|
+
}, []);
|
|
175
|
+
const clear_pending_attachments = useCallback(() => {
|
|
176
|
+
dispatch({ type: 'CLEAR_PENDING_ATTACHMENTS' });
|
|
177
|
+
}, []);
|
|
178
|
+
const toggle_sidebar = useCallback(() => {
|
|
179
|
+
dispatch({ type: 'TOGGLE_SIDEBAR' });
|
|
180
|
+
}, []);
|
|
181
|
+
const set_sidebar_open = useCallback((is_open) => {
|
|
182
|
+
dispatch({ type: 'SET_SIDEBAR_OPEN', payload: is_open });
|
|
183
|
+
}, []);
|
|
184
|
+
const set_error_message = useCallback((message) => {
|
|
185
|
+
dispatch({ type: 'SET_ERROR_MESSAGE', payload: message });
|
|
186
|
+
}, []);
|
|
187
|
+
const add_reference = useCallback((reference) => {
|
|
188
|
+
dispatch({ type: 'ADD_REFERENCE', payload: reference });
|
|
189
|
+
}, []);
|
|
190
|
+
// -------------------------------------------------------------------------
|
|
191
|
+
// Memoized context value
|
|
192
|
+
// -------------------------------------------------------------------------
|
|
193
|
+
const context_value = useMemo(() => ({
|
|
194
|
+
// State
|
|
195
|
+
current_user: state.current_user,
|
|
196
|
+
selected_reference: state.selected_reference,
|
|
197
|
+
highlighted_message_id: state.highlighted_message_id,
|
|
198
|
+
pending_attachments: state.pending_attachments,
|
|
199
|
+
is_sidebar_open: state.is_sidebar_open,
|
|
200
|
+
polling_status: state.polling_status,
|
|
201
|
+
all_references: state.all_references,
|
|
202
|
+
error_message: state.error_message,
|
|
203
|
+
// Actions
|
|
204
|
+
set_selected_reference,
|
|
205
|
+
set_highlighted_message_id,
|
|
206
|
+
add_pending_attachment,
|
|
207
|
+
remove_pending_attachment,
|
|
208
|
+
update_pending_attachment,
|
|
209
|
+
clear_pending_attachments,
|
|
210
|
+
toggle_sidebar,
|
|
211
|
+
set_sidebar_open,
|
|
212
|
+
set_error_message,
|
|
213
|
+
add_reference
|
|
214
|
+
}), [
|
|
215
|
+
state,
|
|
216
|
+
set_selected_reference,
|
|
217
|
+
set_highlighted_message_id,
|
|
218
|
+
add_pending_attachment,
|
|
219
|
+
remove_pending_attachment,
|
|
220
|
+
update_pending_attachment,
|
|
221
|
+
clear_pending_attachments,
|
|
222
|
+
toggle_sidebar,
|
|
223
|
+
set_sidebar_open,
|
|
224
|
+
set_error_message,
|
|
225
|
+
add_reference
|
|
226
|
+
]);
|
|
227
|
+
return (_jsx(HazoChatContext.Provider, { value: context_value, children: children }));
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// Custom Hook
|
|
231
|
+
// ============================================================================
|
|
232
|
+
/**
|
|
233
|
+
* useHazoChatContext - Hook to access HazoChat context
|
|
234
|
+
*
|
|
235
|
+
* @throws Error if used outside of HazoChatProvider
|
|
236
|
+
* @returns HazoChatContextValue
|
|
237
|
+
*/
|
|
238
|
+
export function useHazoChatContext() {
|
|
239
|
+
const context = useContext(HazoChatContext);
|
|
240
|
+
if (!context) {
|
|
241
|
+
throw new Error('useHazoChatContext must be used within a HazoChatProvider');
|
|
242
|
+
}
|
|
243
|
+
return context;
|
|
244
|
+
}
|
|
245
|
+
// ============================================================================
|
|
246
|
+
// Export Context for testing
|
|
247
|
+
// ============================================================================
|
|
248
|
+
export { HazoChatContext };
|
|
249
|
+
//# sourceMappingURL=hazo_chat_context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hazo_chat_context.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_context.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|