organify-ui 0.2.0 → 0.2.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.
- package/dist/chat-mock-data-DST5Tn_H.d.ts +339 -0
- package/dist/chunk-2Y3W6JSG.js +4143 -0
- package/dist/chunk-2Y3W6JSG.js.map +1 -0
- package/dist/{chunk-7GFTSEVQ.js → chunk-5L6BWKVA.js} +2 -3
- package/dist/chunk-5L6BWKVA.js.map +1 -0
- package/dist/{chunk-YIVDY4T6.js → chunk-AHMA7OV3.js} +69 -4
- package/dist/chunk-AHMA7OV3.js.map +1 -0
- package/dist/chunk-B3N3YGMA.js +456 -0
- package/dist/chunk-B3N3YGMA.js.map +1 -0
- package/dist/chunk-DW4ZGEBH.js +930 -0
- package/dist/chunk-DW4ZGEBH.js.map +1 -0
- package/dist/{chunk-FWI3KZVO.js → chunk-FQA33MF4.js} +2 -4
- package/dist/chunk-FQA33MF4.js.map +1 -0
- package/dist/chunk-WONVWB5R.js +271 -0
- package/dist/chunk-WONVWB5R.js.map +1 -0
- package/dist/components/chat/index.d.ts +55 -0
- package/dist/components/chat/index.js +5 -0
- package/dist/components/chat/index.js.map +1 -0
- package/dist/components/notifications/index.d.ts +204 -0
- package/dist/components/notifications/index.js +5 -0
- package/dist/components/notifications/index.js.map +1 -0
- package/dist/i18n/index.js +1 -1
- package/dist/icons/index.d.ts +10 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.d.ts +1018 -38
- package/dist/index.js +7858 -892
- package/dist/index.js.map +1 -1
- package/dist/providers/theme-provider.js +1 -1
- package/dist/tailwind-preset.d.ts +1 -2
- package/dist/tailwind-preset.js +102 -16
- package/dist/tailwind-preset.js.map +1 -1
- package/dist/tokens/index.d.ts +131 -69
- package/dist/tokens/index.js +1 -1
- package/package.json +25 -3
- package/src/globals.css +591 -257
- package/dist/chunk-7GFTSEVQ.js.map +0 -1
- package/dist/chunk-FWI3KZVO.js.map +0 -1
- package/dist/chunk-WPZJKIZT.js +0 -248
- package/dist/chunk-WPZJKIZT.js.map +0 -1
- package/dist/chunk-YIVDY4T6.js.map +0 -1
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type RoomType = 'CHANNEL' | 'DIRECT';
|
|
4
|
+
type RoomVisibility = 'WORKSPACE' | 'PRIVATE';
|
|
5
|
+
type MemberRole = 'OWNER' | 'ADMIN' | 'MEMBER';
|
|
6
|
+
interface ChatRoom {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string | null;
|
|
9
|
+
slug: string | null;
|
|
10
|
+
type: RoomType;
|
|
11
|
+
visibility: RoomVisibility;
|
|
12
|
+
description: string | null;
|
|
13
|
+
memberCount: number;
|
|
14
|
+
unreadCount: number;
|
|
15
|
+
avatarUrl: string | null;
|
|
16
|
+
createdBy: string | null;
|
|
17
|
+
archived: boolean;
|
|
18
|
+
lastMessageAt: string | null;
|
|
19
|
+
}
|
|
20
|
+
interface ChatRoomMember {
|
|
21
|
+
id: string;
|
|
22
|
+
userId: string;
|
|
23
|
+
/** Resolved from users service — not on chat service schema */
|
|
24
|
+
displayName?: string;
|
|
25
|
+
/** Resolved from users service — not on chat service schema */
|
|
26
|
+
avatarUrl?: string | null;
|
|
27
|
+
role: MemberRole;
|
|
28
|
+
muted?: boolean;
|
|
29
|
+
pinned?: boolean;
|
|
30
|
+
joinedAt: string;
|
|
31
|
+
}
|
|
32
|
+
interface ChatMention {
|
|
33
|
+
type: string;
|
|
34
|
+
targetId: string;
|
|
35
|
+
display: string | null;
|
|
36
|
+
}
|
|
37
|
+
interface ChatReaction {
|
|
38
|
+
emoji: string;
|
|
39
|
+
userId: string;
|
|
40
|
+
}
|
|
41
|
+
interface ChatMessage {
|
|
42
|
+
id: string;
|
|
43
|
+
roomId: string;
|
|
44
|
+
authorId: string;
|
|
45
|
+
authorName?: string;
|
|
46
|
+
authorAvatarUrl?: string;
|
|
47
|
+
content: string;
|
|
48
|
+
edited: boolean;
|
|
49
|
+
editedAt: string | null;
|
|
50
|
+
createdAt: string;
|
|
51
|
+
mentions: ChatMention[];
|
|
52
|
+
reactions: ChatReaction[];
|
|
53
|
+
/** ID of parent message (thread / reply) — backend field name */
|
|
54
|
+
parentId?: string | null;
|
|
55
|
+
/** ID of the message being replied to (alias for parentId in UI) */
|
|
56
|
+
replyToId?: string | null;
|
|
57
|
+
/** Used for optimistic UI — pending messages have 'pending' status */
|
|
58
|
+
_status?: 'pending' | 'sent' | 'error';
|
|
59
|
+
}
|
|
60
|
+
interface ChatUser {
|
|
61
|
+
id: string;
|
|
62
|
+
displayName: string;
|
|
63
|
+
email?: string;
|
|
64
|
+
avatarUrl: string | null;
|
|
65
|
+
status?: 'ONLINE' | 'AWAY' | 'BUSY' | 'OFFLINE';
|
|
66
|
+
}
|
|
67
|
+
interface ChatConfig {
|
|
68
|
+
/** @deprecated Use OrganifyProvider api.gatewayUrl instead */
|
|
69
|
+
gatewayUrl?: string;
|
|
70
|
+
/** @deprecated Use OrganifyProvider workspace.id instead */
|
|
71
|
+
workspaceId?: string;
|
|
72
|
+
/** @deprecated Use OrganifyProvider user.id instead */
|
|
73
|
+
userId?: string;
|
|
74
|
+
/** @deprecated Use OrganifyProvider api.authToken instead */
|
|
75
|
+
authToken?: string;
|
|
76
|
+
}
|
|
77
|
+
interface ChatPermissions {
|
|
78
|
+
canCreateChannel: boolean;
|
|
79
|
+
canCreateDM: boolean;
|
|
80
|
+
canDeleteRoom: boolean;
|
|
81
|
+
canArchiveRoom: boolean;
|
|
82
|
+
canManageMembers: boolean;
|
|
83
|
+
canEditRoomSettings: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** Derive permissions from user's role within a room */
|
|
86
|
+
declare function getRoomPermissions(role: MemberRole | null, isWorkspaceAdmin?: boolean): ChatPermissions;
|
|
87
|
+
interface OrganifyChatProps extends ChatConfig {
|
|
88
|
+
/** Current user role in workspace (for RBAC) */
|
|
89
|
+
workspaceRole?: 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST';
|
|
90
|
+
/** All workspace members for DM user picker */
|
|
91
|
+
workspaceMembers?: ChatUser[];
|
|
92
|
+
/** Initial rooms for demo/testing (bypasses API fetch) */
|
|
93
|
+
initialRooms?: ChatRoom[];
|
|
94
|
+
/** Initial messages for demo/testing (bypasses API fetch) */
|
|
95
|
+
initialMessages?: ChatMessage[];
|
|
96
|
+
/** Optional CSS class name */
|
|
97
|
+
className?: string;
|
|
98
|
+
}
|
|
99
|
+
interface ChatEvents {
|
|
100
|
+
join_room: {
|
|
101
|
+
roomId: string;
|
|
102
|
+
};
|
|
103
|
+
leave_room: {
|
|
104
|
+
roomId: string;
|
|
105
|
+
};
|
|
106
|
+
new_message: ChatMessage;
|
|
107
|
+
typing: {
|
|
108
|
+
roomId: string;
|
|
109
|
+
userId: string;
|
|
110
|
+
};
|
|
111
|
+
stop_typing: {
|
|
112
|
+
roomId: string;
|
|
113
|
+
userId: string;
|
|
114
|
+
};
|
|
115
|
+
room_updated: ChatRoom;
|
|
116
|
+
member_joined: {
|
|
117
|
+
roomId: string;
|
|
118
|
+
userId: string;
|
|
119
|
+
};
|
|
120
|
+
member_left: {
|
|
121
|
+
roomId: string;
|
|
122
|
+
userId: string;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
declare function OrganifyChat({ workspaceRole, workspaceMembers, initialRooms, initialMessages, className, }: OrganifyChatProps): react_jsx_runtime.JSX.Element;
|
|
127
|
+
|
|
128
|
+
interface ChatSidebarProps {
|
|
129
|
+
rooms: ChatRoom[];
|
|
130
|
+
activeRoomId: string | null;
|
|
131
|
+
loading: boolean;
|
|
132
|
+
onSelectRoom: (roomId: string) => void;
|
|
133
|
+
onCreateRoom: () => void;
|
|
134
|
+
/** Mobile: trigger to close sidebar after selecting */
|
|
135
|
+
onMobileClose?: () => void;
|
|
136
|
+
}
|
|
137
|
+
declare function ChatSidebar({ rooms, activeRoomId, loading, onSelectRoom, onCreateRoom, onMobileClose, }: ChatSidebarProps): react_jsx_runtime.JSX.Element;
|
|
138
|
+
|
|
139
|
+
interface ChatMessagesProps {
|
|
140
|
+
room: ChatRoom | undefined;
|
|
141
|
+
messages: ChatMessage[];
|
|
142
|
+
loading: boolean;
|
|
143
|
+
typingUsers?: string[];
|
|
144
|
+
currentUserId: string;
|
|
145
|
+
permissions: ChatPermissions;
|
|
146
|
+
onSendMessage: (content: string, replyToId?: string) => void;
|
|
147
|
+
onEditMessage?: (messageId: string, content: string) => void;
|
|
148
|
+
onDeleteMessage?: (messageId: string) => void;
|
|
149
|
+
onReactToMessage?: (messageId: string, emoji: string) => void;
|
|
150
|
+
onTyping?: () => void;
|
|
151
|
+
onStopTyping?: () => void;
|
|
152
|
+
/** Abrir painel de gestão da room */
|
|
153
|
+
onOpenManagement?: () => void;
|
|
154
|
+
/** Mobile: voltar para sidebar */
|
|
155
|
+
onBack?: () => void;
|
|
156
|
+
/** Se está em mobile */
|
|
157
|
+
isMobile: boolean;
|
|
158
|
+
/** Usuários disponíveis para menções */
|
|
159
|
+
mentionUsers?: ChatUser[];
|
|
160
|
+
/** Projetos disponíveis para menções */
|
|
161
|
+
mentionProjects?: Array<{
|
|
162
|
+
id: string;
|
|
163
|
+
name: string;
|
|
164
|
+
key?: string;
|
|
165
|
+
}>;
|
|
166
|
+
/** Whether there are more (older) messages to load */
|
|
167
|
+
hasMore?: boolean;
|
|
168
|
+
/** Callback to load older messages (pagination) */
|
|
169
|
+
onLoadMore?: () => void;
|
|
170
|
+
/** Whether older messages are currently being loaded */
|
|
171
|
+
loadingMore?: boolean;
|
|
172
|
+
}
|
|
173
|
+
declare function ChatMessages({ room, messages, loading, typingUsers, currentUserId, permissions, onSendMessage, onEditMessage, onDeleteMessage, onReactToMessage, onTyping, onStopTyping, onOpenManagement, onBack, isMobile, mentionUsers, mentionProjects, hasMore, onLoadMore, loadingMore, }: ChatMessagesProps): react_jsx_runtime.JSX.Element;
|
|
174
|
+
declare namespace ChatMessages {
|
|
175
|
+
var displayName: string;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
interface CreateRoomDialogProps {
|
|
179
|
+
open: boolean;
|
|
180
|
+
onOpenChange: (open: boolean) => void;
|
|
181
|
+
onCreateChannel: (data: {
|
|
182
|
+
name: string;
|
|
183
|
+
description?: string;
|
|
184
|
+
visibility: RoomVisibility;
|
|
185
|
+
memberIds: string[];
|
|
186
|
+
}) => Promise<any>;
|
|
187
|
+
onCreateDM: (targetUserId: string) => Promise<any>;
|
|
188
|
+
workspaceMembers: ChatUser[];
|
|
189
|
+
loadingMembers?: boolean;
|
|
190
|
+
}
|
|
191
|
+
declare function CreateRoomDialog({ open, onOpenChange, onCreateChannel, onCreateDM, workspaceMembers, loadingMembers, }: CreateRoomDialogProps): react_jsx_runtime.JSX.Element;
|
|
192
|
+
|
|
193
|
+
interface RoomManagementPanelProps {
|
|
194
|
+
room: ChatRoom;
|
|
195
|
+
members: ChatRoomMember[];
|
|
196
|
+
permissions: ChatPermissions;
|
|
197
|
+
currentUserId: string;
|
|
198
|
+
loading?: boolean;
|
|
199
|
+
onClose: () => void;
|
|
200
|
+
onUpdateRoom: (roomId: string, updates: {
|
|
201
|
+
name?: string;
|
|
202
|
+
description?: string;
|
|
203
|
+
visibility?: RoomVisibility;
|
|
204
|
+
}) => Promise<void>;
|
|
205
|
+
onArchiveRoom: (roomId: string) => Promise<void>;
|
|
206
|
+
onLeaveRoom: (roomId: string) => Promise<void>;
|
|
207
|
+
onRemoveMember: (roomId: string, userId: string) => Promise<void>;
|
|
208
|
+
onUpdateMemberRole: (roomId: string, userId: string, role: MemberRole) => Promise<void>;
|
|
209
|
+
className?: string;
|
|
210
|
+
}
|
|
211
|
+
declare function RoomManagementPanel({ room, members, permissions, currentUserId, loading, onClose, onUpdateRoom, onArchiveRoom, onLeaveRoom, onRemoveMember, onUpdateMemberRole, className, }: RoomManagementPanelProps): react_jsx_runtime.JSX.Element;
|
|
212
|
+
|
|
213
|
+
interface UseChatOptions {
|
|
214
|
+
workspaceRole?: 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST';
|
|
215
|
+
/** Initial rooms for demo/testing (bypasses API fetch) */
|
|
216
|
+
initialRooms?: ChatRoom[];
|
|
217
|
+
/** Initial messages for demo/testing (bypasses API fetch) */
|
|
218
|
+
initialMessages?: ChatMessage[];
|
|
219
|
+
/** Workspace members for user name resolution */
|
|
220
|
+
workspaceMembers?: ChatUser[];
|
|
221
|
+
}
|
|
222
|
+
interface CreateRoomInput {
|
|
223
|
+
name: string;
|
|
224
|
+
type: RoomType;
|
|
225
|
+
visibility: RoomVisibility;
|
|
226
|
+
description?: string;
|
|
227
|
+
memberIds?: string[];
|
|
228
|
+
}
|
|
229
|
+
declare function useChat(options?: UseChatOptions): {
|
|
230
|
+
rooms: ChatRoom[];
|
|
231
|
+
messages: (ChatMessage | {
|
|
232
|
+
authorName: string;
|
|
233
|
+
authorAvatar: string | undefined;
|
|
234
|
+
id: string;
|
|
235
|
+
roomId: string;
|
|
236
|
+
authorId: string;
|
|
237
|
+
authorAvatarUrl?: string;
|
|
238
|
+
content: string;
|
|
239
|
+
edited: boolean;
|
|
240
|
+
editedAt: string | null;
|
|
241
|
+
createdAt: string;
|
|
242
|
+
mentions: ChatMention[];
|
|
243
|
+
reactions: ChatReaction[];
|
|
244
|
+
parentId?: string | null;
|
|
245
|
+
replyToId?: string | null;
|
|
246
|
+
_status?: "pending" | "sent" | "error";
|
|
247
|
+
})[];
|
|
248
|
+
activeRoomId: string | null;
|
|
249
|
+
loadingRooms: boolean;
|
|
250
|
+
loadingMessages: boolean;
|
|
251
|
+
hasMoreMessages: boolean;
|
|
252
|
+
loadingMoreMessages: boolean;
|
|
253
|
+
roomMembers: ChatRoomMember[];
|
|
254
|
+
myRoomRole: MemberRole | null;
|
|
255
|
+
permissions: ChatPermissions;
|
|
256
|
+
typingUsers: string[];
|
|
257
|
+
error: string | null;
|
|
258
|
+
selectRoom: (roomId: string) => void;
|
|
259
|
+
sendMessage: (content: string, replyToId?: string) => Promise<void>;
|
|
260
|
+
editMessage: (messageId: string, content: string) => Promise<void>;
|
|
261
|
+
deleteMessage: (messageId: string) => Promise<void>;
|
|
262
|
+
reactToMessage: (messageId: string, emoji: string) => Promise<void>;
|
|
263
|
+
sendTyping: () => void;
|
|
264
|
+
loadMoreMessages: () => Promise<void>;
|
|
265
|
+
createRoom: (input: CreateRoomInput) => Promise<ChatRoom | null>;
|
|
266
|
+
createDirectMessage: (targetUserId: string) => Promise<ChatRoom | null>;
|
|
267
|
+
updateRoom: (roomId: string, updates: {
|
|
268
|
+
name?: string;
|
|
269
|
+
description?: string;
|
|
270
|
+
visibility?: RoomVisibility;
|
|
271
|
+
}) => Promise<void>;
|
|
272
|
+
archiveRoom: (roomId: string) => Promise<void>;
|
|
273
|
+
leaveRoom: (roomId: string) => Promise<void>;
|
|
274
|
+
addMember: (roomId: string, targetUserId: string, _role?: MemberRole) => Promise<void>;
|
|
275
|
+
removeMember: (roomId: string, targetUserId: string) => Promise<void>;
|
|
276
|
+
updateMemberRole: (roomId: string, targetUserId: string, role: MemberRole) => Promise<void>;
|
|
277
|
+
fetchRooms: () => Promise<void>;
|
|
278
|
+
fetchRoomMembers: (roomId: string) => Promise<void>;
|
|
279
|
+
userCache: Map<string, {
|
|
280
|
+
displayName: string;
|
|
281
|
+
avatarUrl?: string;
|
|
282
|
+
}>;
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
type MentionType = 'user' | 'project' | 'task';
|
|
286
|
+
interface MentionOption {
|
|
287
|
+
id: string;
|
|
288
|
+
type: MentionType;
|
|
289
|
+
display: string;
|
|
290
|
+
avatarUrl?: string | null;
|
|
291
|
+
/** Secondary info (email, project key, etc.) */
|
|
292
|
+
subtitle?: string;
|
|
293
|
+
}
|
|
294
|
+
interface MentionPopoverProps {
|
|
295
|
+
open: boolean;
|
|
296
|
+
query: string;
|
|
297
|
+
options: MentionOption[];
|
|
298
|
+
loading?: boolean;
|
|
299
|
+
onSelect: (option: MentionOption) => void;
|
|
300
|
+
onClose: () => void;
|
|
301
|
+
/** Position from input caret */
|
|
302
|
+
position?: {
|
|
303
|
+
top: number;
|
|
304
|
+
left: number;
|
|
305
|
+
};
|
|
306
|
+
selectedIndex?: number;
|
|
307
|
+
}
|
|
308
|
+
declare function MentionPopover({ open, query, options, loading, onSelect, onClose, position, selectedIndex, }: MentionPopoverProps): react_jsx_runtime.JSX.Element | null;
|
|
309
|
+
declare namespace MentionPopover {
|
|
310
|
+
var displayName: string;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
declare const MOCK_USERS: ChatUser[];
|
|
314
|
+
declare const MOCK_PROJECTS: {
|
|
315
|
+
id: string;
|
|
316
|
+
name: string;
|
|
317
|
+
key: string;
|
|
318
|
+
}[];
|
|
319
|
+
declare function getMockMentionOptions(query: string): MentionOption[];
|
|
320
|
+
declare function generateAutoReplies(userMessage: ChatMessage, roomId: string, count?: number): ChatMessage[];
|
|
321
|
+
declare class TypingIndicatorMock {
|
|
322
|
+
private typingUsers;
|
|
323
|
+
private timeouts;
|
|
324
|
+
private listeners;
|
|
325
|
+
constructor();
|
|
326
|
+
/** Simula alguém começando a digitar */
|
|
327
|
+
startTyping(userId?: string): void;
|
|
328
|
+
/** Para de digitar */
|
|
329
|
+
stopTyping(userId: string): void;
|
|
330
|
+
/** Subscribe to typing changes */
|
|
331
|
+
subscribe(callback: (users: string[]) => void): () => void;
|
|
332
|
+
private notify;
|
|
333
|
+
/** Simula typing indicator aleatório */
|
|
334
|
+
simulateRandomTyping(): void;
|
|
335
|
+
clear(): void;
|
|
336
|
+
}
|
|
337
|
+
declare const typingIndicator: TypingIndicatorMock;
|
|
338
|
+
|
|
339
|
+
export { type ChatMessage as C, type MentionOption as M, OrganifyChat as O, RoomManagementPanel as R, TypingIndicatorMock as T, type MentionType as a, type ChatConfig as b, type ChatEvents as c, type ChatMention as d, ChatMessages as e, type ChatPermissions as f, type ChatReaction as g, type ChatRoom as h, type ChatRoomMember as i, ChatSidebar as j, type ChatUser as k, CreateRoomDialog as l, MOCK_PROJECTS as m, MOCK_USERS as n, type MemberRole as o, MentionPopover as p, type MentionPopoverProps as q, type OrganifyChatProps as r, type RoomType as s, type RoomVisibility as t, generateAutoReplies as u, getMockMentionOptions as v, getRoomPermissions as w, typingIndicator as x, useChat as y };
|