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.
Files changed (135) hide show
  1. package/README.md +437 -0
  2. package/SETUP_CHECKLIST.md +858 -0
  3. package/dist/components/hazo_chat/hazo_chat.d.ts +16 -0
  4. package/dist/components/hazo_chat/hazo_chat.d.ts.map +1 -0
  5. package/dist/components/hazo_chat/hazo_chat.js +155 -0
  6. package/dist/components/hazo_chat/hazo_chat.js.map +1 -0
  7. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts +17 -0
  8. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts.map +1 -0
  9. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js +60 -0
  10. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js.map +1 -0
  11. package/dist/components/hazo_chat/hazo_chat_context.d.ts +36 -0
  12. package/dist/components/hazo_chat/hazo_chat_context.d.ts.map +1 -0
  13. package/dist/components/hazo_chat/hazo_chat_context.js +249 -0
  14. package/dist/components/hazo_chat/hazo_chat_context.js.map +1 -0
  15. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts +15 -0
  16. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts.map +1 -0
  17. package/dist/components/hazo_chat/hazo_chat_document_viewer.js +111 -0
  18. package/dist/components/hazo_chat/hazo_chat_document_viewer.js.map +1 -0
  19. package/dist/components/hazo_chat/hazo_chat_header.d.ts +16 -0
  20. package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +1 -0
  21. package/dist/components/hazo_chat/hazo_chat_header.js +24 -0
  22. package/dist/components/hazo_chat/hazo_chat_header.js.map +1 -0
  23. package/dist/components/hazo_chat/hazo_chat_input.d.ts +18 -0
  24. package/dist/components/hazo_chat/hazo_chat_input.d.ts.map +1 -0
  25. package/dist/components/hazo_chat/hazo_chat_input.js +134 -0
  26. package/dist/components/hazo_chat/hazo_chat_input.js.map +1 -0
  27. package/dist/components/hazo_chat/hazo_chat_messages.d.ts +17 -0
  28. package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +1 -0
  29. package/dist/components/hazo_chat/hazo_chat_messages.js +109 -0
  30. package/dist/components/hazo_chat/hazo_chat_messages.js.map +1 -0
  31. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts +16 -0
  32. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts.map +1 -0
  33. package/dist/components/hazo_chat/hazo_chat_reference_list.js +59 -0
  34. package/dist/components/hazo_chat/hazo_chat_reference_list.js.map +1 -0
  35. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts +18 -0
  36. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts.map +1 -0
  37. package/dist/components/hazo_chat/hazo_chat_sidebar.js +72 -0
  38. package/dist/components/hazo_chat/hazo_chat_sidebar.js.map +1 -0
  39. package/dist/components/hazo_chat/index.d.ts +16 -0
  40. package/dist/components/hazo_chat/index.d.ts.map +1 -0
  41. package/dist/components/hazo_chat/index.js +19 -0
  42. package/dist/components/hazo_chat/index.js.map +1 -0
  43. package/dist/components/index.d.ts +9 -0
  44. package/dist/components/index.d.ts.map +1 -0
  45. package/dist/components/index.js +11 -0
  46. package/dist/components/index.js.map +1 -0
  47. package/dist/components/ui/avatar.d.ts +13 -0
  48. package/dist/components/ui/avatar.d.ts.map +1 -0
  49. package/dist/components/ui/avatar.js +28 -0
  50. package/dist/components/ui/avatar.js.map +1 -0
  51. package/dist/components/ui/badge.d.ts +16 -0
  52. package/dist/components/ui/badge.d.ts.map +1 -0
  53. package/dist/components/ui/badge.js +36 -0
  54. package/dist/components/ui/badge.js.map +1 -0
  55. package/dist/components/ui/button.d.ts +18 -0
  56. package/dist/components/ui/button.d.ts.map +1 -0
  57. package/dist/components/ui/button.js +47 -0
  58. package/dist/components/ui/button.js.map +1 -0
  59. package/dist/components/ui/chat_bubble.d.ts +19 -0
  60. package/dist/components/ui/chat_bubble.d.ts.map +1 -0
  61. package/dist/components/ui/chat_bubble.js +101 -0
  62. package/dist/components/ui/chat_bubble.js.map +1 -0
  63. package/dist/components/ui/index.d.ts +18 -0
  64. package/dist/components/ui/index.d.ts.map +1 -0
  65. package/dist/components/ui/index.js +20 -0
  66. package/dist/components/ui/index.js.map +1 -0
  67. package/dist/components/ui/input.d.ts +11 -0
  68. package/dist/components/ui/input.d.ts.map +1 -0
  69. package/dist/components/ui/input.js +18 -0
  70. package/dist/components/ui/input.js.map +1 -0
  71. package/dist/components/ui/loading_skeleton.d.ts +19 -0
  72. package/dist/components/ui/loading_skeleton.d.ts.map +1 -0
  73. package/dist/components/ui/loading_skeleton.js +30 -0
  74. package/dist/components/ui/loading_skeleton.js.map +1 -0
  75. package/dist/components/ui/scroll-area.d.ts +12 -0
  76. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  77. package/dist/components/ui/scroll-area.js +25 -0
  78. package/dist/components/ui/scroll-area.js.map +1 -0
  79. package/dist/components/ui/separator.d.ts +11 -0
  80. package/dist/components/ui/separator.d.ts.map +1 -0
  81. package/dist/components/ui/separator.js +18 -0
  82. package/dist/components/ui/separator.js.map +1 -0
  83. package/dist/components/ui/skeleton.d.ts +9 -0
  84. package/dist/components/ui/skeleton.d.ts.map +1 -0
  85. package/dist/components/ui/skeleton.js +16 -0
  86. package/dist/components/ui/skeleton.js.map +1 -0
  87. package/dist/components/ui/textarea.d.ts +11 -0
  88. package/dist/components/ui/textarea.d.ts.map +1 -0
  89. package/dist/components/ui/textarea.js +18 -0
  90. package/dist/components/ui/textarea.js.map +1 -0
  91. package/dist/components/ui/tooltip.d.ts +14 -0
  92. package/dist/components/ui/tooltip.d.ts.map +1 -0
  93. package/dist/components/ui/tooltip.js +30 -0
  94. package/dist/components/ui/tooltip.js.map +1 -0
  95. package/dist/hooks/index.d.ts +10 -0
  96. package/dist/hooks/index.d.ts.map +1 -0
  97. package/dist/hooks/index.js +10 -0
  98. package/dist/hooks/index.js.map +1 -0
  99. package/dist/hooks/use_chat_messages.d.ts +25 -0
  100. package/dist/hooks/use_chat_messages.d.ts.map +1 -0
  101. package/dist/hooks/use_chat_messages.js +430 -0
  102. package/dist/hooks/use_chat_messages.js.map +1 -0
  103. package/dist/hooks/use_chat_references.d.ts +17 -0
  104. package/dist/hooks/use_chat_references.d.ts.map +1 -0
  105. package/dist/hooks/use_chat_references.js +133 -0
  106. package/dist/hooks/use_chat_references.js.map +1 -0
  107. package/dist/hooks/use_file_upload.d.ts +23 -0
  108. package/dist/hooks/use_file_upload.d.ts.map +1 -0
  109. package/dist/hooks/use_file_upload.js +212 -0
  110. package/dist/hooks/use_file_upload.js.map +1 -0
  111. package/dist/index.d.ts +13 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +17 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/config.d.ts +41 -0
  116. package/dist/lib/config.d.ts.map +1 -0
  117. package/dist/lib/config.js +93 -0
  118. package/dist/lib/config.js.map +1 -0
  119. package/dist/lib/constants.d.ts +39 -0
  120. package/dist/lib/constants.d.ts.map +1 -0
  121. package/dist/lib/constants.js +70 -0
  122. package/dist/lib/constants.js.map +1 -0
  123. package/dist/lib/index.d.ts +9 -0
  124. package/dist/lib/index.d.ts.map +1 -0
  125. package/dist/lib/index.js +9 -0
  126. package/dist/lib/index.js.map +1 -0
  127. package/dist/lib/utils.d.ts +17 -0
  128. package/dist/lib/utils.d.ts.map +1 -0
  129. package/dist/lib/utils.js +20 -0
  130. package/dist/lib/utils.js.map +1 -0
  131. package/dist/types/index.d.ts +367 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +8 -0
  134. package/dist/types/index.js.map +1 -0
  135. 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"}