quick-chat-react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +294 -0
- package/dist/favicon.ico +0 -0
- package/dist/index.cjs +308 -0
- package/dist/index.js +13703 -0
- package/dist/lib/ChatButton.d.ts +3 -0
- package/dist/lib/ChatButton.d.ts.map +1 -0
- package/dist/lib/QuickChat.d.ts +3 -0
- package/dist/lib/QuickChat.d.ts.map +1 -0
- package/dist/lib/QuickChatProvider.d.ts +324 -0
- package/dist/lib/QuickChatProvider.d.ts.map +1 -0
- package/dist/lib/UserAvatar.d.ts +3 -0
- package/dist/lib/UserAvatar.d.ts.map +1 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/queryKeys.d.ts +15 -0
- package/dist/lib/queryKeys.d.ts.map +1 -0
- package/dist/lib/types.d.ts +132 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/placeholder.svg +1 -0
- package/dist/robots.txt +14 -0
- package/dist/style.css +1 -0
- package/package.json +134 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ChatButtonProps } from './types';
|
|
2
|
+
export declare const ChatButton: ({ supabaseUrl, supabaseAnonKey, userData, onClick, href, position, unreadCount: unreadCountProp, size, badgeColor, icon, floating, className, style, buttonColor, iconColor, label, }: ChatButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=ChatButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatButton.d.ts","sourceRoot":"","sources":["../../src/lib/ChatButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmD/C,eAAO,MAAM,UAAU,GAAI,uLAiBxB,eAAe,4CA8EjB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { QuickChatProps } from './types';
|
|
2
|
+
export declare const QuickChat: ({ supabaseUrl, supabaseAnonKey, userData, theme, authMode, showGroups, allowVoiceMessages, allowFileUpload, allowReactions, showOnlineStatus, showReadReceipts, height, width, onUnreadCountChange, onConversationSelect, }: QuickChatProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=QuickChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickChat.d.ts","sourceRoot":"","sources":["../../src/lib/QuickChat.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,SAAS,CAAC;AAkC/D,eAAO,MAAM,SAAS,GAAI,6NAgBvB,cAAc,4CA0BhB,CAAC"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
3
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
4
|
+
import { Database } from '../integrations/supabase/types';
|
|
5
|
+
import { QuickChatConfig } from './types';
|
|
6
|
+
interface QuickChatContextValue {
|
|
7
|
+
supabase: SupabaseClient<Database>;
|
|
8
|
+
config: QuickChatConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare const useQuickChat: () => QuickChatContextValue;
|
|
11
|
+
export declare const useSupabase: () => SupabaseClient<Database, "public", "public", {
|
|
12
|
+
Tables: {
|
|
13
|
+
contacts: {
|
|
14
|
+
Row: {
|
|
15
|
+
contact_id: string;
|
|
16
|
+
created_at: string;
|
|
17
|
+
id: string;
|
|
18
|
+
user_id: string;
|
|
19
|
+
};
|
|
20
|
+
Insert: {
|
|
21
|
+
contact_id: string;
|
|
22
|
+
created_at?: string;
|
|
23
|
+
id?: string;
|
|
24
|
+
user_id: string;
|
|
25
|
+
};
|
|
26
|
+
Update: {
|
|
27
|
+
contact_id?: string;
|
|
28
|
+
created_at?: string;
|
|
29
|
+
id?: string;
|
|
30
|
+
user_id?: string;
|
|
31
|
+
};
|
|
32
|
+
Relationships: [];
|
|
33
|
+
};
|
|
34
|
+
conversation_members: {
|
|
35
|
+
Row: {
|
|
36
|
+
conversation_id: string;
|
|
37
|
+
id: string;
|
|
38
|
+
joined_at: string;
|
|
39
|
+
role: Database["public"]["Enums"]["member_role"];
|
|
40
|
+
user_id: string;
|
|
41
|
+
};
|
|
42
|
+
Insert: {
|
|
43
|
+
conversation_id: string;
|
|
44
|
+
id?: string;
|
|
45
|
+
joined_at?: string;
|
|
46
|
+
role?: Database["public"]["Enums"]["member_role"];
|
|
47
|
+
user_id: string;
|
|
48
|
+
};
|
|
49
|
+
Update: {
|
|
50
|
+
conversation_id?: string;
|
|
51
|
+
id?: string;
|
|
52
|
+
joined_at?: string;
|
|
53
|
+
role?: Database["public"]["Enums"]["member_role"];
|
|
54
|
+
user_id?: string;
|
|
55
|
+
};
|
|
56
|
+
Relationships: [{
|
|
57
|
+
foreignKeyName: "conversation_members_conversation_id_fkey";
|
|
58
|
+
columns: ["conversation_id"];
|
|
59
|
+
isOneToOne: false;
|
|
60
|
+
referencedRelation: "conversations";
|
|
61
|
+
referencedColumns: ["id"];
|
|
62
|
+
}];
|
|
63
|
+
};
|
|
64
|
+
conversations: {
|
|
65
|
+
Row: {
|
|
66
|
+
avatar_url: string | null;
|
|
67
|
+
created_at: string;
|
|
68
|
+
created_by: string | null;
|
|
69
|
+
id: string;
|
|
70
|
+
name: string | null;
|
|
71
|
+
type: Database["public"]["Enums"]["conversation_type"];
|
|
72
|
+
updated_at: string;
|
|
73
|
+
};
|
|
74
|
+
Insert: {
|
|
75
|
+
avatar_url?: string | null;
|
|
76
|
+
created_at?: string;
|
|
77
|
+
created_by?: string | null;
|
|
78
|
+
id?: string;
|
|
79
|
+
name?: string | null;
|
|
80
|
+
type?: Database["public"]["Enums"]["conversation_type"];
|
|
81
|
+
updated_at?: string;
|
|
82
|
+
};
|
|
83
|
+
Update: {
|
|
84
|
+
avatar_url?: string | null;
|
|
85
|
+
created_at?: string;
|
|
86
|
+
created_by?: string | null;
|
|
87
|
+
id?: string;
|
|
88
|
+
name?: string | null;
|
|
89
|
+
type?: Database["public"]["Enums"]["conversation_type"];
|
|
90
|
+
updated_at?: string;
|
|
91
|
+
};
|
|
92
|
+
Relationships: [];
|
|
93
|
+
};
|
|
94
|
+
message_reactions: {
|
|
95
|
+
Row: {
|
|
96
|
+
created_at: string;
|
|
97
|
+
emoji: string;
|
|
98
|
+
id: string;
|
|
99
|
+
message_id: string;
|
|
100
|
+
user_id: string;
|
|
101
|
+
};
|
|
102
|
+
Insert: {
|
|
103
|
+
created_at?: string;
|
|
104
|
+
emoji: string;
|
|
105
|
+
id?: string;
|
|
106
|
+
message_id: string;
|
|
107
|
+
user_id: string;
|
|
108
|
+
};
|
|
109
|
+
Update: {
|
|
110
|
+
created_at?: string;
|
|
111
|
+
emoji?: string;
|
|
112
|
+
id?: string;
|
|
113
|
+
message_id?: string;
|
|
114
|
+
user_id?: string;
|
|
115
|
+
};
|
|
116
|
+
Relationships: [{
|
|
117
|
+
foreignKeyName: "message_reactions_message_id_fkey";
|
|
118
|
+
columns: ["message_id"];
|
|
119
|
+
isOneToOne: false;
|
|
120
|
+
referencedRelation: "messages";
|
|
121
|
+
referencedColumns: ["id"];
|
|
122
|
+
}];
|
|
123
|
+
};
|
|
124
|
+
message_reads: {
|
|
125
|
+
Row: {
|
|
126
|
+
id: string;
|
|
127
|
+
message_id: string;
|
|
128
|
+
read_at: string;
|
|
129
|
+
user_id: string;
|
|
130
|
+
};
|
|
131
|
+
Insert: {
|
|
132
|
+
id?: string;
|
|
133
|
+
message_id: string;
|
|
134
|
+
read_at?: string;
|
|
135
|
+
user_id: string;
|
|
136
|
+
};
|
|
137
|
+
Update: {
|
|
138
|
+
id?: string;
|
|
139
|
+
message_id?: string;
|
|
140
|
+
read_at?: string;
|
|
141
|
+
user_id?: string;
|
|
142
|
+
};
|
|
143
|
+
Relationships: [{
|
|
144
|
+
foreignKeyName: "message_reads_message_id_fkey";
|
|
145
|
+
columns: ["message_id"];
|
|
146
|
+
isOneToOne: false;
|
|
147
|
+
referencedRelation: "messages";
|
|
148
|
+
referencedColumns: ["id"];
|
|
149
|
+
}];
|
|
150
|
+
};
|
|
151
|
+
messages: {
|
|
152
|
+
Row: {
|
|
153
|
+
content: string | null;
|
|
154
|
+
conversation_id: string;
|
|
155
|
+
created_at: string;
|
|
156
|
+
file_name: string | null;
|
|
157
|
+
file_size: number | null;
|
|
158
|
+
file_url: string | null;
|
|
159
|
+
forwarded_from_id: string | null;
|
|
160
|
+
id: string;
|
|
161
|
+
is_deleted: boolean | null;
|
|
162
|
+
is_edited: boolean | null;
|
|
163
|
+
reply_to_id: string | null;
|
|
164
|
+
sender_id: string;
|
|
165
|
+
type: Database["public"]["Enums"]["message_type"];
|
|
166
|
+
updated_at: string;
|
|
167
|
+
};
|
|
168
|
+
Insert: {
|
|
169
|
+
content?: string | null;
|
|
170
|
+
conversation_id: string;
|
|
171
|
+
created_at?: string;
|
|
172
|
+
file_name?: string | null;
|
|
173
|
+
file_size?: number | null;
|
|
174
|
+
file_url?: string | null;
|
|
175
|
+
forwarded_from_id?: string | null;
|
|
176
|
+
id?: string;
|
|
177
|
+
is_deleted?: boolean | null;
|
|
178
|
+
is_edited?: boolean | null;
|
|
179
|
+
reply_to_id?: string | null;
|
|
180
|
+
sender_id: string;
|
|
181
|
+
type?: Database["public"]["Enums"]["message_type"];
|
|
182
|
+
updated_at?: string;
|
|
183
|
+
};
|
|
184
|
+
Update: {
|
|
185
|
+
content?: string | null;
|
|
186
|
+
conversation_id?: string;
|
|
187
|
+
created_at?: string;
|
|
188
|
+
file_name?: string | null;
|
|
189
|
+
file_size?: number | null;
|
|
190
|
+
file_url?: string | null;
|
|
191
|
+
forwarded_from_id?: string | null;
|
|
192
|
+
id?: string;
|
|
193
|
+
is_deleted?: boolean | null;
|
|
194
|
+
is_edited?: boolean | null;
|
|
195
|
+
reply_to_id?: string | null;
|
|
196
|
+
sender_id?: string;
|
|
197
|
+
type?: Database["public"]["Enums"]["message_type"];
|
|
198
|
+
updated_at?: string;
|
|
199
|
+
};
|
|
200
|
+
Relationships: [{
|
|
201
|
+
foreignKeyName: "messages_conversation_id_fkey";
|
|
202
|
+
columns: ["conversation_id"];
|
|
203
|
+
isOneToOne: false;
|
|
204
|
+
referencedRelation: "conversations";
|
|
205
|
+
referencedColumns: ["id"];
|
|
206
|
+
}, {
|
|
207
|
+
foreignKeyName: "messages_forwarded_from_id_fkey";
|
|
208
|
+
columns: ["forwarded_from_id"];
|
|
209
|
+
isOneToOne: false;
|
|
210
|
+
referencedRelation: "messages";
|
|
211
|
+
referencedColumns: ["id"];
|
|
212
|
+
}, {
|
|
213
|
+
foreignKeyName: "messages_reply_to_id_fkey";
|
|
214
|
+
columns: ["reply_to_id"];
|
|
215
|
+
isOneToOne: false;
|
|
216
|
+
referencedRelation: "messages";
|
|
217
|
+
referencedColumns: ["id"];
|
|
218
|
+
}];
|
|
219
|
+
};
|
|
220
|
+
profiles: {
|
|
221
|
+
Row: {
|
|
222
|
+
avatar_url: string | null;
|
|
223
|
+
bio: string | null;
|
|
224
|
+
created_at: string;
|
|
225
|
+
display_name: string;
|
|
226
|
+
id: string;
|
|
227
|
+
is_online: boolean | null;
|
|
228
|
+
last_seen: string | null;
|
|
229
|
+
updated_at: string;
|
|
230
|
+
};
|
|
231
|
+
Insert: {
|
|
232
|
+
avatar_url?: string | null;
|
|
233
|
+
bio?: string | null;
|
|
234
|
+
created_at?: string;
|
|
235
|
+
display_name?: string;
|
|
236
|
+
id: string;
|
|
237
|
+
is_online?: boolean | null;
|
|
238
|
+
last_seen?: string | null;
|
|
239
|
+
updated_at?: string;
|
|
240
|
+
};
|
|
241
|
+
Update: {
|
|
242
|
+
avatar_url?: string | null;
|
|
243
|
+
bio?: string | null;
|
|
244
|
+
created_at?: string;
|
|
245
|
+
display_name?: string;
|
|
246
|
+
id?: string;
|
|
247
|
+
is_online?: boolean | null;
|
|
248
|
+
last_seen?: string | null;
|
|
249
|
+
updated_at?: string;
|
|
250
|
+
};
|
|
251
|
+
Relationships: [];
|
|
252
|
+
};
|
|
253
|
+
user_roles: {
|
|
254
|
+
Row: {
|
|
255
|
+
id: string;
|
|
256
|
+
role: Database["public"]["Enums"]["app_role"];
|
|
257
|
+
user_id: string;
|
|
258
|
+
};
|
|
259
|
+
Insert: {
|
|
260
|
+
id?: string;
|
|
261
|
+
role: Database["public"]["Enums"]["app_role"];
|
|
262
|
+
user_id: string;
|
|
263
|
+
};
|
|
264
|
+
Update: {
|
|
265
|
+
id?: string;
|
|
266
|
+
role?: Database["public"]["Enums"]["app_role"];
|
|
267
|
+
user_id?: string;
|
|
268
|
+
};
|
|
269
|
+
Relationships: [];
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
Views: { [_ in never]: never; };
|
|
273
|
+
Functions: {
|
|
274
|
+
can_view_profile: {
|
|
275
|
+
Args: {
|
|
276
|
+
_profile_id: string;
|
|
277
|
+
_viewer_id: string;
|
|
278
|
+
};
|
|
279
|
+
Returns: boolean;
|
|
280
|
+
};
|
|
281
|
+
has_role: {
|
|
282
|
+
Args: {
|
|
283
|
+
_role: Database["public"]["Enums"]["app_role"];
|
|
284
|
+
_user_id: string;
|
|
285
|
+
};
|
|
286
|
+
Returns: boolean;
|
|
287
|
+
};
|
|
288
|
+
is_conversation_member: {
|
|
289
|
+
Args: {
|
|
290
|
+
_conversation_id: string;
|
|
291
|
+
_user_id: string;
|
|
292
|
+
};
|
|
293
|
+
Returns: boolean;
|
|
294
|
+
};
|
|
295
|
+
is_conversation_owner_or_admin: {
|
|
296
|
+
Args: {
|
|
297
|
+
_conversation_id: string;
|
|
298
|
+
_user_id: string;
|
|
299
|
+
};
|
|
300
|
+
Returns: boolean;
|
|
301
|
+
};
|
|
302
|
+
};
|
|
303
|
+
Enums: {
|
|
304
|
+
app_role: "admin" | "moderator" | "user";
|
|
305
|
+
conversation_type: "private" | "group";
|
|
306
|
+
member_role: "owner" | "admin" | "member";
|
|
307
|
+
message_type: "text" | "photo" | "video" | "file" | "voice";
|
|
308
|
+
};
|
|
309
|
+
CompositeTypes: { [_ in never]: never; };
|
|
310
|
+
}, {
|
|
311
|
+
PostgrestVersion: "14.1";
|
|
312
|
+
}>;
|
|
313
|
+
export declare const useConfig: () => QuickChatConfig;
|
|
314
|
+
interface QuickChatProviderProps {
|
|
315
|
+
supabaseUrl: string;
|
|
316
|
+
supabaseAnonKey: string;
|
|
317
|
+
config: QuickChatConfig;
|
|
318
|
+
/** Optional: pass your app's existing QueryClient to share cache with the library. */
|
|
319
|
+
queryClient?: QueryClient;
|
|
320
|
+
children: React.ReactNode;
|
|
321
|
+
}
|
|
322
|
+
export declare const QuickChatProvider: ({ supabaseUrl, supabaseAnonKey, config, queryClient: queryClientProp, children }: QuickChatProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
323
|
+
export {};
|
|
324
|
+
//# sourceMappingURL=QuickChatProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickChatProvider.d.ts","sourceRoot":"","sources":["../../src/lib/QuickChatProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { UserAvatarProps } from './types';
|
|
2
|
+
export declare const UserAvatar: ({ supabaseUrl, supabaseAnonKey, userData, authMode, showName, size, floating, position, nameMaxLength, onThemeChange, onProfileClick, onLogout, onLogin, className, style, }: UserAvatarProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
//# sourceMappingURL=UserAvatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserAvatar.d.ts","sourceRoot":"","sources":["../../src/lib/UserAvatar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqE/C,eAAO,MAAM,UAAU,GAAI,8KAgBxB,eAAe,4CAyOjB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { QuickChat } from './QuickChat';
|
|
2
|
+
export { ChatButton } from './ChatButton';
|
|
3
|
+
export { UserAvatar } from './UserAvatar';
|
|
4
|
+
export type { QuickChatProps, ChatButtonProps, UserAvatarProps, UserData, QuickChatConfig } from './types';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized query key factory for TanStack Query.
|
|
3
|
+
* All keys are prefixed with "qc:" to avoid collisions when the library
|
|
4
|
+
* is used inside a consumer app that also uses TanStack Query.
|
|
5
|
+
*/
|
|
6
|
+
export declare const qk: {
|
|
7
|
+
conversations: (userId?: string) => readonly ["qc:conversations", string];
|
|
8
|
+
messages: (convId: string | null) => readonly ["qc:messages", string];
|
|
9
|
+
unreadIds: (convId: string | null, userId?: string) => readonly ["qc:unread-ids", string, string];
|
|
10
|
+
contacts: (userId?: string) => readonly ["qc:contacts", string];
|
|
11
|
+
searchUsers: (query: string) => readonly ["qc:searchUsers", string];
|
|
12
|
+
profile: (userId?: string) => readonly ["qc:profile", string];
|
|
13
|
+
reactions: (convId: string | null) => readonly ["qc:reactions", string];
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=queryKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryKeys.d.ts","sourceRoot":"","sources":["../../src/lib/queryKeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,EAAE;6BACY,MAAM;uBACZ,MAAM,GAAG,IAAI;wBACZ,MAAM,GAAG,IAAI,WAAW,MAAM;wBAC9B,MAAM;yBACL,MAAM;uBACR,MAAM;wBACL,MAAM,GAAG,IAAI;CAClC,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
export interface UserData {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
avatar?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
email?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Supabase JWT access token for this user.
|
|
10
|
+
* Required when authMode is 'external' — without it auth.uid() is NULL and all DB/storage operations fail.
|
|
11
|
+
*
|
|
12
|
+
* Same Supabase project: pass session.access_token directly from supabase.auth.getSession().
|
|
13
|
+
* Separate Supabase project: generate via supabase.auth.admin.createSession(userId) on your backend.
|
|
14
|
+
*/
|
|
15
|
+
accessToken?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Supabase refresh token for this user.
|
|
18
|
+
* Required alongside accessToken — omitting it disables automatic token refresh,
|
|
19
|
+
* causing the session to silently expire after 1 hour.
|
|
20
|
+
*
|
|
21
|
+
* Same Supabase project: pass session.refresh_token from supabase.auth.getSession().
|
|
22
|
+
* Separate Supabase project: use the refresh_token returned by supabase.auth.admin.createSession().
|
|
23
|
+
*/
|
|
24
|
+
refreshToken?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface QuickChatConfig {
|
|
27
|
+
showGroups: boolean;
|
|
28
|
+
allowVoiceMessages: boolean;
|
|
29
|
+
allowFileUpload: boolean;
|
|
30
|
+
allowReactions: boolean;
|
|
31
|
+
showOnlineStatus: boolean;
|
|
32
|
+
showReadReceipts: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface QuickChatProps {
|
|
35
|
+
/** Supabase project URL */
|
|
36
|
+
supabaseUrl: string;
|
|
37
|
+
/** Supabase anon/publishable key */
|
|
38
|
+
supabaseAnonKey: string;
|
|
39
|
+
/** User data (required when authMode is 'external') */
|
|
40
|
+
userData?: UserData;
|
|
41
|
+
/** UI color theme */
|
|
42
|
+
theme?: "light" | "dark" | "system";
|
|
43
|
+
/** Use built-in Supabase auth or pass your own user data */
|
|
44
|
+
authMode?: "built-in" | "external";
|
|
45
|
+
/** Show group conversations in sidebar */
|
|
46
|
+
showGroups?: boolean;
|
|
47
|
+
/** Enable voice message recording */
|
|
48
|
+
allowVoiceMessages?: boolean;
|
|
49
|
+
/** Enable file and photo uploads */
|
|
50
|
+
allowFileUpload?: boolean;
|
|
51
|
+
/** Enable emoji reactions on messages */
|
|
52
|
+
allowReactions?: boolean;
|
|
53
|
+
/** Show green online indicator dots */
|
|
54
|
+
showOnlineStatus?: boolean;
|
|
55
|
+
/** Show read receipt checkmarks */
|
|
56
|
+
showReadReceipts?: boolean;
|
|
57
|
+
/** Container height CSS value */
|
|
58
|
+
height?: string;
|
|
59
|
+
/** Container width CSS value */
|
|
60
|
+
width?: string;
|
|
61
|
+
/** Callback fired when unread message count changes */
|
|
62
|
+
onUnreadCountChange?: (count: number) => void;
|
|
63
|
+
/** Callback fired when a conversation is selected */
|
|
64
|
+
onConversationSelect?: (id: string) => void;
|
|
65
|
+
}
|
|
66
|
+
export interface UserAvatarProps {
|
|
67
|
+
/** Supabase project URL */
|
|
68
|
+
supabaseUrl: string;
|
|
69
|
+
/** Supabase anon/publishable key */
|
|
70
|
+
supabaseAnonKey: string;
|
|
71
|
+
/** User data (required when authMode is 'external') */
|
|
72
|
+
userData?: UserData;
|
|
73
|
+
/** Use built-in Supabase auth or pass your own user data */
|
|
74
|
+
authMode?: "built-in" | "external";
|
|
75
|
+
/** Show display name next to avatar (default: false) */
|
|
76
|
+
showName?: boolean;
|
|
77
|
+
/** Avatar size variant (default: "md") */
|
|
78
|
+
size?: "sm" | "md" | "lg";
|
|
79
|
+
/** Render as a fixed floating element (default: false — inline) */
|
|
80
|
+
floating?: boolean;
|
|
81
|
+
/** Fixed position on screen (only used when floating=true, default: "top-right") */
|
|
82
|
+
position?: "top-right" | "top-left" | "bottom-right" | "bottom-left";
|
|
83
|
+
/** Max characters for name display before truncation (default: 20) */
|
|
84
|
+
nameMaxLength?: number;
|
|
85
|
+
/** Callback fired when theme changes */
|
|
86
|
+
onThemeChange?: (theme: "light" | "dark" | "system") => void;
|
|
87
|
+
/** Override default profile dialog with custom handler */
|
|
88
|
+
onProfileClick?: () => void;
|
|
89
|
+
/** Callback fired after sign out completes */
|
|
90
|
+
onLogout?: () => void;
|
|
91
|
+
/** Called when user clicks "Sign in" (built-in mode, not logged in) */
|
|
92
|
+
onLogin?: () => void;
|
|
93
|
+
/** Additional CSS class names */
|
|
94
|
+
className?: string;
|
|
95
|
+
/** Inline styles applied to the trigger element */
|
|
96
|
+
style?: CSSProperties;
|
|
97
|
+
}
|
|
98
|
+
export interface ChatButtonProps {
|
|
99
|
+
/** Supabase project URL */
|
|
100
|
+
supabaseUrl: string;
|
|
101
|
+
/** Supabase anon/publishable key */
|
|
102
|
+
supabaseAnonKey: string;
|
|
103
|
+
/** User data for fetching unread count */
|
|
104
|
+
userData?: UserData;
|
|
105
|
+
/** Custom click handler */
|
|
106
|
+
onClick?: () => void;
|
|
107
|
+
/** URL to navigate to on click */
|
|
108
|
+
href?: string;
|
|
109
|
+
/** Fixed position on screen (only used when floating=true) */
|
|
110
|
+
position?: "bottom-right" | "bottom-left";
|
|
111
|
+
/** Render as a fixed floating button (default: true). Set false to use inline inside a layout. */
|
|
112
|
+
floating?: boolean;
|
|
113
|
+
/** Manually override unread count badge */
|
|
114
|
+
unreadCount?: number;
|
|
115
|
+
/** Button size variant */
|
|
116
|
+
size?: "sm" | "md" | "lg";
|
|
117
|
+
/** Badge background color (CSS color value) */
|
|
118
|
+
badgeColor?: string;
|
|
119
|
+
/** Custom icon element */
|
|
120
|
+
icon?: ReactNode;
|
|
121
|
+
/** Additional CSS class names appended to the button element */
|
|
122
|
+
className?: string;
|
|
123
|
+
/** Inline styles applied to the button element */
|
|
124
|
+
style?: CSSProperties;
|
|
125
|
+
/** Button background color — overrides the default primary color (CSS color value) */
|
|
126
|
+
buttonColor?: string;
|
|
127
|
+
/** Icon / foreground color — overrides the default primary-foreground color (CSS color value) */
|
|
128
|
+
iconColor?: string;
|
|
129
|
+
/** Accessible label for the button (default: "Open chat") */
|
|
130
|
+
label?: string;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1200" fill="none"><rect width="1200" height="1200" fill="#EAEAEA" rx="3"/><g opacity=".5"><g opacity=".5"><path fill="#FAFAFA" d="M600.709 736.5c-75.454 0-136.621-61.167-136.621-136.62 0-75.454 61.167-136.621 136.621-136.621 75.453 0 136.62 61.167 136.62 136.621 0 75.453-61.167 136.62-136.62 136.62Z"/><path stroke="#C9C9C9" stroke-width="2.418" d="M600.709 736.5c-75.454 0-136.621-61.167-136.621-136.62 0-75.454 61.167-136.621 136.621-136.621 75.453 0 136.62 61.167 136.62 136.621 0 75.453-61.167 136.62-136.62 136.62Z"/></g><path stroke="url(#a)" stroke-width="2.418" d="M0-1.209h553.581" transform="scale(1 -1) rotate(45 1163.11 91.165)"/><path stroke="url(#b)" stroke-width="2.418" d="M404.846 598.671h391.726"/><path stroke="url(#c)" stroke-width="2.418" d="M599.5 795.742V404.017"/><path stroke="url(#d)" stroke-width="2.418" d="m795.717 796.597-391.441-391.44"/><path fill="#fff" d="M600.709 656.704c-31.384 0-56.825-25.441-56.825-56.824 0-31.384 25.441-56.825 56.825-56.825 31.383 0 56.824 25.441 56.824 56.825 0 31.383-25.441 56.824-56.824 56.824Z"/><g clip-path="url(#e)"><path fill="#666" fill-rule="evenodd" d="M616.426 586.58h-31.434v16.176l3.553-3.554.531-.531h9.068l.074-.074 8.463-8.463h2.565l7.18 7.181V586.58Zm-15.715 14.654 3.698 3.699 1.283 1.282-2.565 2.565-1.282-1.283-5.2-5.199h-6.066l-5.514 5.514-.073.073v2.876a2.418 2.418 0 0 0 2.418 2.418h26.598a2.418 2.418 0 0 0 2.418-2.418v-8.317l-8.463-8.463-7.181 7.181-.071.072Zm-19.347 5.442v4.085a6.045 6.045 0 0 0 6.046 6.045h26.598a6.044 6.044 0 0 0 6.045-6.045v-7.108l1.356-1.355-1.282-1.283-.074-.073v-17.989h-38.689v23.43l-.146.146.146.147Z" clip-rule="evenodd"/></g><path stroke="#C9C9C9" stroke-width="2.418" d="M600.709 656.704c-31.384 0-56.825-25.441-56.825-56.824 0-31.384 25.441-56.825 56.825-56.825 31.383 0 56.824 25.441 56.824 56.825 0 31.383-25.441 56.824-56.824 56.824Z"/></g><defs><linearGradient id="a" x1="554.061" x2="-.48" y1=".083" y2=".087" gradientUnits="userSpaceOnUse"><stop stop-color="#C9C9C9" stop-opacity="0"/><stop offset=".208" stop-color="#C9C9C9"/><stop offset=".792" stop-color="#C9C9C9"/><stop offset="1" stop-color="#C9C9C9" stop-opacity="0"/></linearGradient><linearGradient id="b" x1="796.912" x2="404.507" y1="599.963" y2="599.965" gradientUnits="userSpaceOnUse"><stop stop-color="#C9C9C9" stop-opacity="0"/><stop offset=".208" stop-color="#C9C9C9"/><stop offset=".792" stop-color="#C9C9C9"/><stop offset="1" stop-color="#C9C9C9" stop-opacity="0"/></linearGradient><linearGradient id="c" x1="600.792" x2="600.794" y1="403.677" y2="796.082" gradientUnits="userSpaceOnUse"><stop stop-color="#C9C9C9" stop-opacity="0"/><stop offset=".208" stop-color="#C9C9C9"/><stop offset=".792" stop-color="#C9C9C9"/><stop offset="1" stop-color="#C9C9C9" stop-opacity="0"/></linearGradient><linearGradient id="d" x1="404.85" x2="796.972" y1="403.903" y2="796.02" gradientUnits="userSpaceOnUse"><stop stop-color="#C9C9C9" stop-opacity="0"/><stop offset=".208" stop-color="#C9C9C9"/><stop offset=".792" stop-color="#C9C9C9"/><stop offset="1" stop-color="#C9C9C9" stop-opacity="0"/></linearGradient><clipPath id="e"><path fill="#fff" d="M581.364 580.535h38.689v38.689h-38.689z"/></clipPath></defs></svg>
|