@webinex/chatify 2.0.0-alpha1 → 2.0.0-alpha3

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 (234) hide show
  1. package/dist/css/chatify.css +116 -13
  2. package/dist/esm/index.js +2 -2
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/types/core/api/api.d.ts +10703 -387
  5. package/dist/esm/types/core/api/baseApi.d.ts +1 -1
  6. package/dist/esm/types/core/client.d.ts +2 -2
  7. package/dist/esm/types/core/types.d.ts +3 -6
  8. package/dist/esm/types/ui/Conversation/Conversation.d.ts +2 -0
  9. package/dist/esm/types/ui/Conversation/ConversationContext.d.ts +2 -0
  10. package/dist/esm/types/ui/Conversation/InputBox/InputBoxFile.d.ts +8 -0
  11. package/dist/esm/types/ui/Conversation/InputBox/InputBoxFileList.d.ts +8 -0
  12. package/dist/esm/types/ui/Conversation/InputBox/InputFilesBox.d.ts +11 -1
  13. package/dist/esm/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +2 -0
  14. package/dist/esm/types/ui/Conversation/InputBox/InputTextBox.d.ts +1 -0
  15. package/dist/esm/types/ui/Conversation/InputBox/index.d.ts +8 -1
  16. package/dist/esm/types/ui/Conversation/Message/MessageFile.d.ts +6 -0
  17. package/dist/esm/types/ui/Conversation/Message/MessageFileList.d.ts +3 -0
  18. package/dist/esm/types/ui/Conversation/Message/index.d.ts +6 -0
  19. package/dist/esm/types/ui/common/Icon.d.ts +14 -12
  20. package/dist/esm/types/ui/customize.d.ts +2 -2
  21. package/dist/esm/types/ui/localizer.d.ts +5 -0
  22. package/dist/esm/types/ui/useFormatter.d.ts +3 -0
  23. package/dist/index.d.ts +10772 -415
  24. package/package.json +94 -93
  25. package/src/core/api/api.ts +639 -642
  26. package/src/core/api/baseApi.ts +38 -38
  27. package/src/core/api/index.ts +1 -1
  28. package/src/core/client.ts +280 -280
  29. package/src/core/constants.ts +1 -1
  30. package/src/core/debounce.ts +90 -90
  31. package/src/core/index.ts +4 -4
  32. package/src/core/types.tsx +149 -152
  33. package/src/index.ts +2 -2
  34. package/src/styles/aside.scss +162 -161
  35. package/src/styles/chat.scss +209 -208
  36. package/src/styles/index.scss +159 -110
  37. package/src/styles/input.scss +147 -74
  38. package/src/styles/keyframes.scss +14 -14
  39. package/src/styles/members.scss +13 -13
  40. package/src/styles/mixins.scss +25 -20
  41. package/src/styles/variables.scss +13 -10
  42. package/src/ui/Chat/ChatContext.tsx +30 -30
  43. package/src/ui/Chat/ChatEditableHeaderName.tsx +63 -63
  44. package/src/ui/Chat/ChatHeaderActions.tsx +19 -19
  45. package/src/ui/Chat/ChatPanel.tsx +30 -30
  46. package/src/ui/Chat/ChatView.tsx +115 -115
  47. package/src/ui/Chat/Members/ChatMembersButton.tsx +9 -9
  48. package/src/ui/Chat/Members/ChatMembersPanel.tsx +112 -112
  49. package/src/ui/Chat/Members/ChatMembersPreview.tsx +25 -25
  50. package/src/ui/Chat/Members/index.ts +13 -13
  51. package/src/ui/Chat/index.ts +6 -6
  52. package/src/ui/ChatGroup/ChatGroupContext.tsx +50 -50
  53. package/src/ui/ChatGroup/ChatGroupPanel.tsx +73 -73
  54. package/src/ui/ChatGroup/Create/CreateChatButton.tsx +15 -15
  55. package/src/ui/ChatGroup/Create/CreateChatForm.tsx +36 -36
  56. package/src/ui/ChatGroup/Create/CreateChatMemberInput.tsx +65 -65
  57. package/src/ui/ChatGroup/Create/CreateChatNameInput.tsx +25 -25
  58. package/src/ui/ChatGroup/Create/CreateChatPanel.tsx +45 -45
  59. package/src/ui/ChatGroup/Create/index.ts +19 -19
  60. package/src/ui/ChatGroup/Layout/ChatGroupAside.tsx +12 -12
  61. package/src/ui/ChatGroup/Layout/ChatGroupBody.tsx +10 -10
  62. package/src/ui/ChatGroup/Layout/ChatGroupFooter.tsx +3 -3
  63. package/src/ui/ChatGroup/Layout/ChatGroupHeader.tsx +5 -5
  64. package/src/ui/ChatGroup/Layout/ChatGroupMain.tsx +17 -17
  65. package/src/ui/ChatGroup/Layout/index.ts +19 -19
  66. package/src/ui/ChatGroup/List/ChatList.tsx +41 -42
  67. package/src/ui/ChatGroup/List/ChatListItemAvatar.tsx +22 -22
  68. package/src/ui/ChatGroup/List/ChatListItemBox.tsx +26 -26
  69. package/src/ui/ChatGroup/List/ChatListItemLastMessage.tsx +15 -15
  70. package/src/ui/ChatGroup/List/ChatListItemLastMessageAuthor.tsx +15 -15
  71. package/src/ui/ChatGroup/List/ChatListItemLastMessageContent.tsx +21 -21
  72. package/src/ui/ChatGroup/List/ChatListItemLastMessageSentAt.tsx +22 -22
  73. package/src/ui/ChatGroup/List/ChatListItemName.tsx +8 -8
  74. package/src/ui/ChatGroup/List/ChatListItemUnreadCount.tsx +12 -12
  75. package/src/ui/ChatGroup/List/index.ts +31 -31
  76. package/src/ui/ChatGroup/index.ts +5 -5
  77. package/src/ui/Chatify.tsx +9 -9
  78. package/src/ui/Conversation/Conversation.tsx +78 -76
  79. package/src/ui/Conversation/ConversationActions.tsx +5 -5
  80. package/src/ui/Conversation/ConversationBody.tsx +28 -28
  81. package/src/ui/Conversation/ConversationContext.ts +29 -27
  82. package/src/ui/Conversation/ConversationHeader.tsx +23 -23
  83. package/src/ui/Conversation/ConversationName.tsx +7 -7
  84. package/src/ui/Conversation/InputBox/InputBox.tsx +122 -40
  85. package/src/ui/Conversation/InputBox/InputBoxFile.tsx +38 -0
  86. package/src/ui/Conversation/InputBox/InputBoxFileList.tsx +21 -0
  87. package/src/ui/Conversation/InputBox/InputFilesBox.tsx +78 -9
  88. package/src/ui/Conversation/InputBox/InputSubmitButtonBox.tsx +26 -17
  89. package/src/ui/Conversation/InputBox/InputTextBox.tsx +61 -53
  90. package/src/ui/Conversation/InputBox/index.ts +23 -16
  91. package/src/ui/Conversation/Message/MessageAuthor.tsx +13 -13
  92. package/src/ui/Conversation/Message/MessageBox.tsx +20 -20
  93. package/src/ui/Conversation/Message/MessageContent.tsx +15 -11
  94. package/src/ui/Conversation/Message/MessageFile.tsx +54 -0
  95. package/src/ui/Conversation/Message/MessageFileList.tsx +14 -0
  96. package/src/ui/Conversation/Message/MessageInfoBox.tsx +28 -28
  97. package/src/ui/Conversation/Message/MessageRow.tsx +28 -28
  98. package/src/ui/Conversation/Message/MessageText.tsx +7 -7
  99. package/src/ui/Conversation/Message/index.ts +28 -22
  100. package/src/ui/Conversation/NextObserver/NextMessagesObserver.tsx +47 -47
  101. package/src/ui/Conversation/NextObserver/index.ts +1 -1
  102. package/src/ui/Conversation/ReadObserver/MessageReadObserver.tsx +49 -49
  103. package/src/ui/Conversation/ReadObserver/index.ts +1 -1
  104. package/src/ui/Conversation/SendingMessage/SendingMessageBox.tsx +16 -16
  105. package/src/ui/Conversation/SendingMessage/SendingMessageContent.tsx +13 -13
  106. package/src/ui/Conversation/SendingMessage/SendingMessageInfoBox.tsx +13 -13
  107. package/src/ui/Conversation/SendingMessage/SendingMessageText.tsx +7 -7
  108. package/src/ui/Conversation/SendingMessage/index.ts +16 -16
  109. package/src/ui/Conversation/SystemMessage/SystemMessageBox.tsx +20 -20
  110. package/src/ui/Conversation/SystemMessage/SystemMessageRow.tsx +28 -28
  111. package/src/ui/Conversation/SystemMessage/index.ts +10 -10
  112. package/src/ui/Conversation/index.ts +13 -13
  113. package/src/ui/Thread/ThreadActions.tsx +22 -22
  114. package/src/ui/Thread/ThreadContext.ts +13 -13
  115. package/src/ui/Thread/ThreadPanel.tsx +127 -127
  116. package/src/ui/Thread/index.tsx +3 -3
  117. package/src/ui/color.ts +20 -20
  118. package/src/ui/common/Avatar.tsx +20 -20
  119. package/src/ui/common/Icon.tsx +44 -40
  120. package/src/ui/common/MessageSkeleton.tsx +20 -20
  121. package/src/ui/common/index.ts +13 -13
  122. package/src/ui/customize.tsx +51 -53
  123. package/src/ui/index.ts +11 -11
  124. package/src/ui/localizer.tsx +96 -81
  125. package/src/ui/useFormatter.tsx +17 -0
  126. package/dist/esm/types/core/api/accountApi.d.ts +0 -5
  127. package/dist/esm/types/core/api/chatApi.d.ts +0 -16
  128. package/dist/esm/types/core/api/chatListApi.d.ts +0 -5
  129. package/dist/esm/types/core/api/chatMemberApi.d.ts +0 -6
  130. package/dist/esm/types/core/api/chatMessageApi.d.ts +0 -3
  131. package/dist/esm/types/core/api/threadApi.d.ts +0 -1
  132. package/dist/esm/types/core/api/threadMessageApi.d.ts +0 -6
  133. package/src/core/api/accountApi.ts +0 -11
  134. package/src/core/api/chatApi.ts +0 -87
  135. package/src/core/api/chatListApi.ts +0 -134
  136. package/src/core/api/chatMemberApi.ts +0 -20
  137. package/src/core/api/chatMessageApi.ts +0 -12
  138. package/src/core/api/threadApi.ts +0 -8
  139. package/src/core/api/threadMessageApi.ts +0 -20
  140. package/src/types/core/api/accountApi.d.ts +0 -5
  141. package/src/types/core/api/api.d.ts +0 -2380
  142. package/src/types/core/api/baseApi.d.ts +0 -15
  143. package/src/types/core/api/chatApi.d.ts +0 -16
  144. package/src/types/core/api/chatListApi.d.ts +0 -5
  145. package/src/types/core/api/chatMemberApi.d.ts +0 -6
  146. package/src/types/core/api/chatMessageApi.d.ts +0 -3
  147. package/src/types/core/api/index.d.ts +0 -1
  148. package/src/types/core/api/threadApi.d.ts +0 -1
  149. package/src/types/core/api/threadMessageApi.d.ts +0 -6
  150. package/src/types/core/client.d.ts +0 -83
  151. package/src/types/core/constants.d.ts +0 -1
  152. package/src/types/core/debounce.d.ts +0 -27
  153. package/src/types/core/index.d.ts +0 -4
  154. package/src/types/core/types.d.ts +0 -105
  155. package/src/types/index.d.ts +0 -2
  156. package/src/types/ui/Chat/ChatContext.d.ts +0 -10
  157. package/src/types/ui/Chat/ChatEditableHeaderName.d.ts +0 -2
  158. package/src/types/ui/Chat/ChatHeaderActions.d.ts +0 -2
  159. package/src/types/ui/Chat/ChatPanel.d.ts +0 -13
  160. package/src/types/ui/Chat/ChatView.d.ts +0 -17
  161. package/src/types/ui/Chat/Members/ChatMembersButton.d.ts +0 -2
  162. package/src/types/ui/Chat/Members/ChatMembersPanel.d.ts +0 -2
  163. package/src/types/ui/Chat/Members/ChatMembersPreview.d.ts +0 -2
  164. package/src/types/ui/Chat/Members/index.d.ts +0 -11
  165. package/src/types/ui/Chat/index.d.ts +0 -6
  166. package/src/types/ui/ChatGroup/ChatGroupContext.d.ts +0 -12
  167. package/src/types/ui/ChatGroup/ChatGroupPanel.d.ts +0 -15
  168. package/src/types/ui/ChatGroup/Create/CreateChatButton.d.ts +0 -2
  169. package/src/types/ui/ChatGroup/Create/CreateChatForm.d.ts +0 -11
  170. package/src/types/ui/ChatGroup/Create/CreateChatMemberInput.d.ts +0 -5
  171. package/src/types/ui/ChatGroup/Create/CreateChatNameInput.d.ts +0 -5
  172. package/src/types/ui/ChatGroup/Create/CreateChatPanel.d.ts +0 -2
  173. package/src/types/ui/ChatGroup/Create/index.d.ts +0 -17
  174. package/src/types/ui/ChatGroup/Layout/ChatGroupAside.d.ts +0 -2
  175. package/src/types/ui/ChatGroup/Layout/ChatGroupBody.d.ts +0 -2
  176. package/src/types/ui/ChatGroup/Layout/ChatGroupFooter.d.ts +0 -2
  177. package/src/types/ui/ChatGroup/Layout/ChatGroupHeader.d.ts +0 -2
  178. package/src/types/ui/ChatGroup/Layout/ChatGroupMain.d.ts +0 -2
  179. package/src/types/ui/ChatGroup/Layout/index.d.ts +0 -17
  180. package/src/types/ui/ChatGroup/List/ChatList.d.ts +0 -2
  181. package/src/types/ui/ChatGroup/List/ChatListItemAvatar.d.ts +0 -3
  182. package/src/types/ui/ChatGroup/List/ChatListItemBox.d.ts +0 -6
  183. package/src/types/ui/ChatGroup/List/ChatListItemLastMessage.d.ts +0 -3
  184. package/src/types/ui/ChatGroup/List/ChatListItemLastMessageAuthor.d.ts +0 -3
  185. package/src/types/ui/ChatGroup/List/ChatListItemLastMessageContent.d.ts +0 -3
  186. package/src/types/ui/ChatGroup/List/ChatListItemLastMessageSentAt.d.ts +0 -3
  187. package/src/types/ui/ChatGroup/List/ChatListItemName.d.ts +0 -3
  188. package/src/types/ui/ChatGroup/List/ChatListItemUnreadCount.d.ts +0 -3
  189. package/src/types/ui/ChatGroup/List/index.d.ts +0 -29
  190. package/src/types/ui/ChatGroup/index.d.ts +0 -5
  191. package/src/types/ui/Chatify.d.ts +0 -8
  192. package/src/types/ui/Conversation/Conversation.d.ts +0 -21
  193. package/src/types/ui/Conversation/ConversationActions.d.ts +0 -2
  194. package/src/types/ui/Conversation/ConversationBody.d.ts +0 -2
  195. package/src/types/ui/Conversation/ConversationContext.d.ts +0 -20
  196. package/src/types/ui/Conversation/ConversationHeader.d.ts +0 -2
  197. package/src/types/ui/Conversation/ConversationName.d.ts +0 -2
  198. package/src/types/ui/Conversation/InputBox/InputBox.d.ts +0 -2
  199. package/src/types/ui/Conversation/InputBox/InputFilesBox.d.ts +0 -2
  200. package/src/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +0 -5
  201. package/src/types/ui/Conversation/InputBox/InputTextBox.d.ts +0 -8
  202. package/src/types/ui/Conversation/InputBox/index.d.ts +0 -14
  203. package/src/types/ui/Conversation/Message/MessageAuthor.d.ts +0 -3
  204. package/src/types/ui/Conversation/Message/MessageBox.d.ts +0 -6
  205. package/src/types/ui/Conversation/Message/MessageContent.d.ts +0 -3
  206. package/src/types/ui/Conversation/Message/MessageInfoBox.d.ts +0 -3
  207. package/src/types/ui/Conversation/Message/MessageRow.d.ts +0 -6
  208. package/src/types/ui/Conversation/Message/MessageText.d.ts +0 -3
  209. package/src/types/ui/Conversation/Message/index.d.ts +0 -20
  210. package/src/types/ui/Conversation/NextObserver/NextMessagesObserver.d.ts +0 -5
  211. package/src/types/ui/Conversation/NextObserver/index.d.ts +0 -1
  212. package/src/types/ui/Conversation/ReadObserver/MessageReadObserver.d.ts +0 -6
  213. package/src/types/ui/Conversation/ReadObserver/index.d.ts +0 -1
  214. package/src/types/ui/Conversation/SendingMessage/SendingMessageBox.d.ts +0 -7
  215. package/src/types/ui/Conversation/SendingMessage/SendingMessageContent.d.ts +0 -3
  216. package/src/types/ui/Conversation/SendingMessage/SendingMessageInfoBox.d.ts +0 -3
  217. package/src/types/ui/Conversation/SendingMessage/SendingMessageText.d.ts +0 -3
  218. package/src/types/ui/Conversation/SendingMessage/index.d.ts +0 -14
  219. package/src/types/ui/Conversation/SystemMessage/SystemMessageBox.d.ts +0 -6
  220. package/src/types/ui/Conversation/SystemMessage/SystemMessageRow.d.ts +0 -9
  221. package/src/types/ui/Conversation/SystemMessage/index.d.ts +0 -8
  222. package/src/types/ui/Conversation/index.d.ts +0 -12
  223. package/src/types/ui/Thread/ThreadActions.d.ts +0 -2
  224. package/src/types/ui/Thread/ThreadContext.d.ts +0 -8
  225. package/src/types/ui/Thread/ThreadPanel.d.ts +0 -14
  226. package/src/types/ui/Thread/index.d.ts +0 -3
  227. package/src/types/ui/color.d.ts +0 -6
  228. package/src/types/ui/common/Avatar.d.ts +0 -6
  229. package/src/types/ui/common/Icon.d.ts +0 -20
  230. package/src/types/ui/common/MessageSkeleton.d.ts +0 -5
  231. package/src/types/ui/common/index.d.ts +0 -11
  232. package/src/types/ui/customize.d.ts +0 -9
  233. package/src/types/ui/index.d.ts +0 -11
  234. package/src/types/ui/localizer.d.ts +0 -35
@@ -1,40 +1,44 @@
1
- import { FC } from 'react';
2
- import { customize } from '../customize';
3
- import SendOutlined from '@ant-design/icons/SendOutlined';
4
- import PaperClipOutlined from '@ant-design/icons/PaperClipOutlined';
5
- import UserAddOutlined from '@ant-design/icons/UserAddOutlined';
6
- import UsergroupAddOutlined from '@ant-design/icons/UsergroupAddOutlined';
7
- import UserDeleteOutlined from '@ant-design/icons/UserDeleteOutlined';
8
- import UsergroupDeleteOutlined from '@ant-design/icons/UsergroupDeleteOutlined';
9
- import TeamOutlined from '@ant-design/icons/TeamOutlined';
10
- import EditOutlined from '@ant-design/icons/EditOutlined';
11
- import CloseOutlined from '@ant-design/icons/CloseOutlined';
12
- import EyeInvisibleOutlined from '@ant-design/icons/EyeInvisibleOutlined';
13
- import EyeOutlined from '@ant-design/icons/EyeOutlined';
14
-
15
- export type IconType = keyof typeof ICONS;
16
-
17
- export interface IconProps {
18
- type: IconType;
19
- }
20
-
21
- export const ICONS = {
22
- attach: PaperClipOutlined,
23
- send: SendOutlined,
24
- 'remove-member': UserDeleteOutlined,
25
- 'remove-member-delete-history': UsergroupDeleteOutlined,
26
- 'add-member': UserAddOutlined,
27
- 'add-member-with-history': UsergroupAddOutlined,
28
- members: TeamOutlined,
29
- edit: EditOutlined,
30
- close: CloseOutlined,
31
- chat: TeamOutlined,
32
- watch: EyeOutlined,
33
- unwatch: EyeInvisibleOutlined,
34
- };
35
-
36
- export const Icon = customize<FC<IconProps>>('Icon', (props) => {
37
- const { type } = props;
38
- const IconComponent = ICONS[type];
39
- return IconComponent ? <IconComponent /> : null;
40
- });
1
+ import { FC } from 'react';
2
+ import { customize } from '../customize';
3
+ import SendOutlined from '@ant-design/icons/SendOutlined';
4
+ import PaperClipOutlined from '@ant-design/icons/PaperClipOutlined';
5
+ import UserAddOutlined from '@ant-design/icons/UserAddOutlined';
6
+ import UsergroupAddOutlined from '@ant-design/icons/UsergroupAddOutlined';
7
+ import UserDeleteOutlined from '@ant-design/icons/UserDeleteOutlined';
8
+ import UsergroupDeleteOutlined from '@ant-design/icons/UsergroupDeleteOutlined';
9
+ import TeamOutlined from '@ant-design/icons/TeamOutlined';
10
+ import EditOutlined from '@ant-design/icons/EditOutlined';
11
+ import CloseOutlined from '@ant-design/icons/CloseOutlined';
12
+ import EyeInvisibleOutlined from '@ant-design/icons/EyeInvisibleOutlined';
13
+ import EyeOutlined from '@ant-design/icons/EyeOutlined';
14
+ import DeleteOutlined from '@ant-design/icons/DeleteOutlined';
15
+ import DownloadOutlined from '@ant-design/icons/DownloadOutlined';
16
+
17
+ export type IconType = keyof typeof ICONS;
18
+
19
+ export interface IconProps {
20
+ type: IconType;
21
+ }
22
+
23
+ export const ICONS = {
24
+ attach: PaperClipOutlined,
25
+ send: SendOutlined,
26
+ 'remove-member': UserDeleteOutlined,
27
+ 'remove-member-delete-history': UsergroupDeleteOutlined,
28
+ 'add-member': UserAddOutlined,
29
+ 'add-member-with-history': UsergroupAddOutlined,
30
+ members: TeamOutlined,
31
+ edit: EditOutlined,
32
+ close: CloseOutlined,
33
+ chat: TeamOutlined,
34
+ watch: EyeOutlined,
35
+ unwatch: EyeInvisibleOutlined,
36
+ 'delete-file': DeleteOutlined,
37
+ 'open-file': DownloadOutlined,
38
+ };
39
+
40
+ export const Icon = customize<FC<IconProps>>('Icon', (props) => {
41
+ const { type } = props;
42
+ const IconComponent = ICONS[type];
43
+ return IconComponent ? <IconComponent /> : null;
44
+ });
@@ -1,20 +1,20 @@
1
- import { Skeleton } from 'antd';
2
- import { customize } from '../customize';
3
-
4
- export interface MessageSkeletonProps {
5
- count?: number;
6
- }
7
-
8
- export const MessageSkeleton = customize('MessageSkeleton', (props: MessageSkeletonProps) => {
9
- const { count = 1 } = props;
10
- return (
11
- <>
12
- {Array.from(Array(count)).map((_, index) => (
13
- <div className="wxchtf-message-skeleton" key={index}>
14
- <Skeleton.Avatar className="wxchtf-avatar" active />
15
- <Skeleton.Button active className="wxchtf-content" />
16
- </div>
17
- ))}
18
- </>
19
- );
20
- });
1
+ import { Skeleton } from 'antd';
2
+ import { customize } from '../customize';
3
+
4
+ export interface MessageSkeletonProps {
5
+ count?: number;
6
+ }
7
+
8
+ export const MessageSkeleton = customize('MessageSkeleton', (props: MessageSkeletonProps) => {
9
+ const { count = 1 } = props;
10
+ return (
11
+ <>
12
+ {Array.from(Array(count)).map((_, index) => (
13
+ <div className="wxchtf-message-skeleton" key={index}>
14
+ <Skeleton.Avatar className="wxchtf-avatar" active />
15
+ <Skeleton.Button active className="wxchtf-content" />
16
+ </div>
17
+ ))}
18
+ </>
19
+ );
20
+ });
@@ -1,13 +1,13 @@
1
- import { Avatar } from './Avatar';
2
- import { Icon } from './Icon';
3
- import { MessageSkeleton } from './MessageSkeleton';
4
-
5
- export * from './Avatar';
6
- export * from './Icon';
7
- export * from './MessageSkeleton';
8
-
9
- export interface CommonCustomizeValue {
10
- Avatar?: typeof Avatar.Component | null;
11
- Icon?: typeof Icon.Component | null;
12
- MessageSkeleton?: typeof MessageSkeleton.Component | null;
13
- }
1
+ import { Avatar } from './Avatar';
2
+ import { Icon } from './Icon';
3
+ import { MessageSkeleton } from './MessageSkeleton';
4
+
5
+ export * from './Avatar';
6
+ export * from './Icon';
7
+ export * from './MessageSkeleton';
8
+
9
+ export interface CommonCustomizeValue {
10
+ Avatar?: typeof Avatar.Component | null;
11
+ Icon?: typeof Icon.Component | null;
12
+ MessageSkeleton?: typeof MessageSkeleton.Component | null;
13
+ }
@@ -1,53 +1,51 @@
1
- import React, { FC, useContext } from 'react';
2
-
3
- export type Customizable<TComponent extends React.ComponentType<any>> = TComponent & {
4
- Component: TComponent;
5
- key: string;
6
- };
7
-
8
- export const CustomizeContext = React.createContext<
9
- Record<string, React.ComponentType<any> | null | undefined>
10
- >(null!);
11
-
12
- export function useCustomizeContext() {
13
- return useContext(CustomizeContext);
14
- }
15
-
16
- function useCustom<TComponent extends React.ComponentType>(key: string): TComponent | undefined | null {
17
- const value = useContext(CustomizeContext);
18
- return value ? (value[key] as TComponent | null | undefined) : undefined;
19
- }
20
-
21
- export function useCustomize<TCustom extends Customizable<React.ComponentType<any>>>(custom: TCustom) {
22
- const Custom = useCustom<TCustom['Component']>(custom.key);
23
-
24
- if (Custom == null) {
25
- return null;
26
- }
27
-
28
- return Custom ?? custom.Component;
29
- }
30
-
31
- export function customize<TComponent extends React.ComponentType<any>>(
32
- key: string,
33
- Component: TComponent,
34
- ): TComponent extends React.ComponentType<infer X> ? Customizable<React.ComponentType<X>> : never {
35
- const Result: FC<any> = React.forwardRef<TComponent, any>((props: any, forwardRef) => {
36
- const Custom = useCustom(key);
37
-
38
- if (Custom === null) {
39
- return null;
40
- }
41
-
42
- if (Custom) {
43
- return <Custom {...props} ref={forwardRef} />;
44
- }
45
-
46
- return <Component {...props} ref={forwardRef} />;
47
- });
48
-
49
- Component.displayName = Component.displayName || key;
50
- Result.displayName = 'Customizable.' + Component.displayName;
51
-
52
- return Object.assign(Result, { key, Component }) as any;
53
- }
1
+ import React, { FC, useContext } from 'react';
2
+
3
+ export type Customizable<TComponent extends React.ComponentType<any>> = TComponent & {
4
+ Component: TComponent;
5
+ key: string;
6
+ };
7
+
8
+ export const CustomizeContext = React.createContext<Record<string, any>>(null!);
9
+
10
+ export function useCustomizeContext<TValue>() {
11
+ return useContext(CustomizeContext) as TValue;
12
+ }
13
+
14
+ function useCustom<TComponent extends React.ComponentType>(key: string): TComponent | undefined | null {
15
+ const value = useContext(CustomizeContext);
16
+ return value ? (value[key] as TComponent | null | undefined) : undefined;
17
+ }
18
+
19
+ export function useCustomize<TCustom extends Customizable<React.ComponentType<any>>>(custom: TCustom) {
20
+ const Custom = useCustom<TCustom['Component']>(custom.key);
21
+
22
+ if (Custom == null) {
23
+ return null;
24
+ }
25
+
26
+ return Custom ?? custom.Component;
27
+ }
28
+
29
+ export function customize<TComponent extends React.ComponentType<any>>(
30
+ key: string,
31
+ Component: TComponent,
32
+ ): TComponent extends React.ComponentType<infer X> ? Customizable<React.ComponentType<X>> : never {
33
+ const Result: FC<any> = React.forwardRef<TComponent, any>((props: any, forwardRef) => {
34
+ const Custom = useCustom(key);
35
+
36
+ if (Custom === null) {
37
+ return null;
38
+ }
39
+
40
+ if (Custom) {
41
+ return <Custom {...props} ref={forwardRef} />;
42
+ }
43
+
44
+ return <Component {...props} ref={forwardRef} />;
45
+ });
46
+
47
+ Component.displayName = Component.displayName || key;
48
+ Result.displayName = 'Customizable.' + Component.displayName;
49
+
50
+ return Object.assign(Result, { key, Component }) as any;
51
+ }
package/src/ui/index.ts CHANGED
@@ -1,11 +1,11 @@
1
- export * from './color';
2
- export * from './customize';
3
- export * from './Chatify';
4
- export * from './localizer';
5
- export * from './Chat';
6
- export * from './ChatGroup';
7
- export * from './Conversation';
8
- export * from './Thread';
9
- export * from './common/Icon';
10
- export * from './common/Avatar';
11
- export * from './common/MessageSkeleton';
1
+ export * from './color';
2
+ export * from './customize';
3
+ export * from './Chatify';
4
+ export * from './localizer';
5
+ export * from './Chat';
6
+ export * from './ChatGroup';
7
+ export * from './Conversation';
8
+ export * from './Thread';
9
+ export * from './common/Icon';
10
+ export * from './common/Avatar';
11
+ export * from './common/MessageSkeleton';
@@ -1,81 +1,96 @@
1
- import dayjs from 'dayjs';
2
- import React, { useContext } from 'react';
3
- import { SystemMessageText } from '../core';
4
-
5
- export interface Localizer {
6
- isToday: (value: string) => boolean;
7
- timestamp: (value: string) => string;
8
- dateTime: (value: string) => string;
9
- system: Record<SystemMessageText, (key: SystemMessageText, payload: any | null) => string>;
10
- message: {
11
- read: () => React.ReactNode;
12
- reading: () => React.ReactNode;
13
- sending: () => React.ReactNode;
14
- };
15
- addChat: {
16
- title: () => React.ReactNode;
17
- name: {
18
- label: () => React.ReactNode;
19
- required: () => string;
20
- max250: () => string;
21
- };
22
- members: {
23
- label: () => React.ReactNode;
24
- required: () => string;
25
- };
26
- submitBtn: () => React.ReactNode;
27
- };
28
-
29
- input: {
30
- placeholder: () => string;
31
- };
32
-
33
- settings: {
34
- members: () => string;
35
- };
36
- }
37
-
38
- export const LocalizerContext = React.createContext<Localizer>(null!);
39
-
40
- export function useLocalizer() {
41
- return useContext(LocalizerContext);
42
- }
43
-
44
- export const defaultLocalizer: Localizer = {
45
- isToday: (value: string) => dayjs(value).isSame(dayjs(), 'day'),
46
- timestamp: (value: string) => dayjs(value).format('HH:mm'),
47
- dateTime: (value: string) => dayjs(value).format('DD/MM/YYYY HH:mm'),
48
- message: {
49
- read: () => 'Read',
50
- reading: () => 'Reading...',
51
- sending: () => 'Sending...',
52
- },
53
- addChat: {
54
- title: () => 'Add chat',
55
- name: {
56
- label: () => 'Name',
57
- required: () => `Name is required`,
58
- max250: () => 'Max 250 characters allowed',
59
- },
60
- members: {
61
- label: () => 'Members',
62
- required: () => 'Members is required',
63
- },
64
- submitBtn: () => 'Submit',
65
- },
66
- system: {
67
- 'chatify://chat-created': () => 'Chat created',
68
- 'chatify://member-added': () => 'New member added',
69
- 'chatify://member-removed': () => 'Member removed',
70
- 'chatify://chat-name-changed': (_, { newName }: { newName: string }) =>
71
- `Chat name changed to '${newName}'`,
72
- },
73
-
74
- input: {
75
- placeholder: () => 'Start typing (Ctrl/⌘Cmd + Enter to send) ...',
76
- },
77
-
78
- settings: {
79
- members: () => 'Members',
80
- },
81
- };
1
+ import dayjs from 'dayjs';
2
+ import React, { useContext } from 'react';
3
+ import { SystemMessageText } from '../core';
4
+
5
+ export interface Localizer {
6
+ isToday: (value: string) => boolean;
7
+ timestamp: (value: string) => string;
8
+ dateTime: (value: string) => string;
9
+ system: Record<SystemMessageText, (key: SystemMessageText, payload: any | null) => string>;
10
+ message: {
11
+ read: () => React.ReactNode;
12
+ reading: () => React.ReactNode;
13
+ sending: () => React.ReactNode;
14
+ };
15
+ addChat: {
16
+ title: () => React.ReactNode;
17
+ name: {
18
+ label: () => React.ReactNode;
19
+ required: () => string;
20
+ max250: () => string;
21
+ };
22
+ members: {
23
+ label: () => React.ReactNode;
24
+ required: () => string;
25
+ };
26
+ submitBtn: () => React.ReactNode;
27
+ };
28
+
29
+ input: {
30
+ placeholder: () => string;
31
+ };
32
+
33
+ settings: {
34
+ members: () => string;
35
+ };
36
+
37
+ size: {
38
+ bytes: (value: number) => string;
39
+ kb: (value: number) => string;
40
+ mb: (value: number) => string;
41
+ };
42
+ }
43
+
44
+ export const LocalizerContext = React.createContext<Localizer>(null!);
45
+
46
+ export function useLocalizer() {
47
+ return useContext(LocalizerContext);
48
+ }
49
+
50
+ export const defaultLocalizer: Localizer = {
51
+ isToday: (value: string) => dayjs(value).isSame(dayjs(), 'day'),
52
+ timestamp: (value: string) => dayjs(value).format('HH:mm'),
53
+ dateTime: (value: string) => dayjs(value).format('DD/MM/YYYY HH:mm'),
54
+ message: {
55
+ read: () => 'Read',
56
+ reading: () => 'Reading...',
57
+ sending: () => 'Sending...',
58
+ },
59
+ addChat: {
60
+ title: () => 'Add chat',
61
+ name: {
62
+ label: () => 'Name',
63
+ required: () => `Name is required`,
64
+ max250: () => 'Max 250 characters allowed',
65
+ },
66
+ members: {
67
+ label: () => 'Members',
68
+ required: () => 'Members is required',
69
+ },
70
+ submitBtn: () => 'Submit',
71
+ },
72
+ system: {
73
+ 'chatify://chat-created': () => 'Chat created',
74
+ 'chatify://member-added': () => 'New member added',
75
+ 'chatify://member-removed': () => 'Member removed',
76
+ 'chatify://chat-name-changed': (_, { newName }: { newName: string }) =>
77
+ `Chat name changed to '${newName}'`,
78
+ },
79
+
80
+ input: {
81
+ placeholder: () => 'Start typing (Ctrl/⌘Cmd + Enter to send) ...',
82
+ },
83
+
84
+ settings: {
85
+ members: () => 'Members',
86
+ },
87
+
88
+ size: {
89
+ bytes: (value: number) =>
90
+ `${value.toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 })} bytes`,
91
+ kb: (value: number) =>
92
+ `${value.toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 })} KB`,
93
+ mb: (value: number) =>
94
+ `${value.toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 })} MB`,
95
+ },
96
+ };
@@ -0,0 +1,17 @@
1
+ import { useLocalizer } from './localizer';
2
+
3
+ export function useFormatter() {
4
+ const localizer = useLocalizer();
5
+
6
+ return {
7
+ size: (value: number) => {
8
+ if (value < 1024) {
9
+ return localizer.size.bytes(value);
10
+ } else if (value < 1024 * 1024) {
11
+ return localizer.size.kb(value / 1024);
12
+ } else {
13
+ return localizer.size.mb(value / 1024 / 1024);
14
+ }
15
+ },
16
+ };
17
+ }
@@ -1,5 +0,0 @@
1
- import { BaseApiEndpointBuilder } from './baseApi';
2
- import { Account } from '../types';
3
- export declare function accountEndpoints(builder: BaseApiEndpointBuilder): {
4
- getAccountList: import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn, "chat" | "account" | "message" | "thread" | "thread-message", Account[], "chatify">;
5
- };
@@ -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 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,11 +0,0 @@
1
- import { BaseApiEndpointBuilder, __settings } from './baseApi';
2
- import { Account } from '../types';
3
-
4
- export function accountEndpoints(builder: BaseApiEndpointBuilder) {
5
- return {
6
- getAccountList: builder.query<Account[], void>({
7
- queryFn: async () => ({ data: await __settings.client.accounts() }),
8
- providesTags: ['account'],
9
- }),
10
- };
11
- }
@@ -1,87 +0,0 @@
1
- import { BaseApiEndpointBuilder, __baseApi, __settings } from './baseApi';
2
- import { unsubscribe } from '../client';
3
- import { Chat } from '../types';
4
-
5
- export function chatEndpoints(builder: BaseApiEndpointBuilder) {
6
- return {};
7
- }
8
-
9
- const chatApi = __baseApi.injectEndpoints({
10
- endpoints: (builder) => ({
11
- getChat: builder.query<Chat, { id: string }>({
12
- queryFn: async ({ id }) => ({ data: await __settings.client.chat(id) }),
13
- providesTags: ['chat', 'account'],
14
- onCacheEntryAdded: async ({ id }, { cacheEntryRemoved, cacheDataLoaded, updateCachedData }) => {
15
- await cacheDataLoaded;
16
-
17
- unsubscribe(
18
- __settings.client.subscribe(
19
- 'chatify://chat-member-added',
20
- ([chatId, _, account, message, , read]) =>
21
- chatId === id &&
22
- updateCachedData((chat) => {
23
- chat.members.push(account);
24
- chat.lastReadMessageId = read ? message.id : chat.lastReadMessageId;
25
- }),
26
- ),
27
- __settings.client.subscribe(
28
- 'chatify://chat-member-removed',
29
- ([chatId, accountId, , message, read]) =>
30
- id === chatId &&
31
- updateCachedData((chat) => {
32
- chat.members = chat.members.filter((x) => x.id !== accountId);
33
- chat.lastReadMessageId = read ? message.id : chat.lastReadMessageId;
34
- }),
35
- ),
36
- __settings.client.subscribe(
37
- 'chatify://chat-name-changed',
38
- ([chatId, newName, message, read]) =>
39
- id === chatId &&
40
- updateCachedData((chat) => {
41
- chat.name = newName;
42
- chat.lastReadMessageId = read ? message.id : chat.lastReadMessageId;
43
- }),
44
- ),
45
- __settings.client.subscribe(
46
- 'chatify://chat-new-message',
47
- ([message]) =>
48
- id === message.chatId &&
49
- updateCachedData((chat) => {
50
- chat.lastReadMessageId =
51
- message.sentBy.id === __settings.me() ? message.id : chat.lastReadMessageId;
52
- }),
53
- ),
54
- __settings.client.subscribe(
55
- 'chatify://chat-message-read',
56
- ([events]) =>
57
- events.find((x) => x.chatId === id) &&
58
- updateCachedData((chat) => {
59
- const event = events.find((x) => x.chatId === id)!;
60
- chat.lastReadMessageId = event.newLastReadMessageId;
61
- }),
62
- ),
63
- ).when(cacheEntryRemoved);
64
- },
65
- }),
66
-
67
- addChat: builder.mutation<string, { name: string; members: string[] }>({
68
- queryFn: async ({ name, members }) => {
69
- const chatId = await __settings.client.addChat({
70
- name,
71
- members,
72
- requestId: new Date().getTime().toString(),
73
- });
74
- return { data: chatId };
75
- },
76
- }),
77
-
78
- updateChatName: builder.mutation<void, { id: string; name: string }>({
79
- queryFn: async ({ id, name }) => {
80
- await __settings.client.updateChatName({ id, name });
81
- return { data: null! };
82
- },
83
- }),
84
- }),
85
- });
86
-
87
- export const __chatApi = chatApi;