@webinex/chatify 2.0.1-alpha1 → 2.0.2-alpha2
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/css/chatify.css +111 -12
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/core/api/api.d.ts +10784 -232
- package/dist/esm/types/core/api/baseApi.d.ts +1 -1
- package/dist/esm/types/ui/Conversation/Conversation.d.ts +2 -0
- package/dist/esm/types/ui/Conversation/ConversationContext.d.ts +2 -0
- package/dist/esm/types/ui/Conversation/InputBox/InputBoxFile.d.ts +8 -0
- package/dist/esm/types/ui/Conversation/InputBox/InputBoxFileList.d.ts +8 -0
- package/dist/esm/types/ui/Conversation/InputBox/InputFilesBox.d.ts +11 -1
- package/dist/esm/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +2 -0
- package/dist/esm/types/ui/Conversation/InputBox/InputTextBox.d.ts +1 -0
- package/dist/esm/types/ui/Conversation/InputBox/index.d.ts +8 -1
- package/dist/esm/types/ui/Conversation/Message/MessageFile.d.ts +6 -0
- package/dist/esm/types/ui/Conversation/Message/MessageFileList.d.ts +3 -0
- package/dist/esm/types/ui/Conversation/Message/index.d.ts +6 -0
- package/dist/esm/types/ui/common/Icon.d.ts +2 -0
- package/dist/esm/types/ui/customize.d.ts +2 -2
- package/dist/esm/types/ui/localizer.d.ts +5 -0
- package/dist/esm/types/ui/useFormatter.d.ts +3 -0
- package/dist/index.d.ts +10835 -239
- package/package.json +94 -93
- package/src/core/api/api.ts +643 -642
- package/src/core/api/baseApi.ts +38 -38
- package/src/core/api/index.ts +1 -1
- package/src/core/client.ts +280 -280
- package/src/core/constants.ts +1 -1
- package/src/core/debounce.ts +90 -90
- package/src/core/index.ts +4 -4
- package/src/core/types.tsx +152 -152
- package/src/index.ts +2 -2
- package/src/styles/aside.scss +162 -161
- package/src/styles/chat.scss +209 -208
- package/src/styles/index.scss +153 -110
- package/src/styles/input.scss +147 -74
- package/src/styles/keyframes.scss +14 -14
- package/src/styles/members.scss +13 -13
- package/src/styles/mixins.scss +25 -20
- package/src/styles/variables.scss +13 -10
- package/src/ui/Chat/ChatContext.tsx +30 -30
- package/src/ui/Chat/ChatEditableHeaderName.tsx +63 -63
- package/src/ui/Chat/ChatHeaderActions.tsx +19 -19
- package/src/ui/Chat/ChatPanel.tsx +30 -30
- package/src/ui/Chat/ChatView.tsx +115 -115
- package/src/ui/Chat/Members/ChatMembersButton.tsx +9 -9
- package/src/ui/Chat/Members/ChatMembersPanel.tsx +112 -112
- package/src/ui/Chat/Members/ChatMembersPreview.tsx +25 -25
- package/src/ui/Chat/Members/index.ts +13 -13
- package/src/ui/Chat/index.ts +6 -6
- package/src/ui/ChatGroup/ChatGroupContext.tsx +50 -50
- package/src/ui/ChatGroup/ChatGroupPanel.tsx +73 -73
- package/src/ui/ChatGroup/Create/CreateChatButton.tsx +15 -15
- package/src/ui/ChatGroup/Create/CreateChatForm.tsx +36 -36
- package/src/ui/ChatGroup/Create/CreateChatMemberInput.tsx +65 -65
- package/src/ui/ChatGroup/Create/CreateChatNameInput.tsx +25 -25
- package/src/ui/ChatGroup/Create/CreateChatPanel.tsx +45 -45
- package/src/ui/ChatGroup/Create/index.ts +19 -19
- package/src/ui/ChatGroup/Layout/ChatGroupAside.tsx +12 -12
- package/src/ui/ChatGroup/Layout/ChatGroupBody.tsx +10 -10
- package/src/ui/ChatGroup/Layout/ChatGroupFooter.tsx +3 -3
- package/src/ui/ChatGroup/Layout/ChatGroupHeader.tsx +5 -5
- package/src/ui/ChatGroup/Layout/ChatGroupMain.tsx +17 -17
- package/src/ui/ChatGroup/Layout/index.ts +19 -19
- package/src/ui/ChatGroup/List/ChatList.tsx +41 -41
- package/src/ui/ChatGroup/List/ChatListItemAvatar.tsx +22 -22
- package/src/ui/ChatGroup/List/ChatListItemBox.tsx +26 -26
- package/src/ui/ChatGroup/List/ChatListItemLastMessage.tsx +15 -15
- package/src/ui/ChatGroup/List/ChatListItemLastMessageAuthor.tsx +15 -15
- package/src/ui/ChatGroup/List/ChatListItemLastMessageContent.tsx +21 -21
- package/src/ui/ChatGroup/List/ChatListItemLastMessageSentAt.tsx +22 -22
- package/src/ui/ChatGroup/List/ChatListItemName.tsx +8 -8
- package/src/ui/ChatGroup/List/ChatListItemUnreadCount.tsx +12 -12
- package/src/ui/ChatGroup/List/index.ts +31 -31
- package/src/ui/ChatGroup/index.ts +5 -5
- package/src/ui/Chatify.tsx +9 -9
- package/src/ui/Conversation/Conversation.tsx +78 -76
- package/src/ui/Conversation/ConversationActions.tsx +5 -5
- package/src/ui/Conversation/ConversationBody.tsx +28 -28
- package/src/ui/Conversation/ConversationContext.ts +29 -27
- package/src/ui/Conversation/ConversationHeader.tsx +23 -23
- package/src/ui/Conversation/ConversationName.tsx +7 -7
- package/src/ui/Conversation/InputBox/InputBox.tsx +113 -40
- package/src/ui/Conversation/InputBox/InputBoxFile.tsx +38 -0
- package/src/ui/Conversation/InputBox/InputBoxFileList.tsx +21 -0
- package/src/ui/Conversation/InputBox/InputFilesBox.tsx +78 -9
- package/src/ui/Conversation/InputBox/InputSubmitButtonBox.tsx +26 -17
- package/src/ui/Conversation/InputBox/InputTextBox.tsx +55 -53
- package/src/ui/Conversation/InputBox/index.ts +23 -16
- package/src/ui/Conversation/Message/MessageAuthor.tsx +13 -13
- package/src/ui/Conversation/Message/MessageBox.tsx +20 -20
- package/src/ui/Conversation/Message/MessageContent.tsx +15 -11
- package/src/ui/Conversation/Message/MessageFile.tsx +52 -0
- package/src/ui/Conversation/Message/MessageFileList.tsx +14 -0
- package/src/ui/Conversation/Message/MessageInfoBox.tsx +28 -28
- package/src/ui/Conversation/Message/MessageRow.tsx +28 -28
- package/src/ui/Conversation/Message/MessageText.tsx +7 -7
- package/src/ui/Conversation/Message/index.ts +28 -22
- package/src/ui/Conversation/NextObserver/NextMessagesObserver.tsx +47 -47
- package/src/ui/Conversation/NextObserver/index.ts +1 -1
- package/src/ui/Conversation/ReadObserver/MessageReadObserver.tsx +49 -49
- package/src/ui/Conversation/ReadObserver/index.ts +1 -1
- package/src/ui/Conversation/SendingMessage/SendingMessageBox.tsx +16 -16
- package/src/ui/Conversation/SendingMessage/SendingMessageContent.tsx +13 -13
- package/src/ui/Conversation/SendingMessage/SendingMessageInfoBox.tsx +13 -13
- package/src/ui/Conversation/SendingMessage/SendingMessageText.tsx +7 -7
- package/src/ui/Conversation/SendingMessage/index.ts +16 -16
- package/src/ui/Conversation/SystemMessage/SystemMessageBox.tsx +20 -20
- package/src/ui/Conversation/SystemMessage/SystemMessageRow.tsx +28 -28
- package/src/ui/Conversation/SystemMessage/index.ts +10 -10
- package/src/ui/Conversation/index.ts +13 -13
- package/src/ui/Thread/ThreadActions.tsx +22 -22
- package/src/ui/Thread/ThreadContext.ts +13 -13
- package/src/ui/Thread/ThreadPanel.tsx +127 -127
- package/src/ui/Thread/index.tsx +3 -3
- package/src/ui/color.ts +20 -20
- package/src/ui/common/Avatar.tsx +20 -20
- package/src/ui/common/Icon.tsx +44 -40
- package/src/ui/common/MessageSkeleton.tsx +20 -20
- package/src/ui/common/index.ts +13 -13
- package/src/ui/customize.tsx +51 -53
- package/src/ui/index.ts +11 -11
- package/src/ui/localizer.tsx +96 -81
- package/src/ui/useFormatter.tsx +17 -0
- package/dist/esm/types/core/api/accountApi.d.ts +0 -5
- package/dist/esm/types/core/api/chatApi.d.ts +0 -16
- package/dist/esm/types/core/api/chatListApi.d.ts +0 -5
- package/dist/esm/types/core/api/chatMemberApi.d.ts +0 -6
- package/dist/esm/types/core/api/chatMessageApi.d.ts +0 -3
- package/dist/esm/types/core/api/threadApi.d.ts +0 -1
- package/dist/esm/types/core/api/threadMessageApi.d.ts +0 -6
- package/src/core/api/accountApi.ts +0 -11
- package/src/core/api/chatApi.ts +0 -87
- package/src/core/api/chatListApi.ts +0 -134
- package/src/core/api/chatMemberApi.ts +0 -20
- package/src/core/api/chatMessageApi.ts +0 -12
- package/src/core/api/threadApi.ts +0 -8
- package/src/core/api/threadMessageApi.ts +0 -20
- package/src/types/core/api/accountApi.d.ts +0 -5
- package/src/types/core/api/api.d.ts +0 -2380
- package/src/types/core/api/baseApi.d.ts +0 -15
- package/src/types/core/api/chatApi.d.ts +0 -16
- package/src/types/core/api/chatListApi.d.ts +0 -5
- package/src/types/core/api/chatMemberApi.d.ts +0 -6
- package/src/types/core/api/chatMessageApi.d.ts +0 -3
- package/src/types/core/api/index.d.ts +0 -1
- package/src/types/core/api/threadApi.d.ts +0 -1
- package/src/types/core/api/threadMessageApi.d.ts +0 -6
- package/src/types/core/client.d.ts +0 -83
- package/src/types/core/constants.d.ts +0 -1
- package/src/types/core/debounce.d.ts +0 -27
- package/src/types/core/index.d.ts +0 -4
- package/src/types/core/types.d.ts +0 -105
- package/src/types/index.d.ts +0 -2
- package/src/types/ui/Chat/ChatContext.d.ts +0 -10
- package/src/types/ui/Chat/ChatEditableHeaderName.d.ts +0 -2
- package/src/types/ui/Chat/ChatHeaderActions.d.ts +0 -2
- package/src/types/ui/Chat/ChatPanel.d.ts +0 -13
- package/src/types/ui/Chat/ChatView.d.ts +0 -17
- package/src/types/ui/Chat/Members/ChatMembersButton.d.ts +0 -2
- package/src/types/ui/Chat/Members/ChatMembersPanel.d.ts +0 -2
- package/src/types/ui/Chat/Members/ChatMembersPreview.d.ts +0 -2
- package/src/types/ui/Chat/Members/index.d.ts +0 -11
- package/src/types/ui/Chat/index.d.ts +0 -6
- package/src/types/ui/ChatGroup/ChatGroupContext.d.ts +0 -12
- package/src/types/ui/ChatGroup/ChatGroupPanel.d.ts +0 -15
- package/src/types/ui/ChatGroup/Create/CreateChatButton.d.ts +0 -2
- package/src/types/ui/ChatGroup/Create/CreateChatForm.d.ts +0 -11
- package/src/types/ui/ChatGroup/Create/CreateChatMemberInput.d.ts +0 -5
- package/src/types/ui/ChatGroup/Create/CreateChatNameInput.d.ts +0 -5
- package/src/types/ui/ChatGroup/Create/CreateChatPanel.d.ts +0 -2
- package/src/types/ui/ChatGroup/Create/index.d.ts +0 -17
- package/src/types/ui/ChatGroup/Layout/ChatGroupAside.d.ts +0 -2
- package/src/types/ui/ChatGroup/Layout/ChatGroupBody.d.ts +0 -2
- package/src/types/ui/ChatGroup/Layout/ChatGroupFooter.d.ts +0 -2
- package/src/types/ui/ChatGroup/Layout/ChatGroupHeader.d.ts +0 -2
- package/src/types/ui/ChatGroup/Layout/ChatGroupMain.d.ts +0 -2
- package/src/types/ui/ChatGroup/Layout/index.d.ts +0 -17
- package/src/types/ui/ChatGroup/List/ChatList.d.ts +0 -2
- package/src/types/ui/ChatGroup/List/ChatListItemAvatar.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/ChatListItemBox.d.ts +0 -6
- package/src/types/ui/ChatGroup/List/ChatListItemLastMessage.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/ChatListItemLastMessageAuthor.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/ChatListItemLastMessageContent.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/ChatListItemLastMessageSentAt.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/ChatListItemName.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/ChatListItemUnreadCount.d.ts +0 -3
- package/src/types/ui/ChatGroup/List/index.d.ts +0 -29
- package/src/types/ui/ChatGroup/index.d.ts +0 -5
- package/src/types/ui/Chatify.d.ts +0 -8
- package/src/types/ui/Conversation/Conversation.d.ts +0 -21
- package/src/types/ui/Conversation/ConversationActions.d.ts +0 -2
- package/src/types/ui/Conversation/ConversationBody.d.ts +0 -2
- package/src/types/ui/Conversation/ConversationContext.d.ts +0 -20
- package/src/types/ui/Conversation/ConversationHeader.d.ts +0 -2
- package/src/types/ui/Conversation/ConversationName.d.ts +0 -2
- package/src/types/ui/Conversation/InputBox/InputBox.d.ts +0 -2
- package/src/types/ui/Conversation/InputBox/InputFilesBox.d.ts +0 -2
- package/src/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +0 -5
- package/src/types/ui/Conversation/InputBox/InputTextBox.d.ts +0 -8
- package/src/types/ui/Conversation/InputBox/index.d.ts +0 -14
- package/src/types/ui/Conversation/Message/MessageAuthor.d.ts +0 -3
- package/src/types/ui/Conversation/Message/MessageBox.d.ts +0 -6
- package/src/types/ui/Conversation/Message/MessageContent.d.ts +0 -3
- package/src/types/ui/Conversation/Message/MessageInfoBox.d.ts +0 -3
- package/src/types/ui/Conversation/Message/MessageRow.d.ts +0 -6
- package/src/types/ui/Conversation/Message/MessageText.d.ts +0 -3
- package/src/types/ui/Conversation/Message/index.d.ts +0 -20
- package/src/types/ui/Conversation/NextObserver/NextMessagesObserver.d.ts +0 -5
- package/src/types/ui/Conversation/NextObserver/index.d.ts +0 -1
- package/src/types/ui/Conversation/ReadObserver/MessageReadObserver.d.ts +0 -6
- package/src/types/ui/Conversation/ReadObserver/index.d.ts +0 -1
- package/src/types/ui/Conversation/SendingMessage/SendingMessageBox.d.ts +0 -7
- package/src/types/ui/Conversation/SendingMessage/SendingMessageContent.d.ts +0 -3
- package/src/types/ui/Conversation/SendingMessage/SendingMessageInfoBox.d.ts +0 -3
- package/src/types/ui/Conversation/SendingMessage/SendingMessageText.d.ts +0 -3
- package/src/types/ui/Conversation/SendingMessage/index.d.ts +0 -14
- package/src/types/ui/Conversation/SystemMessage/SystemMessageBox.d.ts +0 -6
- package/src/types/ui/Conversation/SystemMessage/SystemMessageRow.d.ts +0 -9
- package/src/types/ui/Conversation/SystemMessage/index.d.ts +0 -8
- package/src/types/ui/Conversation/index.d.ts +0 -12
- package/src/types/ui/Thread/ThreadActions.d.ts +0 -2
- package/src/types/ui/Thread/ThreadContext.d.ts +0 -8
- package/src/types/ui/Thread/ThreadPanel.d.ts +0 -14
- package/src/types/ui/Thread/index.d.ts +0 -3
- package/src/types/ui/color.d.ts +0 -6
- package/src/types/ui/common/Avatar.d.ts +0 -6
- package/src/types/ui/common/Icon.d.ts +0 -20
- package/src/types/ui/common/MessageSkeleton.d.ts +0 -5
- package/src/types/ui/common/index.d.ts +0 -11
- package/src/types/ui/customize.d.ts +0 -9
- package/src/types/ui/index.d.ts +0 -11
- package/src/types/ui/localizer.d.ts +0 -35
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { BaseQueryFn, EndpointBuilder } from '@reduxjs/toolkit/query/react';
|
|
2
|
-
import { ChatifyClient } from '../client';
|
|
3
|
-
import { Debounce } from '../debounce';
|
|
4
|
-
export declare const DEFAULT_MESSAGE_LIST_TAKE = 20;
|
|
5
|
-
export declare const CHAT_MESSAGE_READ_QUEUE: Debounce<string>;
|
|
6
|
-
export interface ChatifyApiSettings {
|
|
7
|
-
me: () => string;
|
|
8
|
-
client: ChatifyClient;
|
|
9
|
-
}
|
|
10
|
-
export declare const __settings: ChatifyApiSettings;
|
|
11
|
-
declare const TAG_TYPES: readonly ["chat", "account", "message", "thread", "thread-message"];
|
|
12
|
-
export interface BaseApiEndpointBuilder extends EndpointBuilder<BaseQueryFn, (typeof TAG_TYPES)[number], 'chatify'> {
|
|
13
|
-
}
|
|
14
|
-
export declare const __baseApi: import("@reduxjs/toolkit/query/react").Api<BaseQueryFn, {}, "chatify", "chat" | "account" | "message" | "thread" | "thread-message", typeof import("@reduxjs/toolkit/query/react").coreModuleName | typeof import("@reduxjs/toolkit/query/react").reactHooksModuleName>;
|
|
15
|
-
export {};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BaseApiEndpointBuilder } from './baseApi';
|
|
2
|
-
import { Chat } from '../types';
|
|
3
|
-
export declare function chatEndpoints(builder: BaseApiEndpointBuilder): {};
|
|
4
|
-
export declare const __chatApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn, {
|
|
5
|
-
getChat: import("@reduxjs/toolkit/query").QueryDefinition<{
|
|
6
|
-
id: string;
|
|
7
|
-
}, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", Chat, "chatify">;
|
|
8
|
-
addChat: import("@reduxjs/toolkit/query").MutationDefinition<{
|
|
9
|
-
name: string;
|
|
10
|
-
members: string[];
|
|
11
|
-
}, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", string, "chatify">;
|
|
12
|
-
updateChatName: import("@reduxjs/toolkit/query").MutationDefinition<{
|
|
13
|
-
id: string;
|
|
14
|
-
name: string;
|
|
15
|
-
}, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", void, "chatify">;
|
|
16
|
-
}, "chatify", "chat" | "account" | "message" | "thread" | "thread-message", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { BaseApiEndpointBuilder } from './baseApi';
|
|
2
|
-
import { ChatListItem } from '../types';
|
|
3
|
-
export declare function chatListEndpoints(builder: BaseApiEndpointBuilder): {
|
|
4
|
-
getChatList: import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", ChatListItem[], "chatify">;
|
|
5
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { AddChatMemberRequest, RemoveChatMemberRequest } from '../types';
|
|
2
|
-
import { BaseApiEndpointBuilder } from './baseApi';
|
|
3
|
-
export declare function chatMemberEndpoints(builder: BaseApiEndpointBuilder): {
|
|
4
|
-
removeChatMember: import("@reduxjs/toolkit/query").MutationDefinition<RemoveChatMemberRequest, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", void, "chatify">;
|
|
5
|
-
addChatMember: import("@reduxjs/toolkit/query").MutationDefinition<AddChatMemberRequest, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", void, "chatify">;
|
|
6
|
-
};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { BaseApiEndpointBuilder } from './baseApi';
|
|
2
|
-
export declare function chatMessageEndpoints(builder: BaseApiEndpointBuilder): {};
|
|
3
|
-
export declare const __chatMessageApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn, {}, "chatify", "chat" | "account" | "message" | "thread" | "thread-message", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './api';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const __threadApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn, {}, "chatify", "chat" | "account" | "message" | "thread" | "thread-message", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { ThreadMessage } from '../types';
|
|
2
|
-
export interface ThreadMessageList {
|
|
3
|
-
messages: ThreadMessage[];
|
|
4
|
-
hasMore: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare const __threadMessageApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn, {}, "chatify", "chat" | "account" | "message" | "thread" | "thread-message", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
2
|
-
import * as SignalR from '@microsoft/signalr';
|
|
3
|
-
import { Account, AddChatRequest, AddChatMemberRequest, Chat, ChatListItem, ChatMessage, ReadChatMessageEvent, ReadChatMessageRequest, RemoveChatMemberRequest, SendChatMessageRequest, UpdateChatNameRequest, SendThreadMessageRequest, Thread, ThreadMessage, ThreadWatchListItem as ThreadListItem } from './types';
|
|
4
|
-
export interface ChatifySignalRConfig {
|
|
5
|
-
hubUri?: string;
|
|
6
|
-
accessTokenFactory?: () => Promise<string>;
|
|
7
|
-
headersFactory?: () => Promise<Record<string, string>>;
|
|
8
|
-
}
|
|
9
|
-
export interface ChatifyClientConfig {
|
|
10
|
-
axios: AxiosInstance;
|
|
11
|
-
signalR: ChatifySignalRConfig;
|
|
12
|
-
}
|
|
13
|
-
export declare const CHATIFY_SIGNALR_METHODS: readonly ["chatify://chat-new-message", "chatify://chat-created", "chatify://chat-message-read", "chatify://chat-member-added", "chatify://chat-member-removed", "chatify://chat-name-changed", "chatify://thread-created", "chatify://thread-message-new", "chatify://thread-message-read", "chatify://thread-watch-added", "chatify://thread-watch-removed"];
|
|
14
|
-
export type ChatifySignalRMethod = (typeof CHATIFY_SIGNALR_METHODS)[number];
|
|
15
|
-
export type ChatifySignalRArgsByMethod = {
|
|
16
|
-
'chatify://chat-new-message': [message: ChatMessage, requestId: string];
|
|
17
|
-
'chatify://chat-created': [chat: ChatListItem, requestId: string];
|
|
18
|
-
'chatify://chat-message-read': [events: ReadChatMessageEvent[]];
|
|
19
|
-
'chatify://chat-member-added': [
|
|
20
|
-
chatId: string,
|
|
21
|
-
chatName: string,
|
|
22
|
-
account: Account,
|
|
23
|
-
message: ChatMessage,
|
|
24
|
-
withHistory: boolean,
|
|
25
|
-
read: boolean
|
|
26
|
-
];
|
|
27
|
-
'chatify://chat-member-removed': [
|
|
28
|
-
chatId: string,
|
|
29
|
-
accountId: string,
|
|
30
|
-
deleteHistory: boolean,
|
|
31
|
-
message: ChatMessage,
|
|
32
|
-
read: boolean
|
|
33
|
-
];
|
|
34
|
-
'chatify://chat-name-changed': [chatId: string, newName: string, message: ChatMessage, read: boolean];
|
|
35
|
-
'chatify://thread-message-new': [threadId: string, message: ThreadMessage, readForId: string | null];
|
|
36
|
-
'chatify://thread-message-read': [threadId: string, messageId: string];
|
|
37
|
-
'chatify://thread-watch-added': [thread: ThreadListItem];
|
|
38
|
-
'chatify://thread-watch-removed': [id: string];
|
|
39
|
-
'chatify://thread-created': [thread: ThreadListItem, watch: boolean];
|
|
40
|
-
};
|
|
41
|
-
export declare class ChatifyClient {
|
|
42
|
-
private _config;
|
|
43
|
-
private _connection;
|
|
44
|
-
private _connectionPromise;
|
|
45
|
-
private _subscribers;
|
|
46
|
-
private _reconnectSubscribers;
|
|
47
|
-
constructor(config: ChatifyClientConfig);
|
|
48
|
-
connect: () => Promise<SignalR.HubConnection | undefined>;
|
|
49
|
-
private createAndStartConnection;
|
|
50
|
-
subscribe: <TMethod extends "chatify://chat-created" | "chatify://chat-name-changed" | "chatify://chat-new-message" | "chatify://chat-message-read" | "chatify://chat-member-added" | "chatify://chat-member-removed" | "chatify://thread-created" | "chatify://thread-message-new" | "chatify://thread-message-read" | "chatify://thread-watch-added" | "chatify://thread-watch-removed">(method: TMethod, subscriber: (args: ChatifySignalRArgsByMethod[TMethod]) => void) => () => ((args: any[]) => void)[];
|
|
51
|
-
subscribeReconnect: (subscriber: () => any) => () => (() => void)[];
|
|
52
|
-
private get axios();
|
|
53
|
-
accounts: () => Promise<Account[]>;
|
|
54
|
-
chats: () => Promise<ChatListItem[]>;
|
|
55
|
-
chat: (id: string) => Promise<Chat>;
|
|
56
|
-
addChat: (args: AddChatRequest) => Promise<string>;
|
|
57
|
-
chatMessages: (args: {
|
|
58
|
-
chatId: string;
|
|
59
|
-
skip?: number;
|
|
60
|
-
take?: number;
|
|
61
|
-
}) => Promise<ChatMessage[]>;
|
|
62
|
-
sendChatMessage: (request: SendChatMessageRequest) => Promise<void>;
|
|
63
|
-
readChatMessage: (request: ReadChatMessageRequest) => Promise<void>;
|
|
64
|
-
removeChatMember: (request: RemoveChatMemberRequest) => Promise<void>;
|
|
65
|
-
updateChatName: (request: UpdateChatNameRequest) => Promise<void>;
|
|
66
|
-
addChatMember: (request: AddChatMemberRequest) => Promise<void>;
|
|
67
|
-
sendThreadMessage: ({ body, threadId }: SendThreadMessageRequest) => Promise<string>;
|
|
68
|
-
readThreadMessage: (id: string) => Promise<void>;
|
|
69
|
-
watchThreads: () => Promise<ThreadListItem[]>;
|
|
70
|
-
thread: (id: string) => Promise<Thread>;
|
|
71
|
-
threadMessages: ({ threadId, skip, take, }: {
|
|
72
|
-
threadId: string;
|
|
73
|
-
skip: number;
|
|
74
|
-
take: number;
|
|
75
|
-
}) => Promise<ThreadMessage[]>;
|
|
76
|
-
watchThread: (id: string, watch: boolean) => Promise<void>;
|
|
77
|
-
connectToThread: (id: string) => Promise<void>;
|
|
78
|
-
disconnectFromThread: (id: string) => Promise<void>;
|
|
79
|
-
}
|
|
80
|
-
export declare function unsubscribe(...subscribers: Array<() => void>): {
|
|
81
|
-
(): void;
|
|
82
|
-
when(promise: Promise<any>): Promise<void>;
|
|
83
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const SYSTEM_ID = "chatify::system";
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
interface DebounceInternalValue<T> {
|
|
2
|
-
value: T;
|
|
3
|
-
enqueueTime: number;
|
|
4
|
-
}
|
|
5
|
-
export interface DebounceValue<T> extends DebounceInternalValue<T> {
|
|
6
|
-
state: 'enqueued' | 'processing';
|
|
7
|
-
}
|
|
8
|
-
export interface DebounceConfig<T> {
|
|
9
|
-
timeout: number;
|
|
10
|
-
callback: (value: T) => Promise<any>;
|
|
11
|
-
groupBy: (value: T) => string;
|
|
12
|
-
compare: (a: T, b: T) => number;
|
|
13
|
-
}
|
|
14
|
-
export declare class Debounce<T> {
|
|
15
|
-
config: DebounceConfig<T>;
|
|
16
|
-
private _enqueued;
|
|
17
|
-
private _processing;
|
|
18
|
-
private _timeoutByGroup;
|
|
19
|
-
private _subscribers;
|
|
20
|
-
constructor(config: DebounceConfig<T>);
|
|
21
|
-
get units(): DebounceValue<T>[];
|
|
22
|
-
subscribe: (callback: (value: Debounce<T>) => any) => () => void;
|
|
23
|
-
notify: () => void;
|
|
24
|
-
push(value: T): void;
|
|
25
|
-
private _process;
|
|
26
|
-
}
|
|
27
|
-
export {};
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
export interface File {
|
|
2
|
-
name: string;
|
|
3
|
-
bytes: number;
|
|
4
|
-
ref: string;
|
|
5
|
-
}
|
|
6
|
-
export interface Account {
|
|
7
|
-
id: string;
|
|
8
|
-
name: string;
|
|
9
|
-
avatar: string;
|
|
10
|
-
}
|
|
11
|
-
export interface MessageBase {
|
|
12
|
-
id: string;
|
|
13
|
-
text: string;
|
|
14
|
-
files: File[];
|
|
15
|
-
sentAt: string;
|
|
16
|
-
sentBy: Account;
|
|
17
|
-
}
|
|
18
|
-
export interface ChatMessage extends MessageBase {
|
|
19
|
-
chatId: string;
|
|
20
|
-
requestId?: string;
|
|
21
|
-
}
|
|
22
|
-
export interface Chat {
|
|
23
|
-
id: string;
|
|
24
|
-
name: string;
|
|
25
|
-
members: Account[];
|
|
26
|
-
active: boolean;
|
|
27
|
-
lastReadMessageId: string | null;
|
|
28
|
-
}
|
|
29
|
-
export interface ChatListItem {
|
|
30
|
-
id: string;
|
|
31
|
-
name: string;
|
|
32
|
-
message: ChatMessage;
|
|
33
|
-
totalUnreadCount: number;
|
|
34
|
-
active: boolean;
|
|
35
|
-
lastReadMessageId: string | null;
|
|
36
|
-
}
|
|
37
|
-
export interface SendChatMessageRequest {
|
|
38
|
-
chatId: string;
|
|
39
|
-
text: string;
|
|
40
|
-
files: File[];
|
|
41
|
-
requestId: string;
|
|
42
|
-
}
|
|
43
|
-
export interface MessageBody {
|
|
44
|
-
text: string;
|
|
45
|
-
files: File[];
|
|
46
|
-
}
|
|
47
|
-
export interface AddChatRequest {
|
|
48
|
-
requestId: string;
|
|
49
|
-
name: string;
|
|
50
|
-
message?: MessageBody;
|
|
51
|
-
members: string[];
|
|
52
|
-
}
|
|
53
|
-
export interface ReadChatMessageRequest {
|
|
54
|
-
id: string;
|
|
55
|
-
}
|
|
56
|
-
export interface ReadChatMessageEvent {
|
|
57
|
-
chatId: string;
|
|
58
|
-
newLastReadMessageId: string;
|
|
59
|
-
readCount: number;
|
|
60
|
-
}
|
|
61
|
-
export interface RemoveChatMemberRequest {
|
|
62
|
-
chatId: string;
|
|
63
|
-
accountId: string;
|
|
64
|
-
deleteHistory: boolean;
|
|
65
|
-
}
|
|
66
|
-
export interface AddChatMemberRequest {
|
|
67
|
-
chatId: string;
|
|
68
|
-
accountId: string;
|
|
69
|
-
withHistory: boolean;
|
|
70
|
-
}
|
|
71
|
-
export interface UpdateChatNameRequest {
|
|
72
|
-
id: string;
|
|
73
|
-
name: string;
|
|
74
|
-
}
|
|
75
|
-
export declare function chatId(messageId: string): string;
|
|
76
|
-
export interface ThreadWatchListItem {
|
|
77
|
-
id: string;
|
|
78
|
-
name: string;
|
|
79
|
-
createdById: string;
|
|
80
|
-
createdAt: string;
|
|
81
|
-
archive: boolean;
|
|
82
|
-
lastMessage: ThreadMessage | null;
|
|
83
|
-
lastReadMessageId: string | null;
|
|
84
|
-
}
|
|
85
|
-
export interface Thread {
|
|
86
|
-
id: string;
|
|
87
|
-
name: string;
|
|
88
|
-
createdBy: Account;
|
|
89
|
-
createdAt: string;
|
|
90
|
-
archive: boolean;
|
|
91
|
-
lastMessageId: string | null;
|
|
92
|
-
lastReadMessageId: string | null;
|
|
93
|
-
watch: boolean;
|
|
94
|
-
}
|
|
95
|
-
export interface ThreadMessage extends MessageBase {
|
|
96
|
-
threadId: string;
|
|
97
|
-
}
|
|
98
|
-
export interface SendThreadMessageRequest {
|
|
99
|
-
threadId: string;
|
|
100
|
-
body: MessageBody;
|
|
101
|
-
}
|
|
102
|
-
export type SystemMessageText = 'chatify://chat-created' | 'chatify://member-added' | 'chatify://member-removed' | `chatify://chat-name-changed`;
|
|
103
|
-
export declare function parseThreadMessageId(messageId: string): readonly [string, number];
|
|
104
|
-
export declare function calcThreadUnreadCount(thread: Pick<ThreadWatchListItem, 'lastMessage' | 'lastReadMessageId'>): number;
|
|
105
|
-
export declare function calcThreadListUnreadCount(threads: Pick<ThreadWatchListItem, 'lastMessage' | 'lastReadMessageId'>[]): number;
|
package/src/types/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { PropsWithChildren } from 'react';
|
|
2
|
-
export interface ChatContext {
|
|
3
|
-
id: string;
|
|
4
|
-
showMembers: boolean;
|
|
5
|
-
onShowMembers: (value: boolean) => void;
|
|
6
|
-
}
|
|
7
|
-
export declare function useChatContext(): ChatContext;
|
|
8
|
-
export declare function ChatContext(props: PropsWithChildren<{
|
|
9
|
-
id: string;
|
|
10
|
-
}>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { CSSProperties } from 'react';
|
|
2
|
-
import { Localizer } from '../localizer';
|
|
3
|
-
import { ChatViewCustomizeValue } from './ChatView';
|
|
4
|
-
export interface ChatPanelCustomizeValue extends ChatViewCustomizeValue {
|
|
5
|
-
}
|
|
6
|
-
export interface ChatPanelProps {
|
|
7
|
-
id: string;
|
|
8
|
-
className?: string;
|
|
9
|
-
style?: CSSProperties;
|
|
10
|
-
localizer?: Localizer;
|
|
11
|
-
customize?: ChatPanelCustomizeValue;
|
|
12
|
-
}
|
|
13
|
-
export declare function ChatPanel(props: ChatPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { ConversationCustomizeValue, ConversationValue } from '../Conversation';
|
|
3
|
-
import { ChatEditableHeaderName } from './ChatEditableHeaderName';
|
|
4
|
-
import { ChatHeaderActions } from './ChatHeaderActions';
|
|
5
|
-
import { ChatMembersCustomizeValue } from './Members';
|
|
6
|
-
export interface ChatProps {
|
|
7
|
-
value: ChatValue;
|
|
8
|
-
}
|
|
9
|
-
export interface ChatValue extends ConversationValue {
|
|
10
|
-
}
|
|
11
|
-
export interface ChatViewCustomizeValue extends ConversationCustomizeValue, ChatMembersCustomizeValue {
|
|
12
|
-
ChatEditableHeaderName?: typeof ChatEditableHeaderName.Component | null;
|
|
13
|
-
ChatHeaderActions?: typeof ChatHeaderActions.Component | null;
|
|
14
|
-
ChatView?: typeof ChatView.Component | null;
|
|
15
|
-
}
|
|
16
|
-
export declare const DEFAULT_CHAT_VIEW_CUSTOMIZE_VALUE: ConversationCustomizeValue;
|
|
17
|
-
export declare const ChatView: import("../customize").Customizable<import("react").ComponentType<ChatProps>>;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ChatMembersButton } from './ChatMembersButton';
|
|
2
|
-
import { ChatMembersPanel } from './ChatMembersPanel';
|
|
3
|
-
import { ChatMembersPreview } from './ChatMembersPreview';
|
|
4
|
-
export * from './ChatMembersButton';
|
|
5
|
-
export * from './ChatMembersPanel';
|
|
6
|
-
export * from './ChatMembersPreview';
|
|
7
|
-
export interface ChatMembersCustomizeValue {
|
|
8
|
-
ChatMembersButton?: typeof ChatMembersButton.Component | null;
|
|
9
|
-
ChatMembersPanel?: typeof ChatMembersPanel.Component | null;
|
|
10
|
-
ChatMembersPreview?: typeof ChatMembersPreview.Component | null;
|
|
11
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { PropsWithChildren } from 'react';
|
|
2
|
-
export interface ChatGroupContext {
|
|
3
|
-
view: 'chat' | 'new-chat' | null;
|
|
4
|
-
chatId: string | null;
|
|
5
|
-
showMembers: boolean;
|
|
6
|
-
none(): void;
|
|
7
|
-
openChat(chatId: string): void;
|
|
8
|
-
toggleNewChat(): void;
|
|
9
|
-
toggleMembers(): void;
|
|
10
|
-
}
|
|
11
|
-
export declare function useChatGroupContext(): ChatGroupContext;
|
|
12
|
-
export declare function ChatGroupContext(props: PropsWithChildren<{}>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { CSSProperties, FC } from 'react';
|
|
2
|
-
import { Localizer } from '../localizer';
|
|
3
|
-
import { CreateChatPanelCustomizeValue } from './Create';
|
|
4
|
-
import { ChatGroupLayoutCustomizeValue } from './Layout';
|
|
5
|
-
import { ChatListCustomizeValue } from './List';
|
|
6
|
-
import { ChatViewCustomizeValue } from '../Chat';
|
|
7
|
-
export interface ChatGroupCustomizeValue extends ChatViewCustomizeValue, CreateChatPanelCustomizeValue, ChatListCustomizeValue, ChatGroupLayoutCustomizeValue {
|
|
8
|
-
}
|
|
9
|
-
export interface ChatifyProps {
|
|
10
|
-
className?: string;
|
|
11
|
-
style?: CSSProperties;
|
|
12
|
-
localizer?: Localizer;
|
|
13
|
-
customize?: ChatGroupCustomizeValue;
|
|
14
|
-
}
|
|
15
|
-
export declare const ChatGroupPanel: FC<ChatifyProps>;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
export interface CreateChatFormValue {
|
|
3
|
-
name: string;
|
|
4
|
-
members: string[];
|
|
5
|
-
}
|
|
6
|
-
export interface CreateChatFormProps {
|
|
7
|
-
value?: CreateChatFormValue;
|
|
8
|
-
onSubmit: (value: CreateChatFormValue) => void;
|
|
9
|
-
busy?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare const CreateChatForm: import("../../customize").Customizable<import("react").ComponentType<CreateChatFormProps>>;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { CreateChatForm } from './CreateChatForm';
|
|
2
|
-
import { CreateChatMemberInput } from './CreateChatMemberInput';
|
|
3
|
-
import { CreateChatNameInput } from './CreateChatNameInput';
|
|
4
|
-
import { CreateChatPanel } from './CreateChatPanel';
|
|
5
|
-
import { CreateChatButton } from './CreateChatButton';
|
|
6
|
-
export * from './CreateChatForm';
|
|
7
|
-
export * from './CreateChatMemberInput';
|
|
8
|
-
export * from './CreateChatNameInput';
|
|
9
|
-
export * from './CreateChatPanel';
|
|
10
|
-
export * from './CreateChatButton';
|
|
11
|
-
export interface CreateChatPanelCustomizeValue {
|
|
12
|
-
CreateChatForm?: typeof CreateChatForm.Component | null;
|
|
13
|
-
CreateChatMemberInput?: typeof CreateChatMemberInput.Component | null;
|
|
14
|
-
CreateChatNameInput?: typeof CreateChatNameInput.Component | null;
|
|
15
|
-
CreateChatPanel?: typeof CreateChatPanel.Component | null;
|
|
16
|
-
CreateChatButton?: typeof CreateChatButton.Component | null;
|
|
17
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { ChatGroupAside } from './ChatGroupAside';
|
|
2
|
-
import { ChatGroupHeader } from './ChatGroupHeader';
|
|
3
|
-
import { ChatGroupFooter } from './ChatGroupFooter';
|
|
4
|
-
import { ChatGroupMain } from './ChatGroupMain';
|
|
5
|
-
import { ChatGroupBody } from './ChatGroupBody';
|
|
6
|
-
export * from './ChatGroupAside';
|
|
7
|
-
export * from './ChatGroupHeader';
|
|
8
|
-
export * from './ChatGroupFooter';
|
|
9
|
-
export * from './ChatGroupMain';
|
|
10
|
-
export * from './ChatGroupBody';
|
|
11
|
-
export interface ChatGroupLayoutCustomizeValue {
|
|
12
|
-
ChatGroupAside?: typeof ChatGroupAside.Component | null;
|
|
13
|
-
ChatGroupHeader?: typeof ChatGroupHeader.Component | null;
|
|
14
|
-
ChatGroupFooter?: typeof ChatGroupFooter.Component | null;
|
|
15
|
-
ChatGroupMain?: typeof ChatGroupMain.Component | null;
|
|
16
|
-
ChatGroupBody?: typeof ChatGroupBody.Component | null;
|
|
17
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { ChatListItem as ChatListItemModel } from '../../../core';
|
|
3
|
-
export interface ChatListItemBoxProps {
|
|
4
|
-
chat: ChatListItemModel;
|
|
5
|
-
}
|
|
6
|
-
export declare const ChatListItemBox: import("../../customize").Customizable<import("react").ComponentType<ChatListItemBoxProps>>;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { ChatList } from './ChatList';
|
|
2
|
-
import { ChatListItemAvatar } from './ChatListItemAvatar';
|
|
3
|
-
import { ChatListItemBox } from './ChatListItemBox';
|
|
4
|
-
import { ChatListItemLastMessage } from './ChatListItemLastMessage';
|
|
5
|
-
import { ChatListItemLastMessageAuthor } from './ChatListItemLastMessageAuthor';
|
|
6
|
-
import { ChatListItemLastMessageContent } from './ChatListItemLastMessageContent';
|
|
7
|
-
import { ChatListItemLastMessageSentAt } from './ChatListItemLastMessageSentAt';
|
|
8
|
-
import { ChatListItemName } from './ChatListItemName';
|
|
9
|
-
import { ChatListItemUnreadCount } from './ChatListItemUnreadCount';
|
|
10
|
-
export * from './ChatList';
|
|
11
|
-
export * from './ChatListItemAvatar';
|
|
12
|
-
export * from './ChatListItemBox';
|
|
13
|
-
export * from './ChatListItemLastMessage';
|
|
14
|
-
export * from './ChatListItemLastMessageAuthor';
|
|
15
|
-
export * from './ChatListItemLastMessageContent';
|
|
16
|
-
export * from './ChatListItemLastMessageSentAt';
|
|
17
|
-
export * from './ChatListItemName';
|
|
18
|
-
export * from './ChatListItemUnreadCount';
|
|
19
|
-
export interface ChatListCustomizeValue {
|
|
20
|
-
ChatList?: typeof ChatList.Component | null;
|
|
21
|
-
ChatListItemAvatar?: typeof ChatListItemAvatar.Component | null;
|
|
22
|
-
ChatListItemBox?: typeof ChatListItemBox.Component | null;
|
|
23
|
-
ChatListItemLastMessage?: typeof ChatListItemLastMessage.Component | null;
|
|
24
|
-
ChatListItemLastMessageAuthor?: typeof ChatListItemLastMessageAuthor.Component | null;
|
|
25
|
-
ChatListItemLastMessageContent?: typeof ChatListItemLastMessageContent.Component | null;
|
|
26
|
-
ChatListItemLastMessageSentAt?: typeof ChatListItemLastMessageSentAt.Component | null;
|
|
27
|
-
ChatListItemName?: typeof ChatListItemName.Component | null;
|
|
28
|
-
ChatListItemUnreadCount?: typeof ChatListItemUnreadCount.Component | null;
|
|
29
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { ChatPanel } from './Chat';
|
|
3
|
-
import { ThreadPanel } from './Thread';
|
|
4
|
-
export declare const Chatify: {
|
|
5
|
-
Thread: typeof ThreadPanel;
|
|
6
|
-
ChatGroup: import("react").FC<import("./ChatGroup").ChatifyProps>;
|
|
7
|
-
Chat: typeof ChatPanel;
|
|
8
|
-
};
|