@webinex/chatify 1.0.0-alpha00

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 (135) hide show
  1. package/dist/cjs/index.js +2 -0
  2. package/dist/cjs/index.js.map +1 -0
  3. package/dist/cjs/types/ChatifyContext.d.ts +11 -0
  4. package/dist/cjs/types/core/action.d.ts +73 -0
  5. package/dist/cjs/types/core/client.d.ts +35 -0
  6. package/dist/cjs/types/core/index.d.ts +14 -0
  7. package/dist/cjs/types/core/models.d.ts +64 -0
  8. package/dist/cjs/types/core/reducer.d.ts +11 -0
  9. package/dist/cjs/types/core/state.d.ts +25 -0
  10. package/dist/cjs/types/core/useAccounts.d.ts +1 -0
  11. package/dist/cjs/types/core/useAddChat.d.ts +2 -0
  12. package/dist/cjs/types/core/useAddMember.d.ts +2 -0
  13. package/dist/cjs/types/core/useAddMessage.d.ts +5 -0
  14. package/dist/cjs/types/core/useChat.d.ts +3 -0
  15. package/dist/cjs/types/core/useChatList.d.ts +1 -0
  16. package/dist/cjs/types/core/useLoadMore.d.ts +3 -0
  17. package/dist/cjs/types/core/useMessages.d.ts +15 -0
  18. package/dist/cjs/types/core/useMutation.d.ts +12 -0
  19. package/dist/cjs/types/core/useQuery.d.ts +7 -0
  20. package/dist/cjs/types/core/useReadMonitor.d.ts +1 -0
  21. package/dist/cjs/types/core/useRemoveMember.d.ts +2 -0
  22. package/dist/cjs/types/core/useSignalR.d.ts +1 -0
  23. package/dist/cjs/types/index.d.ts +3 -0
  24. package/dist/cjs/types/ui/AddChat.d.ts +1 -0
  25. package/dist/cjs/types/ui/Aside.d.ts +1 -0
  26. package/dist/cjs/types/ui/Chat.d.ts +4 -0
  27. package/dist/cjs/types/ui/ChatBody.d.ts +4 -0
  28. package/dist/cjs/types/ui/ChatHeader.d.ts +4 -0
  29. package/dist/cjs/types/ui/ChatSettings.d.ts +1 -0
  30. package/dist/cjs/types/ui/Chatify.d.ts +8 -0
  31. package/dist/cjs/types/ui/InputForm.d.ts +1 -0
  32. package/dist/cjs/types/ui/LoadMore.d.ts +4 -0
  33. package/dist/cjs/types/ui/Main.d.ts +1 -0
  34. package/dist/cjs/types/ui/Message.d.ts +5 -0
  35. package/dist/cjs/types/ui/MessageMd.d.ts +13 -0
  36. package/dist/cjs/types/ui/MessageSkeleton.d.ts +4 -0
  37. package/dist/cjs/types/ui/SendingMessage.d.ts +6 -0
  38. package/dist/cjs/types/ui/SystemMessage.d.ts +8 -0
  39. package/dist/cjs/types/ui/index.d.ts +2 -0
  40. package/dist/cjs/types/ui/localizer.d.ts +28 -0
  41. package/dist/cjs/types/util/index.d.ts +2 -0
  42. package/dist/cjs/types/util/uniqBy.d.ts +1 -0
  43. package/dist/cjs/types/util/uniqId.d.ts +1 -0
  44. package/dist/css/chatify.css +328 -0
  45. package/dist/esm/index.js +2 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/types/ChatifyContext.d.ts +11 -0
  48. package/dist/esm/types/core/action.d.ts +73 -0
  49. package/dist/esm/types/core/client.d.ts +35 -0
  50. package/dist/esm/types/core/index.d.ts +14 -0
  51. package/dist/esm/types/core/models.d.ts +64 -0
  52. package/dist/esm/types/core/reducer.d.ts +11 -0
  53. package/dist/esm/types/core/state.d.ts +25 -0
  54. package/dist/esm/types/core/useAccounts.d.ts +1 -0
  55. package/dist/esm/types/core/useAddChat.d.ts +2 -0
  56. package/dist/esm/types/core/useAddMember.d.ts +2 -0
  57. package/dist/esm/types/core/useAddMessage.d.ts +5 -0
  58. package/dist/esm/types/core/useChat.d.ts +3 -0
  59. package/dist/esm/types/core/useChatList.d.ts +1 -0
  60. package/dist/esm/types/core/useLoadMore.d.ts +3 -0
  61. package/dist/esm/types/core/useMessages.d.ts +15 -0
  62. package/dist/esm/types/core/useMutation.d.ts +12 -0
  63. package/dist/esm/types/core/useQuery.d.ts +7 -0
  64. package/dist/esm/types/core/useReadMonitor.d.ts +1 -0
  65. package/dist/esm/types/core/useRemoveMember.d.ts +2 -0
  66. package/dist/esm/types/core/useSignalR.d.ts +1 -0
  67. package/dist/esm/types/index.d.ts +3 -0
  68. package/dist/esm/types/ui/AddChat.d.ts +1 -0
  69. package/dist/esm/types/ui/Aside.d.ts +1 -0
  70. package/dist/esm/types/ui/Chat.d.ts +4 -0
  71. package/dist/esm/types/ui/ChatBody.d.ts +4 -0
  72. package/dist/esm/types/ui/ChatHeader.d.ts +4 -0
  73. package/dist/esm/types/ui/ChatSettings.d.ts +1 -0
  74. package/dist/esm/types/ui/Chatify.d.ts +8 -0
  75. package/dist/esm/types/ui/InputForm.d.ts +1 -0
  76. package/dist/esm/types/ui/LoadMore.d.ts +4 -0
  77. package/dist/esm/types/ui/Main.d.ts +1 -0
  78. package/dist/esm/types/ui/Message.d.ts +5 -0
  79. package/dist/esm/types/ui/MessageMd.d.ts +13 -0
  80. package/dist/esm/types/ui/MessageSkeleton.d.ts +4 -0
  81. package/dist/esm/types/ui/SendingMessage.d.ts +6 -0
  82. package/dist/esm/types/ui/SystemMessage.d.ts +8 -0
  83. package/dist/esm/types/ui/index.d.ts +2 -0
  84. package/dist/esm/types/ui/localizer.d.ts +28 -0
  85. package/dist/esm/types/util/index.d.ts +2 -0
  86. package/dist/esm/types/util/uniqBy.d.ts +1 -0
  87. package/dist/esm/types/util/uniqId.d.ts +1 -0
  88. package/dist/index.d.ts +290 -0
  89. package/package.json +90 -0
  90. package/src/ChatifyContext.tsx +26 -0
  91. package/src/core/action.tsx +282 -0
  92. package/src/core/client.ts +137 -0
  93. package/src/core/index.ts +14 -0
  94. package/src/core/models.tsx +75 -0
  95. package/src/core/reducer.tsx +80 -0
  96. package/src/core/state.ts +38 -0
  97. package/src/core/useAccounts.tsx +11 -0
  98. package/src/core/useAddChat.tsx +12 -0
  99. package/src/core/useAddMember.tsx +12 -0
  100. package/src/core/useAddMessage.tsx +40 -0
  101. package/src/core/useChat.tsx +12 -0
  102. package/src/core/useChatList.tsx +10 -0
  103. package/src/core/useLoadMore.tsx +42 -0
  104. package/src/core/useMessages.tsx +23 -0
  105. package/src/core/useMutation.tsx +48 -0
  106. package/src/core/useQuery.tsx +45 -0
  107. package/src/core/useReadMonitor.tsx +31 -0
  108. package/src/core/useRemoveMember.tsx +12 -0
  109. package/src/core/useSignalR.tsx +51 -0
  110. package/src/index.ts +3 -0
  111. package/src/ui/AddChat.tsx +55 -0
  112. package/src/ui/Aside.tsx +67 -0
  113. package/src/ui/Chat.tsx +26 -0
  114. package/src/ui/ChatBody.tsx +43 -0
  115. package/src/ui/ChatHeader.tsx +47 -0
  116. package/src/ui/ChatSettings.tsx +59 -0
  117. package/src/ui/Chatify.tsx +47 -0
  118. package/src/ui/InputForm.tsx +48 -0
  119. package/src/ui/LoadMore.tsx +40 -0
  120. package/src/ui/Main.tsx +16 -0
  121. package/src/ui/Message.tsx +50 -0
  122. package/src/ui/MessageMd.tsx +47 -0
  123. package/src/ui/MessageSkeleton.tsx +19 -0
  124. package/src/ui/SendingMessage.tsx +14 -0
  125. package/src/ui/SystemMessage.tsx +26 -0
  126. package/src/ui/index.ts +2 -0
  127. package/src/ui/localizer.tsx +58 -0
  128. package/src/ui/styles/aside.scss +94 -0
  129. package/src/ui/styles/index.scss +247 -0
  130. package/src/ui/styles/keyframes.scss +14 -0
  131. package/src/ui/styles/mixins.scss +20 -0
  132. package/src/ui/styles/variables.scss +10 -0
  133. package/src/util/index.ts +2 -0
  134. package/src/util/uniqBy.tsx +17 -0
  135. package/src/util/uniqId.tsx +3 -0
@@ -0,0 +1,247 @@
1
+ @import './variables.scss';
2
+ @import './mixins.scss';
3
+ @import './keyframes.scss';
4
+ @import './aside.scss';
5
+
6
+ .wxchtf-chatify {
7
+ border: $border;
8
+ display: flex;
9
+ flex-flow: column nowrap;
10
+ background: $background;
11
+ border-radius: $radius;
12
+
13
+ .wxchtf-header {
14
+ min-height: 2rem;
15
+ border-bottom: $border;
16
+ }
17
+
18
+ .wxchtf-body {
19
+ flex: 1 0;
20
+ display: flex;
21
+ flex-flow: row nowrap;
22
+ }
23
+
24
+ .wxchtf-footer {
25
+ min-height: 2rem;
26
+ border-top: $border;
27
+ }
28
+ }
29
+
30
+ .wxchtf-main {
31
+ flex: auto;
32
+ display: flex;
33
+ flex-flow: column nowrap;
34
+
35
+ .wxchtf-chat {
36
+ flex: auto;
37
+ display: flex;
38
+ flex-flow: column nowrap;
39
+
40
+ .wxchtf-chat-header {
41
+ border-bottom: $border;
42
+ padding: 0.5rem 1rem;
43
+
44
+ .wxchtf-chat-name {
45
+ font-weight: 600;
46
+ flex: none;
47
+ }
48
+ }
49
+
50
+ .wxchtf-chat-body {
51
+ flex: 1 1 auto;
52
+ height: 100px;
53
+ overflow-y: auto;
54
+ background: $chatBodyBackground;
55
+ padding: 2rem 1rem;
56
+ display: flex;
57
+ flex-flow: column-reverse nowrap;
58
+
59
+ @include scrollbar();
60
+
61
+ @media only screen and (min-width: 1120px) {
62
+ padding-right: 30%;
63
+ }
64
+
65
+ .wxchtf-message {
66
+ display: flex;
67
+ flex-flow: row nowrap;
68
+ width: 100%;
69
+ align-items: flex-end;
70
+
71
+ &.--sending {
72
+ animation: fadeInFromNone 0.5s ease-out;
73
+ }
74
+
75
+ &.--my {
76
+ direction: rtl;
77
+ justify-content: flex-start;
78
+
79
+ .wxchtf-message-author {
80
+ margin-right: 0;
81
+ margin-left: 15px;
82
+ }
83
+
84
+ .wxchtf-message-body {
85
+ direction: ltr;
86
+ border-bottom-left-radius: 10px;
87
+ border-bottom-right-radius: 0;
88
+ background-color: $myMessageBackground;
89
+ }
90
+ }
91
+
92
+ .wxchtf-message-author {
93
+ margin-right: 15px;
94
+
95
+ .ant-avatar {
96
+ @include avatarSize($avatarSize);
97
+ box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;
98
+ }
99
+ }
100
+
101
+ .wxchtf-message-body {
102
+ min-width: 300px;
103
+ max-width: 70%;
104
+ border-radius: $messageBorderRadius;
105
+ padding: 0.75rem 1rem;
106
+ background: white;
107
+ border-bottom-left-radius: 0;
108
+ background-color: $messageBackground;
109
+ box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 4px;
110
+ display: block;
111
+ white-space: pre-wrap;
112
+ overflow-wrap: break-word;
113
+
114
+ .wxchtf-message-info-box {
115
+ text-align: right;
116
+
117
+ .wxchtf-message-sent-at,
118
+ .wxchtf-message-read-box,
119
+ .wxchtf-message-sending-box {
120
+ display: inline-block;
121
+ font-style: italic;
122
+ font-size: 0.75em;
123
+ margin-top: 0.5rem;
124
+ opacity: 0.5;
125
+ }
126
+
127
+ .wxchtf-message-read-box,
128
+ .wxchtf-message-sending-box {
129
+ margin-left: 5px;
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ .wxchtf-system-message {
136
+ font-style: italic;
137
+ position: relative;
138
+ text-align: center;
139
+
140
+ .wxchtf-text,
141
+ .wxchtf-timestamp {
142
+ display: inline-block;
143
+ opacity: 0.9;
144
+ font-size: 0.85em;
145
+ }
146
+
147
+ .wxchtf-timestamp {
148
+ margin-left: 1rem;
149
+ }
150
+ }
151
+
152
+ .wxchtf-message,
153
+ .wxchtf-system-message,
154
+ .wxchtf-message-skeleton {
155
+ margin-bottom: 2rem;
156
+
157
+ &:first-child {
158
+ margin-bottom: 0;
159
+ }
160
+ }
161
+
162
+ .wxchtf-message-skeleton {
163
+ display: flex;
164
+ flex-flow: row nowrap;
165
+ align-items: end;
166
+
167
+ .wxchtf-avatar {
168
+ margin-right: 15px;
169
+ }
170
+
171
+ .wxchtf-avatar .ant-skeleton-avatar {
172
+ width: $avatarSize;
173
+ height: $avatarSize;
174
+ line-height: $avatarSize;
175
+ }
176
+
177
+ .wxchtf-content {
178
+ width: 300px;
179
+ height: 100px;
180
+ border-radius: $messageBorderRadius;
181
+ border-bottom-left-radius: 0;
182
+ }
183
+ }
184
+ }
185
+ }
186
+
187
+ .wxchtf-input-form {
188
+ flex: none;
189
+ max-height: 300px;
190
+ display: flex;
191
+ flex-flow: column nowrap;
192
+
193
+ .wxchtf-input-box {
194
+ flex: none;
195
+ display: flex;
196
+ flex-flow: row nowrap;
197
+ padding: 1rem 0;
198
+ border-top: $border;
199
+
200
+ @mixin iconBtn {
201
+ flex: none;
202
+ display: flex;
203
+ padding: 0 1rem;
204
+ align-items: end;
205
+
206
+ .ant-btn.ant-btn-icon-only .anticon {
207
+ font-size: 1.5rem;
208
+ }
209
+ }
210
+
211
+ .wxchtf-add-files-box {
212
+ @include iconBtn();
213
+ }
214
+
215
+ .wxchtf-text-input-box {
216
+ flex: auto;
217
+
218
+ textarea {
219
+ resize: none;
220
+ border: none;
221
+ outline: none;
222
+ box-shadow: none;
223
+
224
+ @include scrollbar();
225
+ }
226
+ }
227
+
228
+ .wxchtf-submit-btn-box {
229
+ @include iconBtn();
230
+ }
231
+ }
232
+ }
233
+
234
+ .wxchtf-add-chat {
235
+ display: flex;
236
+ flex-flow: column nowrap;
237
+ justify-content: center;
238
+ align-items: center;
239
+ height: 100%;
240
+
241
+ form {
242
+ padding: 2rem;
243
+ max-width: 700px;
244
+ width: 100%;
245
+ }
246
+ }
247
+ }
@@ -0,0 +1,14 @@
1
+ @keyframes fadeInFromNone {
2
+ 0% {
3
+ display: none;
4
+ opacity: 0;
5
+ }
6
+
7
+ 1% {
8
+ opacity: 0;
9
+ }
10
+
11
+ 100% {
12
+ opacity: 1;
13
+ }
14
+ }
@@ -0,0 +1,20 @@
1
+ @mixin scrollbar() {
2
+ &::-webkit-scrollbar {
3
+ width: 8px;
4
+ height: 8px;
5
+ }
6
+
7
+ &::-webkit-scrollbar-track {
8
+ background-color: #f1f1f1;
9
+ }
10
+
11
+ &::-webkit-scrollbar-thumb {
12
+ background-color: #dfdfdf;
13
+ }
14
+ }
15
+
16
+ @mixin avatarSize($size) {
17
+ width: $size;
18
+ height: $size;
19
+ line-height: $size - 2px;
20
+ }
@@ -0,0 +1,10 @@
1
+ $borderColor: #ddd;
2
+ $border: 1px solid #ddd;
3
+ $background: white;
4
+ $radius: 4px;
5
+ $chatBodyBackground: #f5f5f5;
6
+ $messageBackground: #e1f5fe;
7
+ $myMessageBackground: #b9f6ca;
8
+ $unreadCountBackground: #ffa726;
9
+ $avatarSize: 40px;
10
+ $messageBorderRadius: 10px;
@@ -0,0 +1,2 @@
1
+ export * from './uniqBy';
2
+ export * from './uniqId';
@@ -0,0 +1,17 @@
1
+ export function uniqBy<T, TKey extends string | number | symbol>(items: T[], selector: (x: T) => TKey) {
2
+ const keys = {} as Record<TKey, null>;
3
+ const result: T[] = [];
4
+
5
+ items.forEach((x) => {
6
+ const key = selector(x);
7
+
8
+ if (keys.hasOwnProperty(key)) {
9
+ return;
10
+ }
11
+
12
+ keys[key] = null;
13
+ result.push(x);
14
+ });
15
+
16
+ return result;
17
+ }
@@ -0,0 +1,3 @@
1
+ export function uniqId() {
2
+ return Date.now().toString(36) + Math.random().toString(36).substring(2);
3
+ }