hazo_chat 2.0.8 → 2.0.10
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 +271 -0
- package/SETUP_CHECKLIST.md +407 -6
- package/dist/components/hazo_chat/hazo_chat.d.ts.map +1 -1
- package/dist/components/hazo_chat/hazo_chat.js +4 -2
- package/dist/components/hazo_chat/hazo_chat.js.map +1 -1
- package/dist/components/ui/chat_bubble.d.ts.map +1 -1
- package/dist/components/ui/chat_bubble.js +9 -5
- package/dist/components/ui/chat_bubble.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ A full-featured React chat component library for 1-1 communication with document
|
|
|
20
20
|
## Table of Contents
|
|
21
21
|
|
|
22
22
|
- [Installation](#installation)
|
|
23
|
+
- [UI Requirements](#ui-requirements)
|
|
23
24
|
- [Quick Start](#quick-start)
|
|
24
25
|
- [API Routes Setup](#api-routes-setup)
|
|
25
26
|
- [Props Reference](#props-reference)
|
|
@@ -37,6 +38,260 @@ A full-featured React chat component library for 1-1 communication with document
|
|
|
37
38
|
npm install hazo_chat hazo_connect next
|
|
38
39
|
```
|
|
39
40
|
|
|
41
|
+
## UI Requirements
|
|
42
|
+
|
|
43
|
+
hazo_chat requires the following UI setup to match the design standards:
|
|
44
|
+
|
|
45
|
+
### Required UI Dependencies
|
|
46
|
+
|
|
47
|
+
Install these packages in your consuming project:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm install sonner @radix-ui/react-alert-dialog
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Required UI Components (shadcn/ui style)
|
|
54
|
+
|
|
55
|
+
The following components must be available in your project at `@/components/ui/`:
|
|
56
|
+
|
|
57
|
+
- `AlertDialog` - For user acknowledgment dialogs (must be created by consuming project)
|
|
58
|
+
- `Button` - Included in hazo_chat package
|
|
59
|
+
- `Input` - Included in hazo_chat package
|
|
60
|
+
- All other components are included in hazo_chat package
|
|
61
|
+
|
|
62
|
+
**Note:** The `AlertDialog` component is not included in the hazo_chat package. You must create it using shadcn/ui Alert Dialog component. See `test-app/src/components/ui/alert-dialog.tsx` for a reference implementation.
|
|
63
|
+
|
|
64
|
+
### Required Global Providers
|
|
65
|
+
|
|
66
|
+
Add Sonner Toaster to your root layout:
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
// app/layout.tsx
|
|
70
|
+
import { Toaster } from 'sonner';
|
|
71
|
+
|
|
72
|
+
export default function RootLayout({ children }) {
|
|
73
|
+
return (
|
|
74
|
+
<html>
|
|
75
|
+
<body>
|
|
76
|
+
{children}
|
|
77
|
+
<Toaster position="top-right" richColors />
|
|
78
|
+
</body>
|
|
79
|
+
</html>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Required Tailwind Configuration
|
|
85
|
+
|
|
86
|
+
Your `tailwind.config.ts` must include hazo_chat package paths in content:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
export default {
|
|
90
|
+
content: [
|
|
91
|
+
// ... your existing paths
|
|
92
|
+
'./node_modules/hazo_chat/dist/**/*.{js,ts,jsx,tsx}',
|
|
93
|
+
],
|
|
94
|
+
// ... rest of config
|
|
95
|
+
};
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Important:** Without this configuration, Tailwind classes used by hazo_chat components may not be compiled, causing styling issues.
|
|
99
|
+
|
|
100
|
+
### Required CSS Variables
|
|
101
|
+
|
|
102
|
+
Your global CSS must define these CSS variables (shadcn/ui standard):
|
|
103
|
+
|
|
104
|
+
**Core Colors:**
|
|
105
|
+
- `--background`, `--foreground`
|
|
106
|
+
- `--primary`, `--primary-foreground`
|
|
107
|
+
- `--secondary`, `--secondary-foreground`
|
|
108
|
+
- `--muted`, `--muted-foreground`
|
|
109
|
+
- `--accent`, `--accent-foreground`
|
|
110
|
+
- `--destructive`, `--destructive-foreground`
|
|
111
|
+
|
|
112
|
+
**Border and Input:**
|
|
113
|
+
- `--border`, `--input`, `--ring`
|
|
114
|
+
|
|
115
|
+
**Card:**
|
|
116
|
+
- `--card`, `--card-foreground`
|
|
117
|
+
|
|
118
|
+
See `test-app/src/app/globals.css` for complete variable definitions with example values.
|
|
119
|
+
|
|
120
|
+
### UI Design Standards
|
|
121
|
+
|
|
122
|
+
This section defines the visual design standards and component behavior specifications for hazo_chat. All consuming projects should follow these standards to ensure consistent UI appearance and behavior.
|
|
123
|
+
|
|
124
|
+
#### Visual Design Elements
|
|
125
|
+
|
|
126
|
+
**Document Preview Icon:**
|
|
127
|
+
- Location: Empty state in document viewer (`HazoChatDocumentViewer`)
|
|
128
|
+
- Icon: `IoDocumentOutline` (from `react-icons/io5`)
|
|
129
|
+
- Size: `w-12 h-12` (48px × 48px)
|
|
130
|
+
- Opacity: `opacity-50`
|
|
131
|
+
- Text: "Select a document to preview" in `text-sm`
|
|
132
|
+
|
|
133
|
+
**REFERENCES Section Font:**
|
|
134
|
+
- Location: References section header
|
|
135
|
+
- Font size: `text-[9px]` (9px)
|
|
136
|
+
- Font weight: `font-medium`
|
|
137
|
+
- Text transform: `uppercase`
|
|
138
|
+
- Letter spacing: `tracking-wider`
|
|
139
|
+
- Color: `text-muted-foreground`
|
|
140
|
+
|
|
141
|
+
**Input Area Padding:**
|
|
142
|
+
- Location: Chat input container (`HazoChatInput`)
|
|
143
|
+
- Padding: `p-4` (16px on all sides)
|
|
144
|
+
- Border: `border-t` (top border only)
|
|
145
|
+
- Background: `bg-background`
|
|
146
|
+
|
|
147
|
+
**Message Timestamp Display:**
|
|
148
|
+
- Location: Chat bubble footer (`ChatBubble`)
|
|
149
|
+
- Only timestamp is displayed (no status icons for sent/unread messages)
|
|
150
|
+
- Font size: `text-xs`
|
|
151
|
+
- Color: `text-muted-foreground`
|
|
152
|
+
- Format: 24-hour format (e.g., "10:37 AM", "15:51")
|
|
153
|
+
- Timezone: Respects `timezone` prop (default: "GMT+10")
|
|
154
|
+
|
|
155
|
+
**Read Receipt Indicator:**
|
|
156
|
+
- Location: Chat bubble footer, after timestamp
|
|
157
|
+
- Icon: `IoCheckmarkDoneSharp` (from `react-icons/io5`)
|
|
158
|
+
- Size: `h-4 w-4` (16px × 16px)
|
|
159
|
+
- Color: `text-green-500`
|
|
160
|
+
- Display condition: Only shown when `read_at` is not null AND message is from sender
|
|
161
|
+
- Position: After timestamp with `gap-1` spacing
|
|
162
|
+
|
|
163
|
+
#### Component Behavior
|
|
164
|
+
|
|
165
|
+
**Close Button:**
|
|
166
|
+
- Visibility: Always visible when `on_close` prop is provided to `HazoChat` component
|
|
167
|
+
- Icon: `IoClose` (from `react-icons/io5`)
|
|
168
|
+
- Size: `h-8 w-8` (32px × 32px)
|
|
169
|
+
- Variant: `ghost`
|
|
170
|
+
- Hover state: `hover:bg-destructive/10 hover:text-destructive`
|
|
171
|
+
- Position: Top-right of header, after refresh button
|
|
172
|
+
|
|
173
|
+
**Hamburger Menu Button:**
|
|
174
|
+
- Desktop behavior: Hidden (`md:hidden` class)
|
|
175
|
+
- Mobile behavior: Visible on screens < 768px
|
|
176
|
+
- Purpose: Toggle document viewer sidebar on mobile
|
|
177
|
+
- Icon: `IoMenuOutline` (from `react-icons/io5`)
|
|
178
|
+
- Size: `h-8 w-8` (32px × 32px)
|
|
179
|
+
- Position: Top-left of header, before title
|
|
180
|
+
|
|
181
|
+
**Important:** If hamburger button appears on desktop, check Tailwind CSS configuration and ensure `md:` breakpoint utilities are working correctly.
|
|
182
|
+
|
|
183
|
+
**Document Viewer Toggle Button:**
|
|
184
|
+
- Icon: Chevron (`IoChevronBack` when expanded, `IoChevronForward` when collapsed)
|
|
185
|
+
- Size: `h-8 w-6` (32px height × 24px width)
|
|
186
|
+
- Position: Absolute, vertically centered between columns
|
|
187
|
+
- Variant: `outline`
|
|
188
|
+
- Border: `rounded-r-md rounded-l-none border-l-0`
|
|
189
|
+
- Behavior: Smooth transitions with `transition-all duration-300`
|
|
190
|
+
- Desktop: Visible when document viewer column is present
|
|
191
|
+
- Mobile: Hidden when sidebar is closed
|
|
192
|
+
|
|
193
|
+
**References Section Collapse/Expand:**
|
|
194
|
+
- Collapsed height: `max-h-8`
|
|
195
|
+
- Expanded height: `max-h-96`
|
|
196
|
+
- Transition: `transition-all duration-300 ease-in-out`
|
|
197
|
+
- Indicator: Chevron icon (`IoChevronDown` when collapsed, `IoChevronUp` when expanded)
|
|
198
|
+
- Default state: Collapsed when no references, expanded when references exist
|
|
199
|
+
|
|
200
|
+
#### Layout Standards
|
|
201
|
+
|
|
202
|
+
**Chat Input Area:**
|
|
203
|
+
- Layout: Flex container with `flex items-center gap-2`
|
|
204
|
+
- Components: Single `Input` field and Send button (`Button` with `IoSend` icon)
|
|
205
|
+
- No attachment buttons: Attachment/image buttons removed for simplified design
|
|
206
|
+
- Input padding: `p-4` on container
|
|
207
|
+
- Button alignment: Aligned with input height using flex
|
|
208
|
+
|
|
209
|
+
**Button Alignment and Sizing:**
|
|
210
|
+
- Send button: Standard button size, aligned with input
|
|
211
|
+
- All interactive buttons: Consistent sizing for visual harmony
|
|
212
|
+
- Icon sizes within buttons: `w-4 h-4` (16px × 16px)
|
|
213
|
+
|
|
214
|
+
**Responsive Breakpoints:**
|
|
215
|
+
- Mobile: < 768px (default)
|
|
216
|
+
- Desktop: >= 768px (`md:` prefix)
|
|
217
|
+
- Standard Tailwind breakpoints used throughout
|
|
218
|
+
|
|
219
|
+
#### Container Requirements
|
|
220
|
+
|
|
221
|
+
**Important:** When wrapping HazoChat in containers (e.g., Card components):
|
|
222
|
+
|
|
223
|
+
1. **Avoid nested `overflow-hidden`**: Nested overflow-hidden containers can clip rounded corners. Use overflow-hidden only on the HazoChat component itself.
|
|
224
|
+
|
|
225
|
+
2. **Padding**: If wrapping in a Card, ensure proper padding is maintained. Avoid `p-0` on CardContent as it may affect internal spacing.
|
|
226
|
+
|
|
227
|
+
3. **Tailwind Configuration**: Ensure `./node_modules/hazo_chat/dist/**/*.{js,ts,jsx,tsx}` is included in your Tailwind `content` array so all utility classes (including `rounded-*` classes) are compiled.
|
|
228
|
+
|
|
229
|
+
#### Typography
|
|
230
|
+
|
|
231
|
+
**Font Families:**
|
|
232
|
+
- Primary: System font stack or custom font via `--font-sans` CSS variable
|
|
233
|
+
- Monospace: System monospace or custom font via `--font-mono` CSS variable
|
|
234
|
+
|
|
235
|
+
**Font Sizes:**
|
|
236
|
+
- Header title: `text-sm` (14px)
|
|
237
|
+
- Header subtitle: `text-xs` (12px)
|
|
238
|
+
- Message text: `text-sm` (14px)
|
|
239
|
+
- Timestamp: `text-xs` (12px)
|
|
240
|
+
- References header: `text-[9px]` (9px)
|
|
241
|
+
- Empty state text: `text-sm` (14px)
|
|
242
|
+
|
|
243
|
+
#### Spacing and Padding
|
|
244
|
+
|
|
245
|
+
**Standard Padding Values:**
|
|
246
|
+
- Container padding: `p-4` (16px)
|
|
247
|
+
- Header padding: `px-4` (16px horizontal)
|
|
248
|
+
- Message bubble padding: `px-4 py-2` (16px horizontal, 8px vertical)
|
|
249
|
+
- Gap between elements: `gap-2` (8px) or `gap-1` (4px) for tight spacing
|
|
250
|
+
|
|
251
|
+
#### Animation and Transitions
|
|
252
|
+
|
|
253
|
+
**Standard Transitions:**
|
|
254
|
+
- Component state changes: `transition-all duration-300`
|
|
255
|
+
- Hover states: `transition-colors`
|
|
256
|
+
- Smooth animations for expand/collapse: `ease-in-out`
|
|
257
|
+
|
|
258
|
+
**Loading States:**
|
|
259
|
+
- Skeleton loaders for initial message load
|
|
260
|
+
- Spinner animation for refresh button when loading
|
|
261
|
+
|
|
262
|
+
#### Accessibility
|
|
263
|
+
|
|
264
|
+
**ARIA Labels:**
|
|
265
|
+
All interactive elements must have appropriate ARIA labels:
|
|
266
|
+
- Input fields: `aria-label="Message input"`
|
|
267
|
+
- Buttons: `aria-label` describing action (e.g., "Send message", "Refresh chat history")
|
|
268
|
+
- Close button: `aria-label="Close chat"`
|
|
269
|
+
- Toggle buttons: `aria-label` and `aria-expanded` attributes
|
|
270
|
+
|
|
271
|
+
**Keyboard Navigation:**
|
|
272
|
+
- Send message: Enter key
|
|
273
|
+
- Close dialogs: Escape key (handled by Alert Dialog component)
|
|
274
|
+
|
|
275
|
+
#### Component Dependencies
|
|
276
|
+
|
|
277
|
+
**Required External Components:**
|
|
278
|
+
The following components must be available in consuming projects:
|
|
279
|
+
1. **AlertDialog** (shadcn/ui style) - Used for user acknowledgment dialogs, not included in hazo_chat package
|
|
280
|
+
2. **Toaster** (from `sonner` package) - Used for toast notifications, must be added to root layout with `position="top-right"` and `richColors` prop
|
|
281
|
+
|
|
282
|
+
**Included Components:**
|
|
283
|
+
The following UI components are included in hazo_chat package:
|
|
284
|
+
- Button, Input, Textarea, Avatar, ScrollArea, Tooltip, Separator, Badge
|
|
285
|
+
- ChatBubble (chat-specific), LoadingSkeleton (chat-specific)
|
|
286
|
+
|
|
287
|
+
**Example References:**
|
|
288
|
+
For complete implementation examples, see:
|
|
289
|
+
- `test-app/src/app/page.tsx` - Usage example
|
|
290
|
+
- `test-app/src/app/layout.tsx` - Toaster setup
|
|
291
|
+
- `test-app/src/components/ui/alert-dialog.tsx` - Alert Dialog implementation
|
|
292
|
+
- `test-app/src/app/globals.css` - CSS variables example
|
|
293
|
+
- `test-app/tailwind.config.ts` - Tailwind configuration example
|
|
294
|
+
|
|
40
295
|
## Quick Start
|
|
41
296
|
|
|
42
297
|
### Step 1: Create API Routes
|
|
@@ -480,6 +735,22 @@ import { DEFAULT_POLLING_INTERVAL, MIME_TYPE_MAP } from 'hazo_chat/lib';
|
|
|
480
735
|
4. **CORS errors**
|
|
481
736
|
- API routes should be on the same domain as the frontend
|
|
482
737
|
|
|
738
|
+
5. **UI components not styled correctly**
|
|
739
|
+
- Ensure Tailwind config includes hazo_chat package paths in `content` array
|
|
740
|
+
- Verify CSS variables are defined in `globals.css`
|
|
741
|
+
- Check that all UI dependencies are installed (see [UI Requirements](#ui-requirements))
|
|
742
|
+
- Rebuild CSS: `rm -rf .next` and restart dev server
|
|
743
|
+
|
|
744
|
+
6. **Toast notifications not appearing**
|
|
745
|
+
- Ensure Sonner Toaster is added to root layout (see [UI Requirements](#ui-requirements))
|
|
746
|
+
- Check that `sonner` package is installed
|
|
747
|
+
- Verify `<Toaster position="top-right" richColors />` is in layout body
|
|
748
|
+
|
|
749
|
+
7. **Alert Dialog not working**
|
|
750
|
+
- Create Alert Dialog component at `src/components/ui/alert-dialog.tsx`
|
|
751
|
+
- See `test-app/src/components/ui/alert-dialog.tsx` for reference implementation
|
|
752
|
+
- Ensure `@radix-ui/react-alert-dialog` is installed
|
|
753
|
+
|
|
483
754
|
## Related Packages
|
|
484
755
|
|
|
485
756
|
- [hazo_connect](https://github.com/pub12/hazo_connect) - Database adapter
|
package/SETUP_CHECKLIST.md
CHANGED
|
@@ -11,9 +11,11 @@ A comprehensive, step-by-step guide for setting up hazo_chat in a Next.js projec
|
|
|
11
11
|
3. [Database Setup](#3-database-setup)
|
|
12
12
|
4. [API Routes](#4-api-routes)
|
|
13
13
|
5. [Component Integration](#5-component-integration)
|
|
14
|
-
6. [
|
|
15
|
-
7. [
|
|
16
|
-
8. [
|
|
14
|
+
6. [UI Components and Styling Setup](#6-ui-components-and-styling-setup)
|
|
15
|
+
7. [Configuration (Optional)](#7-configuration-optional)
|
|
16
|
+
8. [UI Design Standards Compliance](#8-ui-design-standards-compliance)
|
|
17
|
+
9. [Verification Checklist](#9-verification-checklist)
|
|
18
|
+
10. [Troubleshooting](#10-troubleshooting)
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
@@ -306,7 +308,327 @@ export default function ChatPage() {
|
|
|
306
308
|
|
|
307
309
|
---
|
|
308
310
|
|
|
309
|
-
## 6.
|
|
311
|
+
## 6. UI Components and Styling Setup
|
|
312
|
+
|
|
313
|
+
### Step 6.1: Install UI Dependencies
|
|
314
|
+
|
|
315
|
+
Install the required UI packages:
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
npm install sonner @radix-ui/react-alert-dialog
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Verification:**
|
|
322
|
+
- [ ] `sonner` package installed
|
|
323
|
+
- [ ] `@radix-ui/react-alert-dialog` installed
|
|
324
|
+
- [ ] `package.json` contains both dependencies
|
|
325
|
+
|
|
326
|
+
### Step 6.2: Create Alert Dialog Component
|
|
327
|
+
|
|
328
|
+
**File:** `src/components/ui/alert-dialog.tsx`
|
|
329
|
+
|
|
330
|
+
Create the Alert Dialog component using shadcn/ui style. This component is used for messages requiring user acknowledgment.
|
|
331
|
+
|
|
332
|
+
**Reference Implementation:** See `test-app/src/components/ui/alert-dialog.tsx` for a complete example.
|
|
333
|
+
|
|
334
|
+
**Minimum Required Structure:**
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
"use client"
|
|
338
|
+
|
|
339
|
+
import * as React from "react"
|
|
340
|
+
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
|
|
341
|
+
import { Button } from "@/components/ui/button"
|
|
342
|
+
import { cn } from "@/lib/utils"
|
|
343
|
+
|
|
344
|
+
const AlertDialog = AlertDialogPrimitive.Root
|
|
345
|
+
const AlertDialogTrigger = AlertDialogPrimitive.Trigger
|
|
346
|
+
const AlertDialogPortal = AlertDialogPrimitive.Portal
|
|
347
|
+
|
|
348
|
+
const AlertDialogOverlay = React.forwardRef<
|
|
349
|
+
React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
|
|
350
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
|
|
351
|
+
>(({ className, ...props }, ref) => (
|
|
352
|
+
<AlertDialogPrimitive.Overlay
|
|
353
|
+
className={cn(
|
|
354
|
+
"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
355
|
+
className
|
|
356
|
+
)}
|
|
357
|
+
{...props}
|
|
358
|
+
ref={ref}
|
|
359
|
+
/>
|
|
360
|
+
))
|
|
361
|
+
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
|
|
362
|
+
|
|
363
|
+
const AlertDialogContent = React.forwardRef<
|
|
364
|
+
React.ElementRef<typeof AlertDialogPrimitive.Content>,
|
|
365
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
|
|
366
|
+
>(({ className, ...props }, ref) => (
|
|
367
|
+
<AlertDialogPortal>
|
|
368
|
+
<AlertDialogOverlay />
|
|
369
|
+
<AlertDialogPrimitive.Content
|
|
370
|
+
ref={ref}
|
|
371
|
+
className={cn(
|
|
372
|
+
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
|
|
373
|
+
className
|
|
374
|
+
)}
|
|
375
|
+
{...props}
|
|
376
|
+
/>
|
|
377
|
+
</AlertDialogPortal>
|
|
378
|
+
))
|
|
379
|
+
AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
|
|
380
|
+
|
|
381
|
+
const AlertDialogHeader = ({
|
|
382
|
+
className,
|
|
383
|
+
...props
|
|
384
|
+
}: React.HTMLAttributes<HTMLDivElement>) => (
|
|
385
|
+
<div
|
|
386
|
+
className={cn(
|
|
387
|
+
"flex flex-col space-y-2 text-center sm:text-left",
|
|
388
|
+
className
|
|
389
|
+
)}
|
|
390
|
+
{...props}
|
|
391
|
+
/>
|
|
392
|
+
)
|
|
393
|
+
AlertDialogHeader.displayName = "AlertDialogHeader"
|
|
394
|
+
|
|
395
|
+
const AlertDialogFooter = ({
|
|
396
|
+
className,
|
|
397
|
+
...props
|
|
398
|
+
}: React.HTMLAttributes<HTMLDivElement>) => (
|
|
399
|
+
<div
|
|
400
|
+
className={cn(
|
|
401
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
402
|
+
className
|
|
403
|
+
)}
|
|
404
|
+
{...props}
|
|
405
|
+
/>
|
|
406
|
+
)
|
|
407
|
+
AlertDialogFooter.displayName = "AlertDialogFooter"
|
|
408
|
+
|
|
409
|
+
const AlertDialogTitle = React.forwardRef<
|
|
410
|
+
React.ElementRef<typeof AlertDialogPrimitive.Title>,
|
|
411
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
|
|
412
|
+
>(({ className, ...props }, ref) => (
|
|
413
|
+
<AlertDialogPrimitive.Title
|
|
414
|
+
ref={ref}
|
|
415
|
+
className={cn("text-lg font-semibold", className)}
|
|
416
|
+
{...props}
|
|
417
|
+
/>
|
|
418
|
+
))
|
|
419
|
+
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
|
|
420
|
+
|
|
421
|
+
const AlertDialogDescription = React.forwardRef<
|
|
422
|
+
React.ElementRef<typeof AlertDialogPrimitive.Description>,
|
|
423
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
|
|
424
|
+
>(({ className, ...props }, ref) => (
|
|
425
|
+
<AlertDialogPrimitive.Description
|
|
426
|
+
ref={ref}
|
|
427
|
+
className={cn("text-sm text-muted-foreground", className)}
|
|
428
|
+
{...props}
|
|
429
|
+
/>
|
|
430
|
+
))
|
|
431
|
+
AlertDialogDescription.displayName =
|
|
432
|
+
AlertDialogPrimitive.Description.displayName
|
|
433
|
+
|
|
434
|
+
const AlertDialogAction = React.forwardRef<
|
|
435
|
+
React.ElementRef<typeof AlertDialogPrimitive.Action>,
|
|
436
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
|
|
437
|
+
>(({ className, ...props }, ref) => (
|
|
438
|
+
<AlertDialogPrimitive.Action
|
|
439
|
+
ref={ref}
|
|
440
|
+
className={cn(
|
|
441
|
+
"inline-flex h-10 items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground ring-offset-background transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
442
|
+
className
|
|
443
|
+
)}
|
|
444
|
+
{...props}
|
|
445
|
+
/>
|
|
446
|
+
))
|
|
447
|
+
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
|
|
448
|
+
|
|
449
|
+
const AlertDialogCancel = React.forwardRef<
|
|
450
|
+
React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
|
|
451
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
|
|
452
|
+
>(({ className, ...props }, ref) => (
|
|
453
|
+
<AlertDialogPrimitive.Cancel
|
|
454
|
+
ref={ref}
|
|
455
|
+
className={cn(
|
|
456
|
+
"mt-2 sm:mt-0",
|
|
457
|
+
className
|
|
458
|
+
)}
|
|
459
|
+
{...props}
|
|
460
|
+
/>
|
|
461
|
+
))
|
|
462
|
+
AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
|
|
463
|
+
|
|
464
|
+
export {
|
|
465
|
+
AlertDialog,
|
|
466
|
+
AlertDialogPortal,
|
|
467
|
+
AlertDialogOverlay,
|
|
468
|
+
AlertDialogTrigger,
|
|
469
|
+
AlertDialogContent,
|
|
470
|
+
AlertDialogHeader,
|
|
471
|
+
AlertDialogFooter,
|
|
472
|
+
AlertDialogTitle,
|
|
473
|
+
AlertDialogDescription,
|
|
474
|
+
AlertDialogAction,
|
|
475
|
+
AlertDialogCancel,
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Verification:**
|
|
480
|
+
- [ ] Alert Dialog component created at `src/components/ui/alert-dialog.tsx`
|
|
481
|
+
- [ ] Component exports all required sub-components
|
|
482
|
+
- [ ] No TypeScript errors
|
|
483
|
+
|
|
484
|
+
### Step 6.3: Setup Sonner Toaster
|
|
485
|
+
|
|
486
|
+
**File:** `src/app/layout.tsx`
|
|
487
|
+
|
|
488
|
+
Add the Sonner Toaster component to your root layout for toast notifications:
|
|
489
|
+
|
|
490
|
+
```tsx
|
|
491
|
+
import { Toaster } from 'sonner';
|
|
492
|
+
|
|
493
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
494
|
+
return (
|
|
495
|
+
<html lang="en">
|
|
496
|
+
<body>
|
|
497
|
+
{children}
|
|
498
|
+
<Toaster position="top-right" richColors />
|
|
499
|
+
</body>
|
|
500
|
+
</html>
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Verification:**
|
|
506
|
+
- [ ] `Toaster` imported from `sonner`
|
|
507
|
+
- [ ] Toaster added to root layout
|
|
508
|
+
- [ ] Position set to `top-right`
|
|
509
|
+
- [ ] `richColors` prop enabled
|
|
510
|
+
|
|
511
|
+
### Step 6.4: Configure Tailwind CSS
|
|
512
|
+
|
|
513
|
+
**File:** `tailwind.config.ts`
|
|
514
|
+
|
|
515
|
+
Ensure hazo_chat package is included in Tailwind content paths:
|
|
516
|
+
|
|
517
|
+
```typescript
|
|
518
|
+
import type { Config } from 'tailwindcss';
|
|
519
|
+
|
|
520
|
+
const config: Config = {
|
|
521
|
+
content: [
|
|
522
|
+
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
|
523
|
+
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
|
524
|
+
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
|
525
|
+
// Include hazo_chat package components
|
|
526
|
+
'./node_modules/hazo_chat/dist/**/*.{js,ts,jsx,tsx}',
|
|
527
|
+
],
|
|
528
|
+
// ... rest of your config
|
|
529
|
+
};
|
|
530
|
+
|
|
531
|
+
export default config;
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
**Important:** Without this configuration, Tailwind classes used by hazo_chat components will not be compiled, causing styling issues.
|
|
535
|
+
|
|
536
|
+
**Verification:**
|
|
537
|
+
- [ ] `tailwind.config.ts` includes hazo_chat package path
|
|
538
|
+
- [ ] Path matches your `node_modules` location
|
|
539
|
+
- [ ] Config syntax is valid
|
|
540
|
+
|
|
541
|
+
### Step 6.5: Setup CSS Variables
|
|
542
|
+
|
|
543
|
+
**File:** `src/app/globals.css`
|
|
544
|
+
|
|
545
|
+
Ensure all required CSS variables are defined. hazo_chat uses shadcn/ui standard CSS variables:
|
|
546
|
+
|
|
547
|
+
```css
|
|
548
|
+
@tailwind base;
|
|
549
|
+
@tailwind components;
|
|
550
|
+
@tailwind utilities;
|
|
551
|
+
|
|
552
|
+
@layer base {
|
|
553
|
+
:root {
|
|
554
|
+
--radius: 0.5rem;
|
|
555
|
+
--background: 0 0% 100%;
|
|
556
|
+
--foreground: 0 0% 3.9%;
|
|
557
|
+
--card: 0 0% 100%;
|
|
558
|
+
--card-foreground: 0 0% 3.9%;
|
|
559
|
+
--popover: 0 0% 100%;
|
|
560
|
+
--popover-foreground: 0 0% 3.9%;
|
|
561
|
+
--primary: 0 0% 9%;
|
|
562
|
+
--primary-foreground: 0 0% 98%;
|
|
563
|
+
--secondary: 0 0% 96.1%;
|
|
564
|
+
--secondary-foreground: 0 0% 9%;
|
|
565
|
+
--muted: 0 0% 96.1%;
|
|
566
|
+
--muted-foreground: 0 0% 45.1%;
|
|
567
|
+
--accent: 0 0% 96.1%;
|
|
568
|
+
--accent-foreground: 0 0% 9%;
|
|
569
|
+
--destructive: 0 84.2% 60.2%;
|
|
570
|
+
--destructive-foreground: 0 0% 98%;
|
|
571
|
+
--border: 0 0% 89.8%;
|
|
572
|
+
--input: 0 0% 89.8%;
|
|
573
|
+
--ring: 0 0% 3.9%;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.dark {
|
|
577
|
+
--background: 0 0% 3.9%;
|
|
578
|
+
--foreground: 0 0% 98%;
|
|
579
|
+
--card: 0 0% 3.9%;
|
|
580
|
+
--card-foreground: 0 0% 98%;
|
|
581
|
+
--popover: 0 0% 3.9%;
|
|
582
|
+
--popover-foreground: 0 0% 98%;
|
|
583
|
+
--primary: 0 0% 98%;
|
|
584
|
+
--primary-foreground: 0 0% 9%;
|
|
585
|
+
--secondary: 0 0% 14.9%;
|
|
586
|
+
--secondary-foreground: 0 0% 98%;
|
|
587
|
+
--muted: 0 0% 14.9%;
|
|
588
|
+
--muted-foreground: 0 0% 63.9%;
|
|
589
|
+
--accent: 0 0% 14.9%;
|
|
590
|
+
--accent-foreground: 0 0% 98%;
|
|
591
|
+
--destructive: 0 62.8% 30.6%;
|
|
592
|
+
--destructive-foreground: 0 0% 98%;
|
|
593
|
+
--border: 0 0% 14.9%;
|
|
594
|
+
--input: 0 0% 14.9%;
|
|
595
|
+
--ring: 0 0% 83.1%;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
@layer base {
|
|
600
|
+
* {
|
|
601
|
+
@apply border-border;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
body {
|
|
605
|
+
@apply bg-background text-foreground;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
**Reference:** See `test-app/src/app/globals.css` for a complete example with oklch color format.
|
|
611
|
+
|
|
612
|
+
**Verification:**
|
|
613
|
+
- [ ] All required CSS variables defined in `:root`
|
|
614
|
+
- [ ] Dark mode variables defined (if supporting dark mode)
|
|
615
|
+
- [ ] Tailwind directives included (`@tailwind base`, etc.)
|
|
616
|
+
- [ ] Base layer styles applied
|
|
617
|
+
|
|
618
|
+
### UI Setup Verification Checklist
|
|
619
|
+
|
|
620
|
+
- [ ] All UI dependencies installed
|
|
621
|
+
- [ ] Alert Dialog component created and working
|
|
622
|
+
- [ ] Sonner Toaster added to root layout
|
|
623
|
+
- [ ] Tailwind config includes hazo_chat paths
|
|
624
|
+
- [ ] CSS variables defined in globals.css
|
|
625
|
+
- [ ] No build errors related to UI components
|
|
626
|
+
- [ ] Toast notifications working
|
|
627
|
+
- [ ] Alert dialogs displaying correctly
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## 7. Configuration (Optional)
|
|
310
632
|
|
|
311
633
|
### hazo_connect Configuration
|
|
312
634
|
|
|
@@ -350,7 +672,43 @@ module.exports = nextConfig;
|
|
|
350
672
|
|
|
351
673
|
---
|
|
352
674
|
|
|
353
|
-
##
|
|
675
|
+
## 8. UI Design Standards Compliance
|
|
676
|
+
|
|
677
|
+
### Visual Design Verification
|
|
678
|
+
|
|
679
|
+
**Document Preview:**
|
|
680
|
+
- [ ] Empty state shows `IoDocumentOutline` icon (not image icon)
|
|
681
|
+
- [ ] Icon size is 48px × 48px with 50% opacity
|
|
682
|
+
|
|
683
|
+
**REFERENCES Section:**
|
|
684
|
+
- [ ] Font size is 9px (`text-[9px]`)
|
|
685
|
+
- [ ] Text is uppercase with wide letter spacing
|
|
686
|
+
- [ ] Section is collapsible with chevron indicator
|
|
687
|
+
|
|
688
|
+
**Input Area:**
|
|
689
|
+
- [ ] Padding is 16px (`p-4`) on all sides
|
|
690
|
+
- [ ] Input field and send button are properly aligned
|
|
691
|
+
|
|
692
|
+
**Message Display:**
|
|
693
|
+
- [ ] Only timestamp shown under messages (no status icons)
|
|
694
|
+
- [ ] Double green checkmark (`IoCheckmarkDoneSharp`) appears when message is read
|
|
695
|
+
- [ ] Checkmark only shows for sender's messages with `read_at` not null
|
|
696
|
+
|
|
697
|
+
**Header:**
|
|
698
|
+
- [ ] Close button visible when `on_close` prop provided
|
|
699
|
+
- [ ] Hamburger menu hidden on desktop (screens >= 768px)
|
|
700
|
+
- [ ] Hamburger menu visible on mobile (screens < 768px)
|
|
701
|
+
|
|
702
|
+
**Document Viewer:**
|
|
703
|
+
- [ ] Toggle button visible between viewer and chat area
|
|
704
|
+
- [ ] Smooth expand/collapse transitions
|
|
705
|
+
- [ ] Button position adjusts correctly
|
|
706
|
+
|
|
707
|
+
For detailed specifications, see the [UI Design Standards](#ui-design-standards) section in README.md.
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
## 9. Verification Checklist
|
|
354
712
|
|
|
355
713
|
### Installation Verification
|
|
356
714
|
- [ ] All packages installed without errors
|
|
@@ -423,7 +781,7 @@ curl "http://localhost:3000/api/hazo_chat/messages?receiver_user_id=user-id"
|
|
|
423
781
|
|
|
424
782
|
---
|
|
425
783
|
|
|
426
|
-
##
|
|
784
|
+
## 10. Troubleshooting
|
|
427
785
|
|
|
428
786
|
### Error: "Module not found: Can't resolve 'fs'"
|
|
429
787
|
|
|
@@ -501,6 +859,49 @@ curl "http://localhost:3000/api/hazo_chat/messages?receiver_user_id=user-id"
|
|
|
501
859
|
3. Check for JavaScript errors in console
|
|
502
860
|
4. Verify API returns `{ success: true, messages: [] }` format
|
|
503
861
|
|
|
862
|
+
### Issue: UI components not styled correctly
|
|
863
|
+
|
|
864
|
+
**Possible Causes:**
|
|
865
|
+
1. Tailwind CSS not configured to include hazo_chat package paths
|
|
866
|
+
2. CSS variables not defined in globals.css
|
|
867
|
+
3. Missing UI dependencies
|
|
868
|
+
|
|
869
|
+
**Solution:**
|
|
870
|
+
1. Ensure `tailwind.config.ts` includes: `'./node_modules/hazo_chat/dist/**/*.{js,ts,jsx,tsx}'` in content array
|
|
871
|
+
2. Verify all required CSS variables are defined (see Step 6.5)
|
|
872
|
+
3. Check that `@tailwind base`, `@tailwind components`, `@tailwind utilities` are in globals.css
|
|
873
|
+
4. Rebuild: `rm -rf .next` and `npm run build`
|
|
874
|
+
|
|
875
|
+
### Issue: Alert Dialog not working
|
|
876
|
+
|
|
877
|
+
**Cause:** Alert Dialog component not created or not properly imported.
|
|
878
|
+
|
|
879
|
+
**Solution:**
|
|
880
|
+
1. Create Alert Dialog component at `src/components/ui/alert-dialog.tsx`
|
|
881
|
+
2. See `test-app/src/components/ui/alert-dialog.tsx` for reference
|
|
882
|
+
3. Ensure `@radix-ui/react-alert-dialog` is installed
|
|
883
|
+
4. Verify component exports all required sub-components
|
|
884
|
+
|
|
885
|
+
### Issue: Toast notifications not appearing
|
|
886
|
+
|
|
887
|
+
**Cause:** Sonner Toaster not added to root layout.
|
|
888
|
+
|
|
889
|
+
**Solution:**
|
|
890
|
+
1. Import `Toaster` from `sonner` in root layout
|
|
891
|
+
2. Add `<Toaster position="top-right" richColors />` to layout body
|
|
892
|
+
3. Ensure `sonner` package is installed
|
|
893
|
+
4. Check browser console for errors
|
|
894
|
+
|
|
895
|
+
### Issue: CSS variables not applying
|
|
896
|
+
|
|
897
|
+
**Cause:** CSS variables not defined or Tailwind not processing them.
|
|
898
|
+
|
|
899
|
+
**Solution:**
|
|
900
|
+
1. Verify CSS variables are in `globals.css` under `@layer base { :root { ... } }`
|
|
901
|
+
2. Check that Tailwind config has correct content paths
|
|
902
|
+
3. Ensure CSS file is imported in root layout
|
|
903
|
+
4. Rebuild CSS: restart dev server or rebuild
|
|
904
|
+
|
|
504
905
|
---
|
|
505
906
|
|
|
506
907
|
## Quick Setup Summary
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
|
@@ -157,13 +157,15 @@ function HazoChatInner({ receiver_user_id, reference_id = '', reference_type = '
|
|
|
157
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
158
|
// Only show hamburger button on mobile for sidebar toggle
|
|
159
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", 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',
|
|
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
161
|
// Mobile: hidden by default, shown when sidebar is open
|
|
162
162
|
is_sidebar_open ? 'flex' : 'hidden md:flex',
|
|
163
163
|
// Collapse/expand based on state
|
|
164
164
|
is_document_viewer_expanded
|
|
165
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
|
|
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',
|
|
167
169
|
// Hide on mobile when sidebar is closed
|
|
168
170
|
(!is_sidebar_open ? 'hidden md:flex' : 'flex'), is_document_viewer_expanded
|
|
169
171
|
? 'left-[280px] md:left-[320px] lg:left-[380px]'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hazo_chat.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat_bubble.d.ts","sourceRoot":"","sources":["../../../src/components/ui/chat_bubble.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"chat_bubble.d.ts","sourceRoot":"","sources":["../../../src/components/ui/chat_bubble.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AA4C/E,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,SAAS,EACT,cAAc,EACd,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,cAAsB,EACtB,SAAS,EACV,EAAE,eAAe,2CAgKjB;yBAzKe,UAAU"}
|
|
@@ -15,7 +15,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
15
15
|
import { useState, useCallback } from 'react';
|
|
16
16
|
import { format } from 'date-fns';
|
|
17
17
|
import { toZonedTime } from 'date-fns-tz';
|
|
18
|
-
import { IoTrashOutline, IoDocumentAttachSharp } from 'react-icons/io5';
|
|
18
|
+
import { IoTrashOutline, IoDocumentAttachSharp, IoCheckmarkDoneSharp } from 'react-icons/io5';
|
|
19
19
|
import { cn } from '../../lib/utils.js';
|
|
20
20
|
import { DELETED_MESSAGE_PLACEHOLDER } from '../../lib/constants.js';
|
|
21
21
|
import { Avatar, AvatarImage, AvatarFallback } from './avatar.js';
|
|
@@ -74,11 +74,15 @@ export function ChatBubble({ message, is_sender, sender_profile, timezone, on_de
|
|
|
74
74
|
const handle_reference_click = useCallback((reference) => {
|
|
75
75
|
on_reference_click?.(reference);
|
|
76
76
|
}, [on_reference_click]);
|
|
77
|
-
return (_jsxs("div", { className: cn('cls_chat_bubble_wrapper', 'flex w-full mb-4 group', is_sender ? 'justify-end' : 'justify-start', is_highlighted && 'animate-pulse bg-primary/5 -mx-2 px-2 py-1 rounded-lg', className), id: `message-${message.id}`, children: [!is_sender && (_jsxs(Avatar, { className: "cls_bubble_avatar h-8 w-8 mr-2 flex-shrink-0", children: [_jsx(AvatarImage, { src: sender_profile?.avatar_url, alt: `${sender_profile?.name || 'User'} avatar` }), _jsx(AvatarFallback, { className: "text-xs", children: get_initials(sender_profile?.name) })] })), _jsxs("div", { className: "cls_bubble_content flex flex-col max-w-[70%]", children: [!is_sender && sender_profile?.name && (_jsx("span", { className: "cls_bubble_sender text-xs text-muted-foreground mb-1 ml-1", children: sender_profile.name })), _jsxs("div", { className: cn('cls_bubble', 'px-4 py-2
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
return (_jsxs("div", { className: cn('cls_chat_bubble_wrapper', 'flex w-full mb-4 group', is_sender ? 'justify-end' : 'justify-start', is_highlighted && 'animate-pulse bg-primary/5 -mx-2 px-2 py-1 rounded-lg', className), id: `message-${message.id}`, children: [!is_sender && (_jsxs(Avatar, { className: "cls_bubble_avatar h-8 w-8 mr-2 flex-shrink-0", children: [_jsx(AvatarImage, { src: sender_profile?.avatar_url, alt: `${sender_profile?.name || 'User'} avatar` }), _jsx(AvatarFallback, { className: "text-xs", children: get_initials(sender_profile?.name) })] })), _jsxs("div", { className: "cls_bubble_content flex flex-col max-w-[70%]", children: [!is_sender && sender_profile?.name && (_jsx("span", { className: "cls_bubble_sender text-xs text-muted-foreground mb-1 ml-1", children: sender_profile.name })), _jsxs("div", { className: cn('cls_bubble', 'px-4 py-2 relative',
|
|
78
|
+
// Explicit rounded corners using Tailwind's arbitrary value syntax for better compatibility
|
|
79
|
+
// Top-left, Top-right, Bottom-right, Bottom-left
|
|
80
|
+
is_sender
|
|
81
|
+
? 'bg-primary text-primary-foreground rounded-[16px_16px_6px_16px]'
|
|
82
|
+
: 'bg-muted text-foreground rounded-[16px_16px_16px_6px]', is_deleted && 'opacity-60 italic'), children: [_jsx("p", { className: "cls_bubble_text text-sm whitespace-pre-wrap break-words", children: display_text }), has_references && !is_deleted && (_jsx("div", { className: "cls_bubble_references flex flex-wrap gap-1 mt-2 pt-2 border-t border-current/10", children: message.reference_list?.map((ref) => (_jsxs(Button, { variant: "ghost", size: "sm", onClick: () => handle_reference_click(ref), className: cn('cls_bubble_reference_btn', 'h-6 px-2 text-xs', is_sender
|
|
80
83
|
? 'hover:bg-primary-foreground/20'
|
|
81
|
-
: 'hover:bg-background/50'), children: [_jsx(IoDocumentAttachSharp, { className: "w-3 h-3 mr-1" }), _jsx("span", { className: "truncate max-w-[100px]", children: ref.name })] }, ref.id))) })), is_sender && !is_deleted && on_delete && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: show_delete_confirm ? 'destructive' : 'ghost', size: "icon", onClick: handle_delete_click, className: cn('cls_bubble_delete_btn', 'absolute -left-8 top-1/2 -translate-y-1/2', 'w-6 h-6', 'opacity-0 group-hover:opacity-100 transition-opacity'), children: _jsx(IoTrashOutline, { className: "w-3.5 h-3.5" }) }) }), _jsx(TooltipContent, { children: show_delete_confirm ? 'Click again to confirm' : 'Delete message' })] }))] }),
|
|
84
|
+
: 'hover:bg-background/50'), children: [_jsx(IoDocumentAttachSharp, { className: "w-3 h-3 mr-1" }), _jsx("span", { className: "truncate max-w-[100px]", children: ref.name })] }, ref.id))) })), is_sender && !is_deleted && on_delete && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: show_delete_confirm ? 'destructive' : 'ghost', size: "icon", onClick: handle_delete_click, className: cn('cls_bubble_delete_btn', 'absolute -left-8 top-1/2 -translate-y-1/2', 'w-6 h-6', 'opacity-0 group-hover:opacity-100 transition-opacity'), children: _jsx(IoTrashOutline, { className: "w-3.5 h-3.5" }) }) }), _jsx(TooltipContent, { children: show_delete_confirm ? 'Click again to confirm' : 'Delete message' })] }))] }), _jsxs("div", { className: cn('cls_bubble_meta', 'flex flex-row items-center gap-1 mt-1', // Explicitly set flex-row to prevent any reversal
|
|
85
|
+
is_sender ? 'justify-end mr-1' : 'ml-1'), children: [_jsx("span", { className: "cls_bubble_time text-xs text-muted-foreground order-1", children: format_timestamp(message.created_at, timezone) }), is_sender && message.read_at && (_jsx(IoCheckmarkDoneSharp, { className: "h-4 w-4 text-green-500 flex-shrink-0 order-2" }))] })] }), is_sender && (_jsxs(Avatar, { className: "cls_bubble_avatar h-8 w-8 ml-2 flex-shrink-0", children: [_jsx(AvatarImage, { src: sender_profile?.avatar_url, alt: "Your avatar" }), _jsx(AvatarFallback, { className: "text-xs bg-primary/20 text-primary", children: get_initials(sender_profile?.name) })] }))] }));
|
|
82
86
|
}
|
|
83
87
|
ChatBubble.displayName = 'ChatBubble';
|
|
84
88
|
//# sourceMappingURL=chat_bubble.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat_bubble.js","sourceRoot":"","sources":["../../../src/components/ui/chat_bubble.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,CAAC;;AAEb,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,qBAAqB,
|
|
1
|
+
{"version":3,"file":"chat_bubble.js","sourceRoot":"","sources":["../../../src/components/ui/chat_bubble.tsx"],"names":[],"mappings":"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"}
|