hazo_chat 2.0.10 → 2.0.12

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 (147) hide show
  1. package/README.md +379 -7
  2. package/SETUP_CHECKLIST.md +95 -0
  3. package/package.json +4 -2
  4. package/dist/api/index.d.ts +0 -24
  5. package/dist/api/index.d.ts.map +0 -1
  6. package/dist/api/index.js +0 -24
  7. package/dist/api/index.js.map +0 -1
  8. package/dist/api/messages.d.ts +0 -34
  9. package/dist/api/messages.d.ts.map +0 -1
  10. package/dist/api/messages.js +0 -214
  11. package/dist/api/messages.js.map +0 -1
  12. package/dist/api/types.d.ts +0 -69
  13. package/dist/api/types.d.ts.map +0 -1
  14. package/dist/api/types.js +0 -8
  15. package/dist/api/types.js.map +0 -1
  16. package/dist/components/hazo_chat/hazo_chat.d.ts +0 -28
  17. package/dist/components/hazo_chat/hazo_chat.d.ts.map +0 -1
  18. package/dist/components/hazo_chat/hazo_chat.js +0 -200
  19. package/dist/components/hazo_chat/hazo_chat.js.map +0 -1
  20. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts +0 -17
  21. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts.map +0 -1
  22. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js +0 -60
  23. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js.map +0 -1
  24. package/dist/components/hazo_chat/hazo_chat_context.d.ts +0 -42
  25. package/dist/components/hazo_chat/hazo_chat_context.d.ts.map +0 -1
  26. package/dist/components/hazo_chat/hazo_chat_context.js +0 -273
  27. package/dist/components/hazo_chat/hazo_chat_context.js.map +0 -1
  28. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts +0 -15
  29. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts.map +0 -1
  30. package/dist/components/hazo_chat/hazo_chat_document_viewer.js +0 -111
  31. package/dist/components/hazo_chat/hazo_chat_document_viewer.js.map +0 -1
  32. package/dist/components/hazo_chat/hazo_chat_header.d.ts +0 -16
  33. package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +0 -1
  34. package/dist/components/hazo_chat/hazo_chat_header.js +0 -24
  35. package/dist/components/hazo_chat/hazo_chat_header.js.map +0 -1
  36. package/dist/components/hazo_chat/hazo_chat_input.d.ts +0 -16
  37. package/dist/components/hazo_chat/hazo_chat_input.d.ts.map +0 -1
  38. package/dist/components/hazo_chat/hazo_chat_input.js +0 -75
  39. package/dist/components/hazo_chat/hazo_chat_input.js.map +0 -1
  40. package/dist/components/hazo_chat/hazo_chat_messages.d.ts +0 -17
  41. package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +0 -1
  42. package/dist/components/hazo_chat/hazo_chat_messages.js +0 -109
  43. package/dist/components/hazo_chat/hazo_chat_messages.js.map +0 -1
  44. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts +0 -16
  45. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts.map +0 -1
  46. package/dist/components/hazo_chat/hazo_chat_reference_list.js +0 -59
  47. package/dist/components/hazo_chat/hazo_chat_reference_list.js.map +0 -1
  48. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts +0 -18
  49. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts.map +0 -1
  50. package/dist/components/hazo_chat/hazo_chat_sidebar.js +0 -72
  51. package/dist/components/hazo_chat/hazo_chat_sidebar.js.map +0 -1
  52. package/dist/components/hazo_chat/index.d.ts +0 -16
  53. package/dist/components/hazo_chat/index.d.ts.map +0 -1
  54. package/dist/components/hazo_chat/index.js +0 -19
  55. package/dist/components/hazo_chat/index.js.map +0 -1
  56. package/dist/components/index.d.ts +0 -9
  57. package/dist/components/index.d.ts.map +0 -1
  58. package/dist/components/index.js +0 -11
  59. package/dist/components/index.js.map +0 -1
  60. package/dist/components/ui/avatar.d.ts +0 -13
  61. package/dist/components/ui/avatar.d.ts.map +0 -1
  62. package/dist/components/ui/avatar.js +0 -28
  63. package/dist/components/ui/avatar.js.map +0 -1
  64. package/dist/components/ui/badge.d.ts +0 -16
  65. package/dist/components/ui/badge.d.ts.map +0 -1
  66. package/dist/components/ui/badge.js +0 -36
  67. package/dist/components/ui/badge.js.map +0 -1
  68. package/dist/components/ui/button.d.ts +0 -18
  69. package/dist/components/ui/button.d.ts.map +0 -1
  70. package/dist/components/ui/button.js +0 -47
  71. package/dist/components/ui/button.js.map +0 -1
  72. package/dist/components/ui/chat_bubble.d.ts +0 -18
  73. package/dist/components/ui/chat_bubble.d.ts.map +0 -1
  74. package/dist/components/ui/chat_bubble.js +0 -88
  75. package/dist/components/ui/chat_bubble.js.map +0 -1
  76. package/dist/components/ui/index.d.ts +0 -18
  77. package/dist/components/ui/index.d.ts.map +0 -1
  78. package/dist/components/ui/index.js +0 -20
  79. package/dist/components/ui/index.js.map +0 -1
  80. package/dist/components/ui/input.d.ts +0 -11
  81. package/dist/components/ui/input.d.ts.map +0 -1
  82. package/dist/components/ui/input.js +0 -18
  83. package/dist/components/ui/input.js.map +0 -1
  84. package/dist/components/ui/loading_skeleton.d.ts +0 -19
  85. package/dist/components/ui/loading_skeleton.d.ts.map +0 -1
  86. package/dist/components/ui/loading_skeleton.js +0 -30
  87. package/dist/components/ui/loading_skeleton.js.map +0 -1
  88. package/dist/components/ui/scroll-area.d.ts +0 -12
  89. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  90. package/dist/components/ui/scroll-area.js +0 -25
  91. package/dist/components/ui/scroll-area.js.map +0 -1
  92. package/dist/components/ui/separator.d.ts +0 -11
  93. package/dist/components/ui/separator.d.ts.map +0 -1
  94. package/dist/components/ui/separator.js +0 -18
  95. package/dist/components/ui/separator.js.map +0 -1
  96. package/dist/components/ui/skeleton.d.ts +0 -9
  97. package/dist/components/ui/skeleton.d.ts.map +0 -1
  98. package/dist/components/ui/skeleton.js +0 -16
  99. package/dist/components/ui/skeleton.js.map +0 -1
  100. package/dist/components/ui/textarea.d.ts +0 -11
  101. package/dist/components/ui/textarea.d.ts.map +0 -1
  102. package/dist/components/ui/textarea.js +0 -18
  103. package/dist/components/ui/textarea.js.map +0 -1
  104. package/dist/components/ui/tooltip.d.ts +0 -14
  105. package/dist/components/ui/tooltip.d.ts.map +0 -1
  106. package/dist/components/ui/tooltip.js +0 -30
  107. package/dist/components/ui/tooltip.js.map +0 -1
  108. package/dist/hooks/index.d.ts +0 -10
  109. package/dist/hooks/index.d.ts.map +0 -1
  110. package/dist/hooks/index.js +0 -10
  111. package/dist/hooks/index.js.map +0 -1
  112. package/dist/hooks/use_chat_messages.d.ts +0 -33
  113. package/dist/hooks/use_chat_messages.d.ts.map +0 -1
  114. package/dist/hooks/use_chat_messages.js +0 -466
  115. package/dist/hooks/use_chat_messages.js.map +0 -1
  116. package/dist/hooks/use_chat_references.d.ts +0 -17
  117. package/dist/hooks/use_chat_references.d.ts.map +0 -1
  118. package/dist/hooks/use_chat_references.js +0 -133
  119. package/dist/hooks/use_chat_references.js.map +0 -1
  120. package/dist/hooks/use_file_upload.d.ts +0 -23
  121. package/dist/hooks/use_file_upload.d.ts.map +0 -1
  122. package/dist/hooks/use_file_upload.js +0 -212
  123. package/dist/hooks/use_file_upload.js.map +0 -1
  124. package/dist/index.d.ts +0 -13
  125. package/dist/index.d.ts.map +0 -1
  126. package/dist/index.js +0 -17
  127. package/dist/index.js.map +0 -1
  128. package/dist/lib/config.d.ts +0 -41
  129. package/dist/lib/config.d.ts.map +0 -1
  130. package/dist/lib/config.js +0 -93
  131. package/dist/lib/config.js.map +0 -1
  132. package/dist/lib/constants.d.ts +0 -41
  133. package/dist/lib/constants.d.ts.map +0 -1
  134. package/dist/lib/constants.js +0 -72
  135. package/dist/lib/constants.js.map +0 -1
  136. package/dist/lib/index.d.ts +0 -9
  137. package/dist/lib/index.d.ts.map +0 -1
  138. package/dist/lib/index.js +0 -9
  139. package/dist/lib/index.js.map +0 -1
  140. package/dist/lib/utils.d.ts +0 -17
  141. package/dist/lib/utils.d.ts.map +0 -1
  142. package/dist/lib/utils.js +0 -20
  143. package/dist/lib/utils.js.map +0 -1
  144. package/dist/types/index.d.ts +0 -388
  145. package/dist/types/index.d.ts.map +0 -1
  146. package/dist/types/index.js +0 -11
  147. package/dist/types/index.js.map +0 -1
@@ -1,214 +0,0 @@
1
- /**
2
- * Messages API Handler Factory
3
- *
4
- * Creates GET and POST handlers for the /api/hazo_chat/messages endpoint.
5
- * These handlers should be used in a Next.js API route.
6
- *
7
- * @example
8
- * ```typescript
9
- * // app/api/hazo_chat/messages/route.ts
10
- * import { createMessagesHandler } from 'hazo_chat/api';
11
- * import { getHazoConnectSingleton } from 'hazo_connect/nextjs/setup';
12
- *
13
- * export const dynamic = 'force-dynamic';
14
- *
15
- * const { GET, POST } = createMessagesHandler({
16
- * getHazoConnect: () => getHazoConnectSingleton()
17
- * });
18
- *
19
- * export { GET, POST };
20
- * ```
21
- */
22
- import { NextResponse } from 'next/server';
23
- import { cookies } from 'next/headers';
24
- import { createCrudService } from 'hazo_connect/server';
25
- // UUID generation for message IDs
26
- function generateUUID() {
27
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
28
- const r = Math.random() * 16 | 0;
29
- const v = c === 'x' ? r : (r & 0x3 | 0x8);
30
- return v.toString(16);
31
- });
32
- }
33
- /**
34
- * Default function to get user ID from request cookies
35
- */
36
- async function defaultGetUserIdFromRequest() {
37
- const cookieStore = await cookies();
38
- return cookieStore.get('hazo_auth_user_id')?.value || null;
39
- }
40
- /**
41
- * Creates GET and POST handlers for chat messages
42
- *
43
- * @param options - Configuration options
44
- * @returns Object with GET and POST handlers
45
- */
46
- export function createMessagesHandler(options) {
47
- const { getHazoConnect, getUserIdFromRequest } = options;
48
- /**
49
- * GET handler - Fetch chat messages
50
- *
51
- * Query params:
52
- * - receiver_user_id (required): The other user in the conversation
53
- * - reference_id (optional): Filter by reference ID
54
- * - reference_type (optional): Filter by reference type
55
- */
56
- async function GET(request) {
57
- try {
58
- // Get current user ID
59
- const current_user_id = getUserIdFromRequest
60
- ? await getUserIdFromRequest(request)
61
- : await defaultGetUserIdFromRequest();
62
- if (!current_user_id) {
63
- console.error('[hazo_chat/messages GET] No user ID - not authenticated');
64
- return NextResponse.json({ success: false, error: 'User not authenticated', messages: [] }, { status: 401 });
65
- }
66
- // Get query params
67
- const { searchParams } = new URL(request.url);
68
- const receiver_user_id = searchParams.get('receiver_user_id');
69
- const reference_id = searchParams.get('reference_id') || '';
70
- const reference_type = searchParams.get('reference_type') || '';
71
- if (!receiver_user_id) {
72
- console.error('[hazo_chat/messages GET] Missing receiver_user_id');
73
- return NextResponse.json({ success: false, error: 'receiver_user_id is required', messages: [] }, { status: 400 });
74
- }
75
- console.log('[hazo_chat/messages GET] Fetching messages:', {
76
- current_user_id,
77
- receiver_user_id,
78
- reference_id,
79
- reference_type,
80
- });
81
- // Get hazo_connect instance and create CRUD service
82
- const hazoConnect = getHazoConnect();
83
- const chatService = createCrudService(hazoConnect, 'hazo_chat');
84
- let messages = [];
85
- try {
86
- // Fetch all messages with reference filters
87
- const all_messages = await chatService.list((qb) => {
88
- let builder = qb.select('*');
89
- if (reference_id) {
90
- builder = builder.where('reference_id', 'eq', reference_id);
91
- }
92
- if (reference_type) {
93
- builder = builder.where('reference_type', 'eq', reference_type);
94
- }
95
- return builder.order('created_at', 'asc');
96
- });
97
- // Filter to only messages between current user and receiver
98
- messages = all_messages.filter((msg) => {
99
- const is_sent_by_me = msg.sender_user_id === current_user_id && msg.receiver_user_id === receiver_user_id;
100
- const is_sent_to_me = msg.sender_user_id === receiver_user_id && msg.receiver_user_id === current_user_id;
101
- return is_sent_by_me || is_sent_to_me;
102
- });
103
- }
104
- catch (dbError) {
105
- console.error('[hazo_chat/messages GET] Database error:', dbError);
106
- throw dbError;
107
- }
108
- console.log('[hazo_chat/messages GET] Found messages:', messages.length);
109
- return NextResponse.json({
110
- success: true,
111
- messages,
112
- current_user_id,
113
- });
114
- }
115
- catch (error) {
116
- const error_message = error instanceof Error ? error.message : 'Unknown error';
117
- console.error('[hazo_chat/messages GET] Error:', error_message, error);
118
- return NextResponse.json({ success: false, error: 'Failed to fetch messages', messages: [] }, { status: 500 });
119
- }
120
- }
121
- /**
122
- * POST handler - Create a new chat message
123
- *
124
- * Request body:
125
- * - receiver_user_id (required): The recipient user ID
126
- * - message_text (required): The message content
127
- * - reference_id (optional): Reference ID for context grouping
128
- * - reference_type (optional): Reference type (default: 'chat')
129
- */
130
- async function POST(request) {
131
- try {
132
- // Get current user ID (sender)
133
- const sender_user_id = getUserIdFromRequest
134
- ? await getUserIdFromRequest(request)
135
- : await defaultGetUserIdFromRequest();
136
- if (!sender_user_id) {
137
- console.error('[hazo_chat/messages POST] No user ID - not authenticated');
138
- return NextResponse.json({ success: false, error: 'User not authenticated' }, { status: 401 });
139
- }
140
- // Parse request body
141
- const body = await request.json();
142
- const { receiver_user_id, message_text, reference_id, reference_type } = body;
143
- // Validate required fields
144
- if (!receiver_user_id) {
145
- console.error('[hazo_chat/messages POST] Missing receiver_user_id');
146
- return NextResponse.json({ success: false, error: 'receiver_user_id is required' }, { status: 400 });
147
- }
148
- if (!message_text || message_text.trim() === '') {
149
- console.error('[hazo_chat/messages POST] Missing or empty message_text');
150
- return NextResponse.json({ success: false, error: 'message_text is required' }, { status: 400 });
151
- }
152
- // Get hazo_connect instance and create CRUD service
153
- const hazoConnect = getHazoConnect();
154
- const chatService = createCrudService(hazoConnect, 'hazo_chat');
155
- // Generate message ID and timestamps
156
- const message_id = generateUUID();
157
- const now = new Date().toISOString();
158
- // Create message record
159
- const message_record = {
160
- id: message_id,
161
- reference_id: reference_id || '',
162
- reference_type: reference_type || 'chat',
163
- sender_user_id,
164
- receiver_user_id,
165
- message_text: message_text.trim(),
166
- reference_list: null,
167
- read_at: null,
168
- deleted_at: null,
169
- created_at: now,
170
- changed_at: now,
171
- };
172
- console.log('[hazo_chat/messages POST] Saving message:', {
173
- id: message_id,
174
- sender_user_id,
175
- receiver_user_id,
176
- reference_id: reference_id || '',
177
- reference_type: reference_type || 'chat',
178
- message_length: message_text.length,
179
- });
180
- // Save to database
181
- try {
182
- await chatService.insert(message_record);
183
- }
184
- catch (dbError) {
185
- console.error('[hazo_chat/messages POST] Database error:', dbError);
186
- throw dbError;
187
- }
188
- console.log('[hazo_chat/messages POST] Message saved successfully:', message_id);
189
- return NextResponse.json({
190
- success: true,
191
- message: {
192
- id: message_id,
193
- sender_user_id,
194
- receiver_user_id,
195
- reference_id: reference_id || '',
196
- reference_type: reference_type || 'chat',
197
- message_text: message_text.trim(),
198
- reference_list: null,
199
- read_at: null,
200
- deleted_at: null,
201
- created_at: now,
202
- changed_at: now,
203
- },
204
- });
205
- }
206
- catch (error) {
207
- const error_message = error instanceof Error ? error.message : 'Unknown error';
208
- console.error('[hazo_chat/messages POST] Error:', error_message, error);
209
- return NextResponse.json({ success: false, error: 'Failed to save message' }, { status: 500 });
210
- }
211
- }
212
- return { GET, POST };
213
- }
214
- //# sourceMappingURL=messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/api/messages.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- /**
2
- * API Handler Types
3
- *
4
- * Shared types for the exportable API route handlers.
5
- * These are used by consumers when setting up their API routes.
6
- */
7
- import type { NextRequest } from 'next/server';
8
- /**
9
- * Options for creating message API handlers
10
- */
11
- export interface MessagesHandlerOptions {
12
- /**
13
- * Function to get the hazo_connect adapter instance.
14
- * Called on each request to get a fresh connection.
15
- *
16
- * @example
17
- * ```typescript
18
- * import { getHazoConnectSingleton } from 'hazo_connect/nextjs/setup';
19
- *
20
- * const options = {
21
- * getHazoConnect: () => getHazoConnectSingleton()
22
- * };
23
- * ```
24
- */
25
- getHazoConnect: () => unknown;
26
- /**
27
- * Optional function to extract user ID from the request.
28
- * Defaults to reading from 'hazo_auth_user_id' cookie.
29
- *
30
- * @example
31
- * ```typescript
32
- * // Custom auth extraction
33
- * const options = {
34
- * getUserIdFromRequest: (request) => {
35
- * const token = request.headers.get('Authorization');
36
- * return decodeToken(token)?.userId || null;
37
- * }
38
- * };
39
- * ```
40
- */
41
- getUserIdFromRequest?: (request: NextRequest) => string | null | Promise<string | null>;
42
- }
43
- /**
44
- * Chat message input for creating new messages
45
- */
46
- export interface ChatMessageInput {
47
- receiver_user_id: string;
48
- message_text: string;
49
- reference_id?: string;
50
- reference_type?: string;
51
- }
52
- /**
53
- * Chat message database record
54
- */
55
- export interface ChatMessageRecord {
56
- id: string;
57
- reference_id: string;
58
- reference_type: string;
59
- sender_user_id: string;
60
- receiver_user_id: string;
61
- message_text: string;
62
- reference_list: string | null;
63
- read_at: string | null;
64
- deleted_at: string | null;
65
- created_at: string;
66
- changed_at: string;
67
- [key: string]: unknown;
68
- }
69
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;OAYG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC;IAE9B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
package/dist/api/types.js DELETED
@@ -1,8 +0,0 @@
1
- /**
2
- * API Handler Types
3
- *
4
- * Shared types for the exportable API route handlers.
5
- * These are used by consumers when setting up their API routes.
6
- */
7
- export {};
8
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,28 +0,0 @@
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
- * - Document viewer and reference list
8
- * - Message polling and pagination
9
- *
10
- * Uses API calls internally - no server-side dependencies required.
11
- */
12
- import type { HazoChatProps } from '../../types/index.js';
13
- /**
14
- * HazoChat - Main chat component
15
- *
16
- * Uses API calls internally for all data operations.
17
- * Requires the following API routes to be set up:
18
- * - GET/POST /api/hazo_chat/messages
19
- * - GET /api/hazo_auth/me
20
- * - POST /api/hazo_auth/profiles
21
- *
22
- * See SETUP_CHECKLIST.md for detailed setup instructions.
23
- */
24
- export declare function HazoChat(props: HazoChatProps): import("react/jsx-runtime").JSX.Element;
25
- export declare namespace HazoChat {
26
- var displayName: string;
27
- }
28
- //# sourceMappingURL=hazo_chat.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,sBAAsB,CAAC;AA6Y9B;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAmD5C;yBAnDe,QAAQ"}
@@ -1,200 +0,0 @@
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
- * - Document viewer and reference list
8
- * - Message polling and pagination
9
- *
10
- * Uses API calls internally - no server-side dependencies required.
11
- */
12
- 'use client';
13
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- import { useCallback, useMemo, useState, useEffect } from 'react';
15
- import { IoChevronDown, IoChevronUp, IoChevronBack, IoChevronForward } from 'react-icons/io5';
16
- import { cn } from '../../lib/utils.js';
17
- import { DEFAULT_TIMEZONE, DEFAULT_REALTIME_MODE, DEFAULT_POLLING_INTERVAL, DEFAULT_MESSAGES_PER_PAGE } from '../../lib/constants.js';
18
- // Sub-components
19
- import { HazoChatProvider, useHazoChatContext } from './hazo_chat_context.js';
20
- import { HazoChatHeader } from './hazo_chat_header.js';
21
- import { HazoChatReferenceList } from './hazo_chat_reference_list.js';
22
- import { HazoChatDocumentViewer } from './hazo_chat_document_viewer.js';
23
- import { HazoChatMessages } from './hazo_chat_messages.js';
24
- import { HazoChatInput } from './hazo_chat_input.js';
25
- import { TooltipProvider } from '../ui/tooltip.js';
26
- import { Button } from '../ui/button.js';
27
- // Hooks
28
- import { useChatMessages } from '../../hooks/use_chat_messages.js';
29
- import { useChatReferences } from '../../hooks/use_chat_references.js';
30
- import { useFileUpload } from '../../hooks/use_file_upload.js';
31
- function HazoChatInner({ receiver_user_id, reference_id = '', reference_type = 'chat', api_base_url = '/api/hazo_chat', additional_references = [], timezone = DEFAULT_TIMEZONE, title, subtitle, on_close, className, realtime_mode = DEFAULT_REALTIME_MODE, polling_interval = DEFAULT_POLLING_INTERVAL, messages_per_page = DEFAULT_MESSAGES_PER_PAGE }) {
32
- // Get context
33
- 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();
34
- // -------------------------------------------------------------------------
35
- // Messages hook (uses API calls)
36
- // -------------------------------------------------------------------------
37
- const { messages, is_loading: is_loading_messages, has_more, load_more, send_message, delete_message, polling_status, refresh: refresh_messages } = useChatMessages({
38
- receiver_user_id,
39
- reference_id,
40
- reference_type,
41
- api_base_url,
42
- realtime_mode,
43
- polling_interval,
44
- messages_per_page
45
- });
46
- // -------------------------------------------------------------------------
47
- // References hook
48
- // -------------------------------------------------------------------------
49
- const { references, select_reference } = useChatReferences({
50
- messages,
51
- initial_references: additional_references.map((ref) => ({
52
- ...ref,
53
- scope: ref.scope || 'field'
54
- })),
55
- on_selection_change: (ref) => {
56
- set_selected_reference(ref);
57
- // If ref has message_id, highlight it
58
- if (ref?.message_id) {
59
- set_highlighted_message_id(ref.message_id);
60
- // Close sidebar on mobile after selection
61
- set_sidebar_open(false);
62
- }
63
- }
64
- });
65
- // -------------------------------------------------------------------------
66
- // References section collapse state
67
- // -------------------------------------------------------------------------
68
- const [is_references_expanded, set_is_references_expanded] = useState(() => {
69
- // Default to collapsed if no references
70
- return references.length > 0;
71
- });
72
- // Auto-expand when references are added
73
- useEffect(() => {
74
- if (references.length > 0 && !is_references_expanded) {
75
- set_is_references_expanded(true);
76
- }
77
- }, [references.length, is_references_expanded]);
78
- // -------------------------------------------------------------------------
79
- // Document viewer collapse state
80
- // -------------------------------------------------------------------------
81
- const [is_document_viewer_expanded, set_is_document_viewer_expanded] = useState(true);
82
- // -------------------------------------------------------------------------
83
- // File upload hook
84
- // -------------------------------------------------------------------------
85
- const { add_files, remove_file, upload_all, is_uploading } = useFileUpload({
86
- upload_location: `${api_base_url}/uploads`
87
- });
88
- // -------------------------------------------------------------------------
89
- // Handle send message
90
- // -------------------------------------------------------------------------
91
- const handle_send = useCallback(async (text, attachments) => {
92
- if (!current_user)
93
- return;
94
- // Upload pending files first
95
- const uploaded = await upload_all();
96
- // Build reference list from attachments
97
- const attachment_refs = [
98
- ...attachments,
99
- ...uploaded
100
- ].map((file) => ({
101
- id: file.id,
102
- type: 'document',
103
- scope: 'chat',
104
- name: file.name,
105
- url: file.url,
106
- mime_type: file.mime_type,
107
- file_size: file.file_size
108
- }));
109
- const payload = {
110
- reference_id: reference_id || '',
111
- reference_type,
112
- receiver_user_id,
113
- message_text: text,
114
- reference_list: attachment_refs.length > 0 ? attachment_refs : undefined
115
- };
116
- const success = await send_message(payload);
117
- if (success) {
118
- clear_pending_attachments();
119
- // Add new references to the list
120
- attachment_refs.forEach((ref) => add_reference(ref));
121
- }
122
- }, [
123
- current_user,
124
- reference_id,
125
- reference_type,
126
- receiver_user_id,
127
- upload_all,
128
- send_message,
129
- clear_pending_attachments,
130
- add_reference
131
- ]);
132
- // -------------------------------------------------------------------------
133
- // Handle add attachment
134
- // -------------------------------------------------------------------------
135
- const handle_add_attachment = useCallback((files) => {
136
- files.forEach((file) => {
137
- add_pending_attachment(file);
138
- });
139
- add_files(files);
140
- }, [add_pending_attachment, add_files]);
141
- // -------------------------------------------------------------------------
142
- // Handle remove attachment
143
- // -------------------------------------------------------------------------
144
- const handle_remove_attachment = useCallback((attachment_id) => {
145
- remove_pending_attachment(attachment_id);
146
- remove_file(attachment_id);
147
- }, [remove_pending_attachment, remove_file]);
148
- // -------------------------------------------------------------------------
149
- // Handle reference selection
150
- // -------------------------------------------------------------------------
151
- const handle_reference_select = useCallback((reference) => {
152
- select_reference(reference);
153
- }, [select_reference]);
154
- // -------------------------------------------------------------------------
155
- // Render
156
- // -------------------------------------------------------------------------
157
- 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_refresh: refresh_messages, is_refreshing: is_loading_messages,
158
- // Only show hamburger button on mobile for sidebar toggle
159
- // On desktop, document viewer is always visible, so no toggle needed
160
- on_toggle_sidebar: toggle_sidebar, is_sidebar_open: is_sidebar_open }), _jsx("div", { className: cn('cls_references_row border-b bg-muted/30 transition-all duration-300 ease-in-out overflow-hidden', is_references_expanded ? 'max-h-96' : 'max-h-8'), children: _jsxs("div", { className: "cls_references_container px-3 py-2", children: [_jsxs("button", { onClick: () => set_is_references_expanded(!is_references_expanded), className: "cls_references_header flex items-center justify-between w-full gap-2 mb-1.5 hover:bg-muted/50 rounded px-1 -mx-1 transition-colors", "aria-label": is_references_expanded ? 'Collapse references' : 'Expand references', "aria-expanded": is_references_expanded, children: [_jsx("h3", { className: "text-[9px] font-medium text-muted-foreground uppercase tracking-wider", children: "References" }), is_references_expanded ? (_jsx(IoChevronUp, { className: "w-3 h-3 text-muted-foreground flex-shrink-0" })) : (_jsx(IoChevronDown, { className: "w-3 h-3 text-muted-foreground flex-shrink-0" }))] }), is_references_expanded && (_jsx("div", { className: "cls_references_content", children: _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 h-full min-h-0", children: [_jsx("div", { className: cn('cls_doc_preview_column', 'border-r bg-muted/20', 'flex-shrink-0 flex flex-col', 'transition-all duration-300 ease-in-out overflow-hidden',
161
- // Mobile: hidden by default, shown when sidebar is open
162
- is_sidebar_open ? 'flex' : 'hidden md:flex',
163
- // Collapse/expand based on state
164
- is_document_viewer_expanded
165
- ? 'w-[280px] md:w-[320px] lg:w-[380px]'
166
- : 'w-0 border-r-0'), children: is_document_viewer_expanded && (_jsx(HazoChatDocumentViewer, { reference: selected_reference || undefined })) }), _jsx(Button, { variant: "outline", size: "icon", onClick: () => set_is_document_viewer_expanded(!is_document_viewer_expanded), className: cn('cls_doc_viewer_toggle', 'absolute z-10', 'h-8 w-6 rounded-r-md rounded-l-none border-l-0', 'bg-background hover:bg-accent', 'transition-all duration-300',
167
- // Center vertically using flex on parent or fixed positioning
168
- 'top-[50%] -translate-y-1/2',
169
- // Hide on mobile when sidebar is closed
170
- (!is_sidebar_open ? 'hidden md:flex' : 'flex'), is_document_viewer_expanded
171
- ? 'left-[280px] md:left-[320px] lg:left-[380px]'
172
- : 'left-0'), "aria-label": is_document_viewer_expanded ? 'Collapse document viewer' : 'Expand document viewer', children: is_document_viewer_expanded ? (_jsx(IoChevronBack, { className: "h-4 w-4" })) : (_jsx(IoChevronForward, { className: "h-4 w-4" })) }), _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'
173
- ? 'bg-yellow-100 text-yellow-800'
174
- : 'bg-red-100 text-red-800'), children: polling_status === 'reconnecting' ? 'Reconnecting...' : 'Connection error' }))] }));
175
- }
176
- // ============================================================================
177
- // Main Component (with Provider)
178
- // ============================================================================
179
- /**
180
- * HazoChat - Main chat component
181
- *
182
- * Uses API calls internally for all data operations.
183
- * Requires the following API routes to be set up:
184
- * - GET/POST /api/hazo_chat/messages
185
- * - GET /api/hazo_auth/me
186
- * - POST /api/hazo_auth/profiles
187
- *
188
- * See SETUP_CHECKLIST.md for detailed setup instructions.
189
- */
190
- export function HazoChat(props) {
191
- const { receiver_user_id, reference_id, reference_type = 'chat', api_base_url = '/api/hazo_chat', additional_references = [], timezone = DEFAULT_TIMEZONE, title, subtitle, on_close, realtime_mode, polling_interval, messages_per_page, className } = props;
192
- // Convert ReferenceItem[] to ChatReferenceItem[]
193
- const initial_refs = useMemo(() => additional_references.map((ref) => ({
194
- ...ref,
195
- scope: ref.scope || 'field'
196
- })), [additional_references]);
197
- return (_jsx(TooltipProvider, { children: _jsx(HazoChatProvider, { api_base_url: api_base_url, initial_references: initial_refs, children: _jsx(HazoChatInner, { receiver_user_id: receiver_user_id, reference_id: reference_id, reference_type: reference_type, api_base_url: api_base_url, additional_references: initial_refs, timezone: timezone, title: title, subtitle: subtitle, on_close: on_close, realtime_mode: realtime_mode, polling_interval: polling_interval, messages_per_page: messages_per_page, className: className }) }) }));
198
- }
199
- HazoChat.displayName = 'HazoChat';
200
- //# sourceMappingURL=hazo_chat.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
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
@@ -1 +0,0 @@
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"}