hazo_chat 4.0.1 → 4.0.2

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 (155) hide show
  1. package/README.md +3 -1
  2. package/SETUP_CHECKLIST.md +4 -2
  3. package/package.json +1 -1
  4. package/dist/api/index.d.ts +0 -41
  5. package/dist/api/index.d.ts.map +0 -1
  6. package/dist/api/index.js +0 -40
  7. package/dist/api/index.js.map +0 -1
  8. package/dist/api/messages.d.ts +0 -85
  9. package/dist/api/messages.d.ts.map +0 -1
  10. package/dist/api/messages.js +0 -626
  11. package/dist/api/messages.js.map +0 -1
  12. package/dist/api/types.d.ts +0 -134
  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/api/unread_count.d.ts +0 -82
  17. package/dist/api/unread_count.d.ts.map +0 -1
  18. package/dist/api/unread_count.js +0 -111
  19. package/dist/api/unread_count.js.map +0 -1
  20. package/dist/components/hazo_chat/hazo_chat.d.ts +0 -28
  21. package/dist/components/hazo_chat/hazo_chat.d.ts.map +0 -1
  22. package/dist/components/hazo_chat/hazo_chat.js +0 -230
  23. package/dist/components/hazo_chat/hazo_chat.js.map +0 -1
  24. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts +0 -17
  25. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts.map +0 -1
  26. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js +0 -60
  27. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js.map +0 -1
  28. package/dist/components/hazo_chat/hazo_chat_context.d.ts +0 -46
  29. package/dist/components/hazo_chat/hazo_chat_context.d.ts.map +0 -1
  30. package/dist/components/hazo_chat/hazo_chat_context.js +0 -277
  31. package/dist/components/hazo_chat/hazo_chat_context.js.map +0 -1
  32. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts +0 -15
  33. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts.map +0 -1
  34. package/dist/components/hazo_chat/hazo_chat_document_viewer.js +0 -140
  35. package/dist/components/hazo_chat/hazo_chat_document_viewer.js.map +0 -1
  36. package/dist/components/hazo_chat/hazo_chat_header.d.ts +0 -16
  37. package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +0 -1
  38. package/dist/components/hazo_chat/hazo_chat_header.js +0 -45
  39. package/dist/components/hazo_chat/hazo_chat_header.js.map +0 -1
  40. package/dist/components/hazo_chat/hazo_chat_input.d.ts +0 -16
  41. package/dist/components/hazo_chat/hazo_chat_input.d.ts.map +0 -1
  42. package/dist/components/hazo_chat/hazo_chat_input.js +0 -75
  43. package/dist/components/hazo_chat/hazo_chat_input.js.map +0 -1
  44. package/dist/components/hazo_chat/hazo_chat_messages.d.ts +0 -18
  45. package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +0 -1
  46. package/dist/components/hazo_chat/hazo_chat_messages.js +0 -255
  47. package/dist/components/hazo_chat/hazo_chat_messages.js.map +0 -1
  48. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts +0 -16
  49. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts.map +0 -1
  50. package/dist/components/hazo_chat/hazo_chat_reference_list.js +0 -59
  51. package/dist/components/hazo_chat/hazo_chat_reference_list.js.map +0 -1
  52. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts +0 -18
  53. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts.map +0 -1
  54. package/dist/components/hazo_chat/hazo_chat_sidebar.js +0 -72
  55. package/dist/components/hazo_chat/hazo_chat_sidebar.js.map +0 -1
  56. package/dist/components/hazo_chat/index.d.ts +0 -16
  57. package/dist/components/hazo_chat/index.d.ts.map +0 -1
  58. package/dist/components/hazo_chat/index.js +0 -19
  59. package/dist/components/hazo_chat/index.js.map +0 -1
  60. package/dist/components/index.d.ts +0 -9
  61. package/dist/components/index.d.ts.map +0 -1
  62. package/dist/components/index.js +0 -11
  63. package/dist/components/index.js.map +0 -1
  64. package/dist/components/ui/avatar.d.ts +0 -13
  65. package/dist/components/ui/avatar.d.ts.map +0 -1
  66. package/dist/components/ui/avatar.js +0 -28
  67. package/dist/components/ui/avatar.js.map +0 -1
  68. package/dist/components/ui/badge.d.ts +0 -16
  69. package/dist/components/ui/badge.d.ts.map +0 -1
  70. package/dist/components/ui/badge.js +0 -36
  71. package/dist/components/ui/badge.js.map +0 -1
  72. package/dist/components/ui/button.d.ts +0 -18
  73. package/dist/components/ui/button.d.ts.map +0 -1
  74. package/dist/components/ui/button.js +0 -47
  75. package/dist/components/ui/button.js.map +0 -1
  76. package/dist/components/ui/chat_bubble.d.ts +0 -18
  77. package/dist/components/ui/chat_bubble.d.ts.map +0 -1
  78. package/dist/components/ui/chat_bubble.js +0 -130
  79. package/dist/components/ui/chat_bubble.js.map +0 -1
  80. package/dist/components/ui/hover-card.d.ts +0 -13
  81. package/dist/components/ui/hover-card.d.ts.map +0 -1
  82. package/dist/components/ui/hover-card.js +0 -17
  83. package/dist/components/ui/hover-card.js.map +0 -1
  84. package/dist/components/ui/index.d.ts +0 -19
  85. package/dist/components/ui/index.d.ts.map +0 -1
  86. package/dist/components/ui/index.js +0 -21
  87. package/dist/components/ui/index.js.map +0 -1
  88. package/dist/components/ui/input.d.ts +0 -11
  89. package/dist/components/ui/input.d.ts.map +0 -1
  90. package/dist/components/ui/input.js +0 -18
  91. package/dist/components/ui/input.js.map +0 -1
  92. package/dist/components/ui/loading_skeleton.d.ts +0 -19
  93. package/dist/components/ui/loading_skeleton.d.ts.map +0 -1
  94. package/dist/components/ui/loading_skeleton.js +0 -30
  95. package/dist/components/ui/loading_skeleton.js.map +0 -1
  96. package/dist/components/ui/scroll-area.d.ts +0 -12
  97. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  98. package/dist/components/ui/scroll-area.js +0 -25
  99. package/dist/components/ui/scroll-area.js.map +0 -1
  100. package/dist/components/ui/separator.d.ts +0 -11
  101. package/dist/components/ui/separator.d.ts.map +0 -1
  102. package/dist/components/ui/separator.js +0 -18
  103. package/dist/components/ui/separator.js.map +0 -1
  104. package/dist/components/ui/skeleton.d.ts +0 -9
  105. package/dist/components/ui/skeleton.d.ts.map +0 -1
  106. package/dist/components/ui/skeleton.js +0 -16
  107. package/dist/components/ui/skeleton.js.map +0 -1
  108. package/dist/components/ui/textarea.d.ts +0 -11
  109. package/dist/components/ui/textarea.d.ts.map +0 -1
  110. package/dist/components/ui/textarea.js +0 -18
  111. package/dist/components/ui/textarea.js.map +0 -1
  112. package/dist/components/ui/tooltip.d.ts +0 -14
  113. package/dist/components/ui/tooltip.d.ts.map +0 -1
  114. package/dist/components/ui/tooltip.js +0 -30
  115. package/dist/components/ui/tooltip.js.map +0 -1
  116. package/dist/hooks/index.d.ts +0 -10
  117. package/dist/hooks/index.d.ts.map +0 -1
  118. package/dist/hooks/index.js +0 -10
  119. package/dist/hooks/index.js.map +0 -1
  120. package/dist/hooks/use_chat_messages.d.ts +0 -38
  121. package/dist/hooks/use_chat_messages.d.ts.map +0 -1
  122. package/dist/hooks/use_chat_messages.js +0 -584
  123. package/dist/hooks/use_chat_messages.js.map +0 -1
  124. package/dist/hooks/use_chat_references.d.ts +0 -17
  125. package/dist/hooks/use_chat_references.d.ts.map +0 -1
  126. package/dist/hooks/use_chat_references.js +0 -133
  127. package/dist/hooks/use_chat_references.js.map +0 -1
  128. package/dist/hooks/use_file_upload.d.ts +0 -26
  129. package/dist/hooks/use_file_upload.d.ts.map +0 -1
  130. package/dist/hooks/use_file_upload.js +0 -216
  131. package/dist/hooks/use_file_upload.js.map +0 -1
  132. package/dist/index.d.ts +0 -13
  133. package/dist/index.d.ts.map +0 -1
  134. package/dist/index.js +0 -17
  135. package/dist/index.js.map +0 -1
  136. package/dist/lib/config.d.ts +0 -41
  137. package/dist/lib/config.d.ts.map +0 -1
  138. package/dist/lib/config.js +0 -93
  139. package/dist/lib/config.js.map +0 -1
  140. package/dist/lib/constants.d.ts +0 -41
  141. package/dist/lib/constants.d.ts.map +0 -1
  142. package/dist/lib/constants.js +0 -72
  143. package/dist/lib/constants.js.map +0 -1
  144. package/dist/lib/index.d.ts +0 -9
  145. package/dist/lib/index.d.ts.map +0 -1
  146. package/dist/lib/index.js +0 -9
  147. package/dist/lib/index.js.map +0 -1
  148. package/dist/lib/utils.d.ts +0 -17
  149. package/dist/lib/utils.d.ts.map +0 -1
  150. package/dist/lib/utils.js +0 -20
  151. package/dist/lib/utils.js.map +0 -1
  152. package/dist/types/index.d.ts +0 -570
  153. package/dist/types/index.d.ts.map +0 -1
  154. package/dist/types/index.js +0 -11
  155. package/dist/types/index.js.map +0 -1
@@ -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"}
@@ -1,60 +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
- '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
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat_attachment_preview.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_attachment_preview.tsx"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- /**
2
- * HazoChatContext - React context for shared state management
3
- *
4
- * Provides centralized state management for:
5
- * - Selected reference/document
6
- * - Current user profile (fetched via API)
7
- * - Pending file attachments
8
- * - Sidebar collapsed state (mobile)
9
- * - Polling connection status
10
- * - Error handling
11
- *
12
- * Uses API calls to fetch user data - no server-side dependencies.
13
- */
14
- import React, { type ReactNode } from 'react';
15
- import type { ClientLogger } from 'hazo_logs/ui';
16
- import type { HazoChatContextValue, ChatReferenceItem } from '../../types/index.js';
17
- declare const HazoChatContext: React.Context<HazoChatContextValue | null>;
18
- interface HazoChatProviderProps {
19
- children: ReactNode;
20
- /** Logger instance for client-side logging */
21
- logger: ClientLogger;
22
- /** Base URL for API endpoints (default: '/api/hazo_chat') */
23
- api_base_url?: string;
24
- /** Initial references from props */
25
- initial_references?: ChatReferenceItem[];
26
- }
27
- /**
28
- * HazoChatProvider - Context provider for HazoChat component tree
29
- *
30
- * Fetches current user via API on mount.
31
- *
32
- * @param children - Child components
33
- * @param logger - Logger instance for client-side logging
34
- * @param api_base_url - Base URL for API endpoints
35
- * @param initial_references - Initial references from props
36
- */
37
- export declare function HazoChatProvider({ children, logger, api_base_url, initial_references }: HazoChatProviderProps): import("react/jsx-runtime").JSX.Element;
38
- /**
39
- * useHazoChatContext - Hook to access HazoChat context
40
- *
41
- * @throws Error if used outside of HazoChatProvider
42
- * @returns HazoChatContextValue
43
- */
44
- export declare function useHazoChatContext(): HazoChatContextValue;
45
- export { HazoChatContext };
46
- //# sourceMappingURL=hazo_chat_context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat_context.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EACV,oBAAoB,EAEpB,iBAAiB,EAIlB,MAAM,sBAAsB,CAAC;AAyH9B,QAAA,MAAM,eAAe,4CAAmD,CAAC;AAMzE,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,8CAA8C;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,YAA+B,EAC/B,kBAAuB,EACxB,EAAE,qBAAqB,2CA2LvB;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,oBAAoB,CAUzD;AAMD,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,277 +0,0 @@
1
- /**
2
- * HazoChatContext - React context for shared state management
3
- *
4
- * Provides centralized state management for:
5
- * - Selected reference/document
6
- * - Current user profile (fetched via API)
7
- * - Pending file attachments
8
- * - Sidebar collapsed state (mobile)
9
- * - Polling connection status
10
- * - Error handling
11
- *
12
- * Uses API calls to fetch user data - no server-side dependencies.
13
- */
14
- 'use client';
15
- import { jsx as _jsx } from "react/jsx-runtime";
16
- import { createContext, useContext, useReducer, useCallback, useEffect, useMemo } from 'react';
17
- // ============================================================================
18
- // Initial State
19
- // ============================================================================
20
- const initial_state = {
21
- current_user: null,
22
- selected_reference: null,
23
- highlighted_message_id: null,
24
- pending_attachments: [],
25
- is_sidebar_open: false,
26
- polling_status: 'connected',
27
- all_references: [],
28
- error_message: null
29
- };
30
- // ============================================================================
31
- // Reducer
32
- // ============================================================================
33
- function hazo_chat_reducer(state, action) {
34
- switch (action.type) {
35
- case 'SET_CURRENT_USER':
36
- return { ...state, current_user: action.payload };
37
- case 'SET_SELECTED_REFERENCE':
38
- return { ...state, selected_reference: action.payload };
39
- case 'SET_HIGHLIGHTED_MESSAGE_ID':
40
- return { ...state, highlighted_message_id: action.payload };
41
- case 'ADD_PENDING_ATTACHMENT':
42
- return {
43
- ...state,
44
- pending_attachments: [...state.pending_attachments, action.payload]
45
- };
46
- case 'REMOVE_PENDING_ATTACHMENT':
47
- return {
48
- ...state,
49
- pending_attachments: state.pending_attachments.filter((attachment) => attachment.id !== action.payload)
50
- };
51
- case 'UPDATE_PENDING_ATTACHMENT':
52
- return {
53
- ...state,
54
- pending_attachments: state.pending_attachments.map((attachment) => attachment.id === action.payload.id
55
- ? { ...attachment, ...action.payload.updates }
56
- : attachment)
57
- };
58
- case 'CLEAR_PENDING_ATTACHMENTS':
59
- // Revoke any object URLs to prevent memory leaks
60
- state.pending_attachments.forEach((attachment) => {
61
- if (attachment.preview_url) {
62
- URL.revokeObjectURL(attachment.preview_url);
63
- }
64
- });
65
- return { ...state, pending_attachments: [] };
66
- case 'TOGGLE_SIDEBAR':
67
- return { ...state, is_sidebar_open: !state.is_sidebar_open };
68
- case 'SET_SIDEBAR_OPEN':
69
- return { ...state, is_sidebar_open: action.payload };
70
- case 'SET_POLLING_STATUS':
71
- return { ...state, polling_status: action.payload };
72
- case 'ADD_REFERENCE':
73
- // Check if reference already exists
74
- if (state.all_references.some((ref) => ref.id === action.payload.id)) {
75
- return state;
76
- }
77
- return {
78
- ...state,
79
- all_references: [...state.all_references, action.payload]
80
- };
81
- case 'SET_ALL_REFERENCES':
82
- return { ...state, all_references: action.payload };
83
- case 'SET_ERROR_MESSAGE':
84
- return { ...state, error_message: action.payload };
85
- default:
86
- return state;
87
- }
88
- }
89
- // ============================================================================
90
- // Context
91
- // ============================================================================
92
- const HazoChatContext = createContext(null);
93
- // ============================================================================
94
- // Provider Component
95
- // ============================================================================
96
- /**
97
- * HazoChatProvider - Context provider for HazoChat component tree
98
- *
99
- * Fetches current user via API on mount.
100
- *
101
- * @param children - Child components
102
- * @param logger - Logger instance for client-side logging
103
- * @param api_base_url - Base URL for API endpoints
104
- * @param initial_references - Initial references from props
105
- */
106
- export function HazoChatProvider({ children, logger, api_base_url = '/api/hazo_chat', initial_references = [] }) {
107
- const [state, dispatch] = useReducer(hazo_chat_reducer, {
108
- ...initial_state,
109
- all_references: initial_references
110
- });
111
- // -------------------------------------------------------------------------
112
- // Load current user on mount via API
113
- // -------------------------------------------------------------------------
114
- useEffect(() => {
115
- async function load_current_user() {
116
- try {
117
- // Try to get current user from hazo_auth me endpoint
118
- const response = await fetch('/api/hazo_auth/me', {
119
- credentials: 'include'
120
- });
121
- if (response.ok) {
122
- const data = await response.json();
123
- if (data.authenticated) {
124
- // Handle two different response structures:
125
- // Structure 1 (with nested user object): { authenticated: true, user: { id, email_address, ... } }
126
- // Structure 2 (flat): { authenticated: true, user_id, email, name, ... }
127
- const user_data = data.user || data;
128
- const user_id = user_data.id || data.user_id || '';
129
- // Support both email_address (hazo_auth standard) and email (legacy)
130
- const email = user_data.email_address || user_data.email || data.email || '';
131
- const name = user_data.name || data.name || '';
132
- const profile_picture_url = user_data.profile_picture_url || data.profile_picture_url;
133
- if (user_id) {
134
- const user_profile = {
135
- id: user_id,
136
- name: name || (email ? email.split('@')[0] : 'User'),
137
- email: email,
138
- avatar_url: profile_picture_url
139
- };
140
- dispatch({ type: 'SET_CURRENT_USER', payload: user_profile });
141
- }
142
- }
143
- }
144
- }
145
- catch (error) {
146
- logger.error('[HazoChatContext] Failed to load current user:', { error });
147
- dispatch({
148
- type: 'SET_ERROR_MESSAGE',
149
- payload: 'Failed to authenticate user'
150
- });
151
- }
152
- }
153
- load_current_user();
154
- }, [api_base_url, logger]);
155
- // -------------------------------------------------------------------------
156
- // Action creators
157
- // -------------------------------------------------------------------------
158
- const set_selected_reference = useCallback((reference) => {
159
- dispatch({ type: 'SET_SELECTED_REFERENCE', payload: reference });
160
- // Also set highlighted message if reference has a message_id
161
- if (reference?.message_id) {
162
- dispatch({
163
- type: 'SET_HIGHLIGHTED_MESSAGE_ID',
164
- payload: reference.message_id
165
- });
166
- }
167
- }, []);
168
- const set_highlighted_message_id = useCallback((message_id) => {
169
- dispatch({ type: 'SET_HIGHLIGHTED_MESSAGE_ID', payload: message_id });
170
- }, []);
171
- const add_pending_attachment = useCallback((file) => {
172
- const id = `attachment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
173
- // Create preview URL for images
174
- let preview_url;
175
- if (file.type.startsWith('image/')) {
176
- preview_url = URL.createObjectURL(file);
177
- }
178
- const attachment = {
179
- id,
180
- file,
181
- preview_url,
182
- upload_status: 'pending'
183
- };
184
- dispatch({ type: 'ADD_PENDING_ATTACHMENT', payload: attachment });
185
- }, []);
186
- const remove_pending_attachment = useCallback((attachment_id) => {
187
- // Find and revoke object URL before removing
188
- const attachment = state.pending_attachments.find((a) => a.id === attachment_id);
189
- if (attachment?.preview_url) {
190
- URL.revokeObjectURL(attachment.preview_url);
191
- }
192
- dispatch({ type: 'REMOVE_PENDING_ATTACHMENT', payload: attachment_id });
193
- }, [state.pending_attachments]);
194
- const update_pending_attachment = useCallback((attachment_id, updates) => {
195
- dispatch({
196
- type: 'UPDATE_PENDING_ATTACHMENT',
197
- payload: { id: attachment_id, updates }
198
- });
199
- }, []);
200
- const clear_pending_attachments = useCallback(() => {
201
- dispatch({ type: 'CLEAR_PENDING_ATTACHMENTS' });
202
- }, []);
203
- const toggle_sidebar = useCallback(() => {
204
- dispatch({ type: 'TOGGLE_SIDEBAR' });
205
- }, []);
206
- const set_sidebar_open = useCallback((is_open) => {
207
- dispatch({ type: 'SET_SIDEBAR_OPEN', payload: is_open });
208
- }, []);
209
- const set_error_message = useCallback((message) => {
210
- dispatch({ type: 'SET_ERROR_MESSAGE', payload: message });
211
- }, []);
212
- const add_reference = useCallback((reference) => {
213
- dispatch({ type: 'ADD_REFERENCE', payload: reference });
214
- }, []);
215
- // -------------------------------------------------------------------------
216
- // Memoized context value
217
- // -------------------------------------------------------------------------
218
- const context_value = useMemo(() => ({
219
- // State
220
- current_user: state.current_user,
221
- selected_reference: state.selected_reference,
222
- highlighted_message_id: state.highlighted_message_id,
223
- pending_attachments: state.pending_attachments,
224
- is_sidebar_open: state.is_sidebar_open,
225
- polling_status: state.polling_status,
226
- all_references: state.all_references,
227
- error_message: state.error_message,
228
- // Logger
229
- logger,
230
- // Actions
231
- set_selected_reference,
232
- set_highlighted_message_id,
233
- add_pending_attachment,
234
- remove_pending_attachment,
235
- update_pending_attachment,
236
- clear_pending_attachments,
237
- toggle_sidebar,
238
- set_sidebar_open,
239
- set_error_message,
240
- add_reference
241
- }), [
242
- state,
243
- logger,
244
- set_selected_reference,
245
- set_highlighted_message_id,
246
- add_pending_attachment,
247
- remove_pending_attachment,
248
- update_pending_attachment,
249
- clear_pending_attachments,
250
- toggle_sidebar,
251
- set_sidebar_open,
252
- set_error_message,
253
- add_reference
254
- ]);
255
- return (_jsx(HazoChatContext.Provider, { value: context_value, children: children }));
256
- }
257
- // ============================================================================
258
- // Custom Hook
259
- // ============================================================================
260
- /**
261
- * useHazoChatContext - Hook to access HazoChat context
262
- *
263
- * @throws Error if used outside of HazoChatProvider
264
- * @returns HazoChatContextValue
265
- */
266
- export function useHazoChatContext() {
267
- const context = useContext(HazoChatContext);
268
- if (!context) {
269
- throw new Error('useHazoChatContext must be used within a HazoChatProvider');
270
- }
271
- return context;
272
- }
273
- // ============================================================================
274
- // Export Context for testing
275
- // ============================================================================
276
- export { HazoChatContext };
277
- //# sourceMappingURL=hazo_chat_context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat_context.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_context.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * HazoChatDocumentViewer Component
3
- *
4
- * Document preview area supporting:
5
- * - PDF viewing via hazo_pdf
6
- * - Image preview (png, jpg, gif, webp)
7
- * - Text file preview
8
- * - Download link for unsupported types
9
- */
10
- import type { HazoChatDocumentViewerProps } from '../../types/index.js';
11
- export declare function HazoChatDocumentViewer({ reference, className }: HazoChatDocumentViewerProps): import("react/jsx-runtime").JSX.Element;
12
- export declare namespace HazoChatDocumentViewer {
13
- var displayName: string;
14
- }
15
- //# sourceMappingURL=hazo_chat_document_viewer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat_document_viewer.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_document_viewer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,2BAA2B,EAAqB,MAAM,sBAAsB,CAAC;AAiQ3F,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,SAAS,EACV,EAAE,2BAA2B,2CAuD7B;yBA1De,sBAAsB"}
@@ -1,140 +0,0 @@
1
- /**
2
- * HazoChatDocumentViewer Component
3
- *
4
- * Document preview area supporting:
5
- * - PDF viewing via hazo_pdf
6
- * - Image preview (png, jpg, gif, webp)
7
- * - Text file preview
8
- * - Download link for unsupported types
9
- */
10
- 'use client';
11
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
- import React, { useMemo } from 'react';
13
- import { IoDocumentOutline, IoDownloadOutline, IoOpenOutline } from 'react-icons/io5';
14
- import { cn } from '../../lib/utils.js';
15
- import { PREVIEWABLE_TYPES, MIME_TYPE_MAP } from '../../lib/constants.js';
16
- import { LoadingSkeleton } from '../ui/loading_skeleton.js';
17
- import { Button } from '../ui/button.js';
18
- // ============================================================================
19
- // Helper Functions
20
- // ============================================================================
21
- /**
22
- * Infer MIME type from file name extension
23
- */
24
- function infer_mime_type(reference) {
25
- // If mime_type is already provided, use it
26
- if (reference.mime_type) {
27
- return reference.mime_type;
28
- }
29
- // Try to infer from file name extension
30
- const name = reference.name || reference.url || '';
31
- const extension = name.split('.').pop()?.toLowerCase();
32
- if (extension && MIME_TYPE_MAP[extension]) {
33
- return MIME_TYPE_MAP[extension];
34
- }
35
- return undefined;
36
- }
37
- /**
38
- * Check if file is previewable as image
39
- */
40
- function is_image(mime_type) {
41
- if (!mime_type)
42
- return false;
43
- return PREVIEWABLE_TYPES.image.includes(mime_type);
44
- }
45
- /**
46
- * Check if file is previewable as PDF
47
- */
48
- function is_pdf(mime_type) {
49
- if (!mime_type)
50
- return false;
51
- return PREVIEWABLE_TYPES.pdf.includes(mime_type);
52
- }
53
- /**
54
- * Check if file is previewable as text
55
- */
56
- function is_text(mime_type) {
57
- if (!mime_type)
58
- return false;
59
- return PREVIEWABLE_TYPES.text.includes(mime_type);
60
- }
61
- /**
62
- * Wrapper component that adds download and open in new tab buttons to viewers
63
- */
64
- function ViewerWithActions({ url, name, children }) {
65
- return (_jsxs("div", { className: "relative w-full h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-10 flex items-center gap-2", children: [_jsx("a", { href: url, download: name, "aria-label": `Download ${name}`, children: _jsx(Button, { variant: "outline", size: "icon", className: "h-8 w-8 bg-background/60 backdrop-blur-sm hover:bg-background/80", children: _jsx(IoDownloadOutline, { className: "h-4 w-4" }) }) }), _jsx(Button, { variant: "outline", size: "icon", className: "h-8 w-8 bg-background/60 backdrop-blur-sm hover:bg-background/80", onClick: () => window.open(url, '_blank'), "aria-label": `Open ${name} in a new tab`, children: _jsx(IoOpenOutline, { className: "h-4 w-4" }) })] }), _jsx("div", { className: "w-full h-full", children: children })] }));
66
- }
67
- function PdfViewer({ url, name }) {
68
- // Note: In production, this would use hazo_pdf component
69
- // For now, we use an iframe fallback
70
- return (_jsx("div", { className: "cls_pdf_viewer w-full h-full flex flex-col", children: _jsx("iframe", { src: `${url}#view=FitH`, title: name, className: "w-full flex-1 border-0 rounded-lg", "aria-label": `PDF document: ${name}` }) }));
71
- }
72
- function ImageViewer({ url, name }) {
73
- return (_jsx("div", { className: "cls_image_viewer w-full h-full flex items-center justify-center p-4 overflow-auto", children: _jsx("img", { src: url, alt: name, className: "max-w-full max-h-full object-contain rounded-lg shadow-sm" }) }));
74
- }
75
- function TextViewer({ url, name }) {
76
- const [content, set_content] = React.useState(null);
77
- const [is_loading, set_is_loading] = React.useState(true);
78
- const [error, set_error] = React.useState(null);
79
- React.useEffect(() => {
80
- async function fetch_content() {
81
- try {
82
- set_is_loading(true);
83
- const response = await fetch(url);
84
- if (!response.ok)
85
- throw new Error('Failed to fetch');
86
- const text = await response.text();
87
- set_content(text);
88
- }
89
- catch (err) {
90
- set_error('Failed to load text content');
91
- }
92
- finally {
93
- set_is_loading(false);
94
- }
95
- }
96
- fetch_content();
97
- }, [url]);
98
- if (is_loading) {
99
- return _jsx(LoadingSkeleton, { variant: "reference", count: 5 });
100
- }
101
- if (error) {
102
- return (_jsx("div", { className: "cls_text_viewer_error flex items-center justify-center h-full text-muted-foreground", children: error }));
103
- }
104
- return (_jsx("div", { className: "cls_text_viewer w-full h-full overflow-auto p-4", children: _jsx("pre", { className: "text-sm font-mono bg-muted p-4 rounded-lg whitespace-pre-wrap break-words", "aria-label": `Text file: ${name}`, children: content }) }));
105
- }
106
- function DownloadFallback({ url, name, mime_type }) {
107
- return (_jsxs("div", { className: "cls_download_fallback flex flex-col items-center justify-center h-full gap-4 p-4", children: [_jsx(IoDocumentOutline, { className: "w-16 h-16 text-muted-foreground" }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "font-medium text-foreground", children: name }), mime_type && (_jsx("p", { className: "text-sm text-muted-foreground mt-1", children: mime_type }))] }), _jsxs("a", { href: url, download: name, className: cn('cls_download_btn', 'flex items-center gap-2 px-4 py-2 rounded-lg', 'bg-primary text-primary-foreground', 'hover:bg-primary/90 transition-colors'), children: [_jsx(IoDownloadOutline, { className: "w-4 h-4" }), "Download"] })] }));
108
- }
109
- // ============================================================================
110
- // Empty State Component
111
- // ============================================================================
112
- function EmptyState() {
113
- return (_jsxs("div", { className: "cls_viewer_empty flex flex-col items-center justify-center h-full gap-2 p-4 text-muted-foreground", children: [_jsx(IoDocumentOutline, { className: "w-12 h-12 opacity-50" }), _jsx("p", { className: "text-sm", children: "Select a document to preview" })] }));
114
- }
115
- // ============================================================================
116
- // Main Component
117
- // ============================================================================
118
- export function HazoChatDocumentViewer({ reference, className }) {
119
- // Infer MIME type from reference (use provided or infer from filename)
120
- const inferred_mime_type = useMemo(() => {
121
- if (!reference)
122
- return undefined;
123
- return infer_mime_type(reference);
124
- }, [reference]);
125
- // Determine viewer type based on inferred mime_type
126
- const viewer_type = useMemo(() => {
127
- if (!reference)
128
- return 'empty';
129
- if (is_pdf(inferred_mime_type))
130
- return 'pdf';
131
- if (is_image(inferred_mime_type))
132
- return 'image';
133
- if (is_text(inferred_mime_type))
134
- return 'text';
135
- return 'download';
136
- }, [reference, inferred_mime_type]);
137
- return (_jsxs("div", { className: cn('cls_hazo_chat_document_viewer', 'flex-1 bg-muted/30 rounded-lg overflow-hidden', className), role: "region", "aria-label": "Document viewer", children: [viewer_type === 'empty' && _jsx(EmptyState, {}), viewer_type === 'pdf' && reference && (_jsx(ViewerWithActions, { url: reference.url, name: reference.name, children: _jsx(PdfViewer, { url: reference.url, name: reference.name }) })), viewer_type === 'image' && reference && (_jsx(ViewerWithActions, { url: reference.url, name: reference.name, children: _jsx(ImageViewer, { url: reference.url, name: reference.name }) })), viewer_type === 'text' && reference && (_jsx(ViewerWithActions, { url: reference.url, name: reference.name, children: _jsx(TextViewer, { url: reference.url, name: reference.name }) })), viewer_type === 'download' && reference && (_jsx(DownloadFallback, { url: reference.url, name: reference.name, mime_type: reference.mime_type }))] }));
138
- }
139
- HazoChatDocumentViewer.displayName = 'HazoChatDocumentViewer';
140
- //# sourceMappingURL=hazo_chat_document_viewer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat_document_viewer.js","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_document_viewer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,eAAe,CAAC,SAA4B;IACnD,2CAA2C;IAC3C,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,wCAAwC;IACxC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;IAEvD,IAAI,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,SAAkB;IAClC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,SAAkB;IAChC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,SAAkB;IACjC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAYD;;GAEG;AACH,SAAS,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAsB;IACpE,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aAErC,eAAK,SAAS,EAAC,qDAAqD,aAClE,YACE,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,IAAI,gBACF,YAAY,IAAI,EAAE,YAE9B,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,kEAAkE,YAE5E,KAAC,iBAAiB,IAAC,SAAS,EAAC,SAAS,GAAG,GAClC,GACP,EACJ,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,kEAAkE,EAC5E,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,gBAC7B,QAAQ,IAAI,eAAe,YAEvC,KAAC,aAAa,IAAC,SAAS,EAAC,SAAS,GAAG,GAC9B,IACL,EAEN,cAAK,SAAS,EAAC,eAAe,YAC3B,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC;AAWD,SAAS,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAkB;IAC9C,yDAAyD;IACzD,qCAAqC;IACrC,OAAO,CACL,cAAK,SAAS,EAAC,4CAA4C,YACzD,iBACE,GAAG,EAAE,GAAG,GAAG,YAAY,EACvB,KAAK,EAAE,IAAI,EACX,SAAS,EAAC,mCAAmC,gBACjC,iBAAiB,IAAI,EAAE,GACnC,GACE,CACP,CAAC;AACJ,CAAC;AAWD,SAAS,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,EAAoB;IAClD,OAAO,CACL,cAAK,SAAS,EAAC,mFAAmF,YAChG,cACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,IAAI,EACT,SAAS,EAAC,2DAA2D,GACrE,GACE,CACP,CAAC;AACJ,CAAC;AAWD,SAAS,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAmB;IAChD,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE/D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,aAAa;YAC1B,IAAI,CAAC;gBACH,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,WAAW,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,CAAC,6BAA6B,CAAC,CAAC;YAC3C,CAAC;oBAAS,CAAC;gBACT,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,aAAa,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,KAAC,eAAe,IAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAE,CAAC,GAAI,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,cAAK,SAAS,EAAC,qFAAqF,YACjG,KAAK,GACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,iDAAiD,YAC9D,cACE,SAAS,EAAC,2EAA2E,gBACzE,cAAc,IAAI,EAAE,YAE/B,OAAO,GACJ,GACF,CACP,CAAC;AACJ,CAAC;AAYD,SAAS,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAyB;IACvE,OAAO,CACL,eAAK,SAAS,EAAC,kFAAkF,aAC/F,KAAC,iBAAiB,IAAC,SAAS,EAAC,iCAAiC,GAAG,EACjE,eAAK,SAAS,EAAC,aAAa,aAC1B,YAAG,SAAS,EAAC,6BAA6B,YAAE,IAAI,GAAK,EACpD,SAAS,IAAI,CACZ,YAAG,SAAS,EAAC,oCAAoC,YAAE,SAAS,GAAK,CAClE,IACG,EACN,aACE,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,EAAE,CACX,kBAAkB,EAClB,8CAA8C,EAC9C,oCAAoC,EACpC,uCAAuC,CACxC,aAED,KAAC,iBAAiB,IAAC,SAAS,EAAC,SAAS,GAAG,gBAEvC,IACA,CACP,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,SAAS,UAAU;IACjB,OAAO,CACL,eAAK,SAAS,EAAC,mGAAmG,aAChH,KAAC,iBAAiB,IAAC,SAAS,EAAC,sBAAsB,GAAG,EACtD,YAAG,SAAS,EAAC,SAAS,6CAAiC,IACnD,CACP,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,UAAU,sBAAsB,CAAC,EACrC,SAAS,EACT,SAAS,EACmB;IAC5B,uEAAuE;IACvE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QACjC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,oDAAoD;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC;QAC/B,IAAI,MAAM,CAAC,kBAAkB,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,QAAQ,CAAC,kBAAkB,CAAC;YAAE,OAAO,OAAO,CAAC;QACjD,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAAE,OAAO,MAAM,CAAC;QAC/C,OAAO,UAAU,CAAC;IACpB,CAAC,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEpC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,+BAA+B,EAC/B,+CAA+C,EAC/C,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,gBACF,iBAAiB,aAE3B,WAAW,KAAK,OAAO,IAAI,KAAC,UAAU,KAAG,EAEzC,WAAW,KAAK,KAAK,IAAI,SAAS,IAAI,CACrC,KAAC,iBAAiB,IAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,YACzD,KAAC,SAAS,IAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,GAAI,GACrC,CACrB,EAEA,WAAW,KAAK,OAAO,IAAI,SAAS,IAAI,CACvC,KAAC,iBAAiB,IAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,YACzD,KAAC,WAAW,IAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,GAAI,GACvC,CACrB,EAEA,WAAW,KAAK,MAAM,IAAI,SAAS,IAAI,CACtC,KAAC,iBAAiB,IAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,YACzD,KAAC,UAAU,IAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,GAAI,GACtC,CACrB,EAEA,WAAW,KAAK,UAAU,IAAI,SAAS,IAAI,CAC1C,KAAC,gBAAgB,IACf,GAAG,EAAE,SAAS,CAAC,GAAG,EAClB,IAAI,EAAE,SAAS,CAAC,IAAI,EACpB,SAAS,EAAE,SAAS,CAAC,SAAS,GAC9B,CACH,IACG,CACP,CAAC;AACJ,CAAC;AAED,sBAAsB,CAAC,WAAW,GAAG,wBAAwB,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * HazoChatHeader Component
3
- *
4
- * Header row for the chat window containing:
5
- * - Sidebar toggle button (hamburger menu)
6
- * - Title and subtitle
7
- * - Close button
8
- *
9
- * Uses shadcn/ui Button and Tooltip components.
10
- */
11
- import type { HazoChatHeaderProps } from '../../types/index.js';
12
- export declare function HazoChatHeader({ title, subtitle, on_close, on_refresh, is_refreshing, on_toggle_sidebar, is_sidebar_open, show_sidebar_toggle, className }: HazoChatHeaderProps): import("react/jsx-runtime").JSX.Element;
13
- export declare namespace HazoChatHeader {
14
- var displayName: string;
15
- }
16
- //# sourceMappingURL=hazo_chat_header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hazo_chat_header.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat_header.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAYhE,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,mBAA2B,EAC3B,SAAS,EACV,EAAE,mBAAmB,2CAqIrB;yBA/Ie,cAAc"}