@tencentcloud/chat-uikit-react 3.0.0 → 3.0.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/README.md +8 -8
  3. package/dist/{ChatSetting-C7QlwAiq.js → ChatSetting-BtQwjHr0.js} +4996 -4920
  4. package/dist/components/Chat/Chat.js +10 -9
  5. package/dist/components/ChatHeader/ChatHeader.js +12 -11
  6. package/dist/components/ChatHeader/ChatHeaderActions/ChatHeaderActions.js +10 -9
  7. package/dist/components/ChatHeader/ChatHeaderUI/ChatHeaderUI.js +10 -9
  8. package/dist/components/Checkbox/index.js +1 -1
  9. package/dist/components/IconFont/Icon.js +1 -1
  10. package/dist/components/Modal/Modal.js +1 -1
  11. package/dist/components/Model/index.js +1 -1
  12. package/dist/components/Plugins/index.js +1 -1
  13. package/dist/components/Popup/index.js +1 -1
  14. package/dist/components/PopupNew/Popup.js +1 -1
  15. package/dist/components/Profile/Profile.d.ts +1 -1
  16. package/dist/components/Profile/Profile.js +16 -16
  17. package/dist/components/Profile/ProfileDefault.js +39 -39
  18. package/dist/components/Profile/myProfile/MyProfile.js +10 -9
  19. package/dist/components/index.d.ts +0 -1
  20. package/dist/components/index.js +25 -33
  21. package/dist/constant/avatar.d.ts +2 -1
  22. package/dist/constant/avatar.js +2 -1
  23. package/dist/context/ChatContext.js +6 -5
  24. package/dist/external_modules/{mui-CbGEJVT2.js → mui-BcA3SBHM.js} +1 -1
  25. package/dist/external_modules/{zustand-Dvydplxp.js → zustand-CDmQR4co.js} +7 -7
  26. package/dist/hooks/index.js +0 -1
  27. package/dist/index.js +2950 -1530
  28. package/dist/locales/en-US/TUIContact.d.ts +44 -0
  29. package/dist/locales/en-US/TUIContact.js +46 -1
  30. package/dist/locales/en-US/index.d.ts +44 -0
  31. package/dist/locales/ja-JP/TUIContact.d.ts +44 -0
  32. package/dist/locales/ja-JP/TUIContact.js +46 -1
  33. package/dist/locales/ja-JP/index.d.ts +44 -0
  34. package/dist/locales/ko-KR/TUIContact.d.ts +44 -0
  35. package/dist/locales/ko-KR/TUIContact.js +46 -1
  36. package/dist/locales/ko-KR/index.d.ts +44 -0
  37. package/dist/locales/zh-CN/TUIContact.d.ts +44 -0
  38. package/dist/locales/zh-CN/TUIContact.js +46 -1
  39. package/dist/locales/zh-CN/index.d.ts +44 -0
  40. package/dist/locales/zh-TW/TUIContact.d.ts +44 -0
  41. package/dist/locales/zh-TW/TUIContact.js +46 -1
  42. package/dist/locales/zh-TW/index.d.ts +44 -0
  43. package/dist/states/ChatHeaderState.js +23 -22
  44. package/dist/states/UIManagerState.js +1 -1
  45. package/dist/styles/ChatSetting.css +1 -1
  46. package/dist/styles/index.css +1 -1
  47. package/dist/styles/index2.css +1 -1
  48. package/dist/styles/index3.css +1 -1
  49. package/dist/styles/index4.css +1 -1
  50. package/dist/styles/index5.css +1 -1
  51. package/package.json +3 -3
  52. package/src/components/Profile/Profile.tsx +20 -17
  53. package/src/components/Profile/ProfileDefault.tsx +4 -6
  54. package/src/components/index.ts +0 -1
  55. package/src/constant/avatar.ts +2 -1
  56. package/src/hooks/index.ts +0 -2
  57. package/src/locales/en-US/TUIContact.ts +45 -0
  58. package/src/locales/ja-JP/TUIContact.ts +45 -0
  59. package/src/locales/ko-KR/TUIContact.ts +45 -0
  60. package/src/locales/zh-CN/TUIContact.ts +45 -0
  61. package/src/locales/zh-TW/TUIContact.ts +46 -0
  62. package/src/states/ChatHeaderState.ts +2 -2
  63. package/dist/components/Contact/Contact.d.ts +0 -3
  64. package/dist/components/Contact/Contact.js +0 -81
  65. package/dist/components/Contact/ContactInfo/ContactInfo.d.ts +0 -8
  66. package/dist/components/Contact/ContactInfo/ContactInfo.js +0 -27
  67. package/dist/components/Contact/ContactInfo/addFriendInfo.d.ts +0 -8
  68. package/dist/components/Contact/ContactInfo/addFriendInfo.js +0 -61
  69. package/dist/components/Contact/ContactInfo/basicInfo.d.ts +0 -8
  70. package/dist/components/Contact/ContactInfo/basicInfo.js +0 -48
  71. package/dist/components/Contact/ContactInfo/blockInfo.d.ts +0 -8
  72. package/dist/components/Contact/ContactInfo/blockInfo.js +0 -33
  73. package/dist/components/Contact/ContactInfo/friendApplication.d.ts +0 -8
  74. package/dist/components/Contact/ContactInfo/friendApplication.js +0 -47
  75. package/dist/components/Contact/ContactInfo/friendInfo.d.ts +0 -9
  76. package/dist/components/Contact/ContactInfo/friendInfo.js +0 -83
  77. package/dist/components/Contact/ContactInfo/groupInfo.d.ts +0 -9
  78. package/dist/components/Contact/ContactInfo/groupInfo.js +0 -45
  79. package/dist/components/Contact/ContactInfo/hooks/useContactInfo.d.ts +0 -11
  80. package/dist/components/Contact/ContactInfo/hooks/useContactInfo.js +0 -84
  81. package/dist/components/Contact/ContactList/ContactList.d.ts +0 -4
  82. package/dist/components/Contact/ContactList/ContactList.js +0 -152
  83. package/dist/components/Contact/hooks/useTUIContact.d.ts +0 -12
  84. package/dist/components/Contact/hooks/useTUIContact.js +0 -58
  85. package/dist/components/Contact/index.d.ts +0 -3
  86. package/dist/components/Contact/index.js +0 -10
  87. package/dist/components/ContactSearch/ContactSearch.d.ts +0 -3
  88. package/dist/components/ContactSearch/ContactSearch.js +0 -85
  89. package/dist/components/ContactSearch/hooks/useContactSearch.d.ts +0 -6
  90. package/dist/components/ContactSearch/hooks/useContactSearch.js +0 -28
  91. package/dist/styles/ContactInfo.css +0 -1
  92. package/dist/styles/ContactList.css +0 -1
  93. package/dist/styles/ContactSearch.css +0 -1
  94. package/dist/styles/index6.css +0 -1
  95. package/src/components/Contact/Contact.tsx +0 -97
  96. package/src/components/Contact/ContactInfo/ContactInfo.tsx +0 -36
  97. package/src/components/Contact/ContactInfo/addFriendInfo.tsx +0 -88
  98. package/src/components/Contact/ContactInfo/basicInfo.tsx +0 -52
  99. package/src/components/Contact/ContactInfo/blockInfo.tsx +0 -45
  100. package/src/components/Contact/ContactInfo/friendApplication.tsx +0 -68
  101. package/src/components/Contact/ContactInfo/friendInfo.tsx +0 -101
  102. package/src/components/Contact/ContactInfo/groupInfo.tsx +0 -62
  103. package/src/components/Contact/ContactInfo/hooks/useContactInfo.tsx +0 -101
  104. package/src/components/Contact/ContactInfo/index.scss +0 -136
  105. package/src/components/Contact/ContactList/ContactList.tsx +0 -174
  106. package/src/components/Contact/ContactList/index.scss +0 -111
  107. package/src/components/Contact/hooks/useTUIContact.tsx +0 -88
  108. package/src/components/Contact/index.scss +0 -91
  109. package/src/components/Contact/index.ts +0 -3
  110. package/src/components/ContactSearch/ContactSearch.tsx +0 -102
  111. package/src/components/ContactSearch/hooks/useContactSearch.tsx +0 -31
  112. package/src/components/ContactSearch/index.scss +0 -33
@@ -1,12 +0,0 @@
1
- import { default as React } from 'react';
2
- import { IGroupModel } from '@tencentcloud/chat-uikit-engine';
3
- declare function useTUIContact(): {
4
- friendList: never[];
5
- groupList: IGroupModel[] | undefined;
6
- blocklistProfile: never[];
7
- friendApplicationList: never[];
8
- blockList: never[];
9
- isShowContactList: boolean;
10
- setShowContactList: React.Dispatch<React.SetStateAction<boolean>>;
11
- };
12
- export default useTUIContact;
@@ -1,58 +0,0 @@
1
- import { useState as s, useEffect as p } from "react";
2
- import n, { TUIStore as S, StoreName as w } from "@tencentcloud/chat-uikit-engine";
3
- import { useUIManagerState as B } from "../../../states/UIManagerState.js";
4
- import "../../../ChatSetting-C7QlwAiq.js";
5
- import "@tencentcloud/uikit-base-component-react";
6
- import "@tencentcloud/tui-core";
7
- import "react/jsx-runtime";
8
- function V() {
9
- const { chat: i } = B(), [l, e] = s([]), [d, r] = s([]), [L, a] = s([]), [f, u] = s([]), [g, A] = s(), [E, T] = s(!0);
10
- p(() => {
11
- S.watch(w.GRP, {
12
- groupList: I
13
- }), m(), F(), U();
14
- }, [i]);
15
- const I = (t) => {
16
- A(t);
17
- };
18
- p(() => {
19
- i == null || i.on(n.EVENT.BLACKLIST_UPDATED, k), i == null || i.on(n.EVENT.FRIEND_LIST_UPDATED, D), i == null || i.on(
20
- n.EVENT.FRIEND_APPLICATION_LIST_UPDATED,
21
- P
22
- );
23
- }, [i]);
24
- const U = async () => {
25
- const { data: t } = await i.getFriendApplicationList();
26
- a(t == null ? void 0 : t.friendApplicationList);
27
- }, m = async () => {
28
- const { code: t, data: o } = await (i == null ? void 0 : i.getFriendList());
29
- t === 0 && e(o);
30
- }, F = async () => {
31
- const { data: t } = await (i == null ? void 0 : i.getBlacklist());
32
- t.length !== 0 && (r(t), c(t));
33
- }, c = async (t) => {
34
- const { data: o } = await i.getUserProfile({
35
- userIDList: t
36
- });
37
- u(o);
38
- }, P = (t) => {
39
- var o;
40
- a((o = t == null ? void 0 : t.data) == null ? void 0 : o.friendApplicationList);
41
- }, k = (t) => {
42
- r(t.data), c(t.data);
43
- }, D = (t) => {
44
- e(t.data);
45
- };
46
- return {
47
- friendList: l,
48
- groupList: g,
49
- blocklistProfile: f,
50
- friendApplicationList: L,
51
- blockList: d,
52
- isShowContactList: E,
53
- setShowContactList: T
54
- };
55
- }
56
- export {
57
- V as default
58
- };
@@ -1,3 +0,0 @@
1
- export * from './ContactList/ContactList';
2
- export * from './ContactInfo/ContactInfo';
3
- export * from './Contact';
@@ -1,10 +0,0 @@
1
- import { ContactList as n } from "./ContactList/ContactList.js";
2
- import { ContactInfo as r, UnMemoizedContactInfo as a } from "./ContactInfo/ContactInfo.js";
3
- import { Contact as f, UnMemoizedContact as m } from "./Contact.js";
4
- export {
5
- f as Contact,
6
- r as ContactInfo,
7
- n as ContactList,
8
- m as UnMemoizedContact,
9
- a as UnMemoizedContactInfo
10
- };
@@ -1,3 +0,0 @@
1
- import { default as React } from 'react';
2
- export declare function UnMemoizedContactSearch<T>(): React.ReactElement;
3
- export declare const ContactSearch: React.MemoExoticComponent<typeof UnMemoizedContactSearch>;
@@ -1,85 +0,0 @@
1
- import { jsxs as p, jsx as r } from "react/jsx-runtime";
2
- import F, { useState as u } from "react";
3
- import { useUIKit as N } from "@tencentcloud/uikit-base-component-react";
4
- import { defaultUserAvatar as P } from "../../constant/avatar.js";
5
- import { useTUIContactContext as T } from "../../context/ContactContext.js";
6
- import "../../context/ChatContext.js";
7
- import { useUIManagerState as k } from "../../states/UIManagerState.js";
8
- import "@tencentcloud/chat-uikit-engine";
9
- import { P as D } from "../../ChatSetting-C7QlwAiq.js";
10
- import "@tencentcloud/tui-core";
11
- import { Icon as b } from "../Icon/Icon.js";
12
- import { IconTypes as V } from "../Icon/type.js";
13
- import { Input as A } from "../Input/Input.js";
14
- import B from "./hooks/useContactSearch.js";
15
- import '../../styles/ContactSearch.css';function j() {
16
- const { setActiveContact: o } = k("TUIContactSearch"), { t: l } = N(), { friendList: n, setShowContactList: c } = T("TUIContactList"), [C, m] = u(!1), { checkFriend: I, isBlock: S, getUserProfile: v } = B(), [s, h] = u(""), [d, f] = u([]), U = (t) => {
17
- var e, a;
18
- if (((e = t.target) == null ? void 0 : e.value) === "") {
19
- c && c(!0), m(!1), f([]);
20
- return;
21
- }
22
- m(!0), h((a = t.target) == null ? void 0 : a.value), c && c(!1);
23
- }, g = (t) => {
24
- var e;
25
- h((e = t.target) == null ? void 0 : e.value);
26
- }, y = () => {
27
- o();
28
- }, x = async () => {
29
- s && v(s).then((t) => {
30
- const { data: e } = t;
31
- f(e);
32
- });
33
- }, R = async (t) => {
34
- if (await I(t)) {
35
- const a = n == null ? void 0 : n.find((i) => i.userID === s);
36
- a && o({ type: "friend", data: a });
37
- return;
38
- }
39
- if (S(t.userID)) {
40
- o({ type: "block", data: t });
41
- return;
42
- }
43
- o({ type: "addFriend", data: t });
44
- };
45
- return /* @__PURE__ */ p("div", { className: "tui-contact-search", children: [
46
- /* @__PURE__ */ r(
47
- A,
48
- {
49
- className: "tui-contact-search-input",
50
- placeholder: l("TUIContact.Enter a userID"),
51
- clearable: !0,
52
- value: s,
53
- onBlur: g,
54
- onFocus: y,
55
- onChange: U,
56
- onKeyDown: x,
57
- prefix: /* @__PURE__ */ r(b, { type: V.SEARCH, height: 16, width: 16 })
58
- }
59
- ),
60
- C && d.length === 0 ? /* @__PURE__ */ r("div", { className: "tui-contact-search-item", children: l("TUIContact.No Result") }) : d.map((t, e) => {
61
- const { userID: a, avatar: i, nick: w } = t;
62
- return /* @__PURE__ */ p(
63
- "div",
64
- {
65
- className: "tui-contact-search-item",
66
- role: "button",
67
- tabIndex: 0,
68
- onClick: () => {
69
- R(t);
70
- },
71
- children: [
72
- /* @__PURE__ */ r(D, { src: i || P }),
73
- /* @__PURE__ */ r("div", { className: "search-item-name", children: w || a })
74
- ]
75
- },
76
- a
77
- );
78
- })
79
- ] });
80
- }
81
- const Y = F.memo(j);
82
- export {
83
- Y as ContactSearch,
84
- j as UnMemoizedContactSearch
85
- };
@@ -1,6 +0,0 @@
1
- declare function useContactSearch(): {
2
- checkFriend: (info: any) => Promise<any>;
3
- isBlock: (userID: string) => boolean | undefined;
4
- getUserProfile: (userID: string) => any;
5
- };
6
- export default useContactSearch;
@@ -1,28 +0,0 @@
1
- import i from "@tencentcloud/chat-uikit-engine";
2
- import { useTUIContactContext as n } from "../../../context/ContactContext.js";
3
- import "../../../context/ChatContext.js";
4
- import { useUIManagerState as a } from "../../../states/UIManagerState.js";
5
- import "react";
6
- import "../../../ChatSetting-C7QlwAiq.js";
7
- import "@tencentcloud/uikit-base-component-react";
8
- import "@tencentcloud/tui-core";
9
- import "react/jsx-runtime";
10
- function E() {
11
- const { blockList: e } = n("TUIContactList"), { chat: o } = a();
12
- return {
13
- checkFriend: (t) => o.checkFriend({
14
- userIDList: [t == null ? void 0 : t.userID],
15
- type: i.TYPES.SNS_CHECK_TYPE_BOTH
16
- }).then((r) => {
17
- var c, s;
18
- return ((s = (c = r == null ? void 0 : r.data) == null ? void 0 : c.successUserIDList[0]) == null ? void 0 : s.relation) === i.TYPES.SNS_TYPE_BOTH_WAY;
19
- }),
20
- isBlock: (t) => e == null ? void 0 : e.includes(t),
21
- getUserProfile: (t) => o.getUserProfile({
22
- userIDList: [t]
23
- })
24
- };
25
- }
26
- export {
27
- E as default
28
- };
@@ -1 +0,0 @@
1
- .tui-contact-info{width:100%;height:100%;display:flex;padding:60px;flex-direction:column;overflow:hidden}[data-uikit-theme=light] .tui-contact-info{background-color:var(--uikit-theme-light-bg-color-operate);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-info{background-color:var(--uikit-theme-dark-bg-color-operate);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contact-info .tui-contact-info-header{padding-bottom:15px;border-bottom:1px solid #ddd;overflow:hidden;box-sizing:border-box;width:100%}.tui-contact-info .tui-contact-info-header .header-container{flex:1}.tui-contact-info .tui-contact-info-header .header-container .header-container-avatar{display:flex;align-items:center;padding:10px}.tui-contact-info .tui-contact-info-header .header-container .header-container-name{font-size:24px;padding:15px}[data-uikit-theme=light] .tui-contact-info .tui-contact-info-header .header-container .header-container-name{color:var(--uikit-theme-light-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-info .tui-contact-info-header .header-container .header-container-name{color:var(--uikit-theme-dark-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contact-info .tui-contact-info-header .header-container .header-container-text{margin-top:20px;font-size:16px;word-break:break-all}[data-uikit-theme=light] .tui-contact-info .tui-contact-info-header .header-container .header-container-text{color:var(--uikit-theme-light-text-color-secondary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-info .tui-contact-info-header .header-container .header-container-text{color:var(--uikit-theme-dark-text-color-secondary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contact-info .tui-contact-info-content{padding:15px 0;overflow:hidden}[data-uikit-theme=light] .tui-contact-info .tui-contact-info-content{color:var(--uikit-theme-light-text-color-secondary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-info .tui-contact-info-content{color:var(--uikit-theme-dark-text-color-secondary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contact-info .tui-contact-info-content .content-item{display:flex;flex-direction:row;align-items:center;padding:6px 0;font-size:16px;min-height:56px}.tui-contact-info .tui-contact-info-content .content-item-wording{padding:6px 0;font-size:16px;min-height:56px}.tui-contact-info .tui-contact-info-content .content-item-wording-text{margin-top:5px;flex:1;border:1px solid #e8e8e9;border-radius:4px;padding:4px;color:inherit;resize:none;height:100px;width:95%}.tui-contact-info .tui-contact-info-content .content-item-label{margin-right:5px}.tui-contact-info .tui-contact-info-content .content-item-text{flex:1;display:flex;flex-direction:row;overflow:hidden}.tui-contact-info .tui-contact-info-content .content-btn-container{display:flex;padding:30px;justify-content:center}.tui-contact-info .tui-contact-info-content .content-btn-container .content-item-btn{margin:15px;padding:8px 20px;border-radius:25px;border:none;font-size:14px;text-align:center;letter-spacing:0;min-width:100px;cursor:pointer;-webkit-user-select:none;user-select:none}[data-uikit-theme=light] .tui-contact-info .tui-contact-info-content .content-btn-container .delete-btn{color:var(--uikit-theme-light-text-color-error);border:1px solid var(--uikit-color-border-color-error);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-info .tui-contact-info-content .content-btn-container .delete-btn{color:var(--uikit-theme-dark-text-color-error);border:1px solid var(--uikit-color-border-color-error);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=light] .tui-contact-info .tui-contact-info-content .content-btn-container .confirm-btn{color:#fff;background-color:var(--uikit-theme-light-text-color-link);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-info .tui-contact-info-content .content-btn-container .confirm-btn{color:#fff;background-color:var(--uikit-theme-dark-text-color-link);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contact-info-h5{padding:8px}
@@ -1 +0,0 @@
1
- .tui-contacts-list{flex:1 1 auto;min-width:360px;max-width:360px;display:flex;flex-direction:column;position:relative;text-align:initial;overflow:hidden scroll}[data-uikit-theme=light] .tui-contacts-list{color:var(--uikit-theme-light-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contacts-list{color:var(--uikit-theme-dark-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contacts-list .tui-contacts-title{display:flex;justify-content:space-between}.tui-contacts-list .tui-contacts-list-title{display:flex;padding:10px 20px;cursor:pointer}.tui-contacts-list .tui-contacts-list-icon{display:flex;align-items:center;justify-content:center;margin-right:20px}.tui-contacts-list .tui-contacts-list-icon .contacts-list-icon{font-size:12px}[data-uikit-theme=light] .tui-contacts-list .tui-contacts-list-icon .contacts-list-icon{color:var(--uikit-theme-light-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contacts-list .tui-contacts-list-icon .contacts-list-icon{color:var(--uikit-theme-dark-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contacts-list .tui-contacts-list-item{align-items:center;cursor:pointer;display:flex;padding:10px 20px;text-align:center;font-size:14px}.tui-contacts-list .tui-contacts-list-item .tui-contacts-list-item-card{display:flex;padding:0 10px;overflow:hidden;align-items:center;justify-content:space-between;flex:1}.tui-contacts-list .tui-contacts-list-item .tui-contacts-list-item-container{margin-left:10px}.tui-contacts-list .tui-contacts-list-item .text-ellipsis,.tui-contacts-list .tui-contacts-list-item .tui-contacts-list-item-name,.tui-contacts-list .tui-contacts-list-item .tui-contacts-list-item-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tui-contacts-list .tui-contacts-list-item .tui-contacts-list-item-text,.tui-contacts-list .tui-contacts-list-item .tui-contacts-list-btn-text{color:#999;font-size:12px;text-align:left}.tui-contacts-list .application-btn{width:30px;height:14px;padding:5px;border-radius:15px;font-size:10px;text-align:center;line-height:14px;letter-spacing:0;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #006eff;background:#006eff;color:#fff}.tui-contacts-list-h5{min-width:100%;width:100%;max-width:100%}
@@ -1 +0,0 @@
1
- .tui-contact-search{width:100%;position:relative;text-align:initial;align-items:center;justify-content:space-between}.tui-contact-search .tui-contact-search-input{margin:0 10px}.tui-contact-search .tui-contact-search-text{color:#147aff;font-size:14px}.tui-contact-search .tui-contact-search-item{position:absolute;margin:10px 20px;display:flex;align-items:center}[data-uikit-theme=light] .tui-contact-search .tui-contact-search-item{color:var(--uikit-theme-light-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}[data-uikit-theme=dark] .tui-contact-search .tui-contact-search-item{color:var(--uikit-theme-dark-text-color-primary);transition:color .3s ease-out,border-color .3s ease-out,background-color .3s ease-out}.tui-contact-search .tui-contact-search-item .search-item-name{padding-left:10px}
@@ -1 +0,0 @@
1
- /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:after,*:before{box-sizing:border-box}ul,li{list-style:none;padding:0;margin:0}picture,img,video,canvas,svg{display:block;max-width:100%}img{max-width:100%;height:auto;vertical-align:middle;image-rendering:-webkit-optimize-contrast;aspect-ratio:attr(width)/attr(height);display:inline-block;-webkit-user-drag:none;-webkit-user-select:none;user-select:none}img:not([src],[srcset]){visibility:hidden}@font-face{font-family:iconfont;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI8FU4xAAABjAAAAGBjbWFwE+OdSQAAAnQAAAPIZ2x5Zsl1roUAAAaEAAAU5GhlYWQqZyapAAAA4AAAADZoaGVhB94D7QAAALwAAAAkaG10eIiNAAAAAAHsAAAAiGxvY2FlKl8uAAAGPAAAAEZtYXhwATMAjAAAARgAAAAgbmFtZRCjPLAAABtoAAACZ3Bvc3RnIR2cAAAd0AAAAZcAAQAAA4D/gABcBEoAAAAABAAAAQAAAAAAAAAAAAAAAAAAACIAAQAAAAEAALhoKi1fDzz1AAsEAAAAAADjo/FTAAAAAOOj8VMAAP/oBAADHgAAAAgAAgAAAAAAAAABAAAAIgCAAAcAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQEBAGQAAUAAAKJAswAAACPAokCzAAAAesAMgEIAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOYA610DgP+AAAAD3ACAAAAAAQAAAAAAAAAAAAAAAAACBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAESgAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAwAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABEAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAUAAAADAAAALAAAAAQAAAIsAAEAAAAAASYAAwABAAAALAADAAoAAAIsAAQA+gAAACoAIAAEAArmAeYN5g/mGOYg5iPmNOZA5mLmc+aE5ojmjecO5xjnRufZ6DnoYOtd//8AAOYA5gXmD+YY5iDmI+Yz5kDmYuZz5oPmiOaN5w7nGOdG59noOehg61v//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAqACwAPAA8ADwAPAA8AD4APgA+AD4AQABAAEAAQABAAEAAQABAAEAAAAAMACEAIAAfABoAGwAcABgAGQAXABYAEAAFAAcABgAOAA8ADQARAAQAAQACAAoAAwAJABMACAAVABIACwAUAB0AHgAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAABnAAAAAAAAAAhAADmAAAA5gAAAAAMAADmAQAA5gEAAAAhAADmBQAA5gUAAAAgAADmBgAA5gYAAAAfAADmBwAA5gcAAAAaAADmCAAA5ggAAAAbAADmCQAA5gkAAAAcAADmCgAA5goAAAAYAADmCwAA5gsAAAAZAADmDAAA5gwAAAAXAADmDQAA5g0AAAAWAADmDwAA5g8AAAAQAADmGAAA5hgAAAAFAADmIAAA5iAAAAAHAADmIwAA5iMAAAAGAADmMwAA5jMAAAAOAADmNAAA5jQAAAAPAADmQAAA5kAAAAANAADmYgAA5mIAAAARAADmcwAA5nMAAAAEAADmgwAA5oMAAAABAADmhAAA5oQAAAACAADmiAAA5ogAAAAKAADmjQAA5o0AAAADAADnDgAA5w4AAAAJAADnGAAA5xgAAAATAADnRgAA50YAAAAIAADn2QAA59kAAAAVAADoOQAA6DkAAAASAADoYAAA6GAAAAALAADrWwAA61sAAAAUAADrXAAA61wAAAAdAADrXQAA610AAAAeAAAAAABKAHwAwAEUAcgCPgKQAtoDKgOEA8wEGgS8BUQF0AYqBm4GpgcSB2IH5AgQCFQIggjYCToJgAm6Cc4J4gn2CgoKcgAAAAMAAP/0A4wDDAAPAB8AMAAABSEiJjURNDYzITIWFREUBgM0JiMhIgYVERQWMyEyNjUlBiIvASY0NjIfATc2MhYUBwNK/WwbJycbApQbJycbCQj9jggJCQgCcggJ/osHIAeEChQdB23xChoUCgwnGwKUGycnG/1sGycCxQgJCQj9jggJCQieCgqEBx4TCm3xChQdBwACAAD/9AOMAwwADwAfAAAFISImNRE0NjMhMhYVERQGAzQmIyEiBhURFBYzITI2NQNK/WwbJycbApQbJycbCQj9jggJCQgCcggJDCcbApQbJycb/WwbJwLFCAkJCP2OCAkJCAAAAgAAAAADgQMBABQAKQAAATIXFhcWFAcGBwYiJyYnJjQ3Njc2NyIHBgcGFBcWFxYyNzY3NjQnJicmAgBRRkMoKSkoQ0aiRkMoKSkoQ0ZRaFpXMzQ0M1da0FpXMzQ0M1daAqspKENGokZDKCkpKENGokZDKClVNDNXWtBaVzM0NDNXWtBaVzM0AAIAAP/zA40DDQAdADIAAAEnJiIGFB8BBwYUFjI/ARcWMjY0LwE3PgEuAgYHASYnJjc+ATc2Fx4BFxYHDgEHBicmAgBaDSMZDFtbDBkjDVpaDSMZDFtbCAYGEBYWCf6WSRsZGRuTZWFhZZMbGRkbk2VhYWUBvFsMGSMNWloNIxkMW1sMGSMNWloJFhYQBgYI/llKZWFhZZMbGRkbk2VhYWWTGxkZGwAAAAcAAP/0A2QDDAALACUAPwBbAGcAcwB/AAABIgYUFjsBMjY0JiM1MhYXMxYXFgcRFgcGIyEuATURJjY3Mz4BMxcjIiYnIyIGFxEGFhchMjc2JxE2JyYrAQ4BNzIWFREUBisBNTMyNjURNCYjISIGHQEjNTQ2MwMyFhQGKwEiJjQ2MyUyFhQGIyEiJjQ2MyUyFhQGIyEiJjQ2MwF7BAYGBJMEBgYEFiEGVicSDwIDEBIn/lAvJgErLEwGIhWTkxAbCVUVDAEBChcBrwoDBQEBBQILXwkb/x0qKh1OTgcKCgf+1QcLNSkeOQsPDwugCxAPDAFACxAQC/7ACxAPDAFACxAQC/7ACxAPDAKWBggGBggGNRoUARgWIf39IRgcAismAgQlKwEUGn4ODQwP/fsSCwEECRECBhAHAw0Ovyod/dMdKjULBwItBwoKBwYGHSr+LxAWDw8WEGoPFhAPFw9qDxYQEBYPAAAAAAMAAP/wA54DHgAUACkASQAAATIXFhcWFAcGBwYiJyYnJjQ3Njc2FyIHBgcGFBcWFxYyNzY3NjQnJicmEzY3NicuAScmBwYHBh4BMjc2NzYXHgEXFgcGBwYUHgECAG1dWjU3NzVaXdpdWjU3NzVaXW1MQUAlJiYlQEGYQUAlJiYlQEHPTRsaGhuaaWVlaU0RASIxEjZJR0dJbBMSEhM2ESMxAxA3NVpd2l1aNTc3NVpd2l1aNTd4JiVAQZhBQCUmJiVAQZhBQCUm/c1NaWVlaZobGhobTRIxIxE2ExISE2xJR0dJNhIxIgEAAAAAAwAA//QDjAMMABQAIAAzAAABIgcGBwYUFxYXFjI3Njc2NCcmJyYDIi4BND4BMzIWFAY3MQ4BBxcjNy4BLwEmNjsBMhYHAgBrXVk1NjY1WV3WXVk1NjY1WV1rDBUMDBUMEhkZGAEYEQUJBBAYAQoBGRIVEhkBAww2NVld1l1ZNTY2NVld1l1ZNTb9mAwUGBULGiQZrxEYAgEBAhgR3BIaGhIAAAAEAAAAAAPFAtMACAAPAB8ALwAAARQGIiY0NjIWBRUhNTcXPwEhIgYVERQWMyEyNjURNCYXERQGIyEiJjURNDYzITIWAY8xRzIyRzEBxP2Sjkbi4v0+BggIBgLCBgkJQSke/T4dKSkdAsIeKQINIzIyRzExzcZVjUfigAkG/egGCQkGAhgGCQ/96B4pKR4CGB4pKQAAAwAAAAADigLSAAgAGQAyAAABMjY0JiIGFBYTISIGFREUFjMhMjY1ETQmIwMmIyIPAQYjIi8CJiIHAxE+ATMhMhYXEwLFIzExRjExt/1OFB0dFAKyFB0dFLYJDQoNIQsJCwgIXgwjDN4BDQkCdAkNAQEBuDJGMTFGMgEaHhT9wBQdHRQCQBQd/qULChwIBwdnDQ7+9AHKCQsMCf42AAAAAAcAAAAAA6gDAAADAAQABwASACEALQA5AAABNCcxJxcxLwE0Ji8BLgErARUzJSEiBhURFBYzITI2NREhEyEiJjQ2MyEyFhQGJzIWFAYjISImNDYzA6cBAwMDeAsFiQIOCCXW/wD+2hQcHBQB8hUf/wCV/n8IDAwIAYEIDAwICAwMCP5/CAwMCAGgBQYTExOZBw0ChAUK1dUdFP1hFBwcFAHQ/oANEQ0NEQ3VDRANDRANAAAAAAMAAAAAA4oCtgAPABgALAAAASEiBhURFBYzITI2NRE0JgUyFhQGIiY0NgEGIyEiJjQ/AT4BHwE3PgEfARYGA279JAsREQsC3AsREf3uFyEhLiEhAdsCA/20AwQBlgIGAliLAgYCywIBArUQDP3ODBAQDAIyDBB+IS8hIS8h/oACBAUDsQIBAmmlAgEC8AIGAAYAAAAAA3YC9gAJABMAFwAbAB8AMAAAASE1NDYzITIWHQERFAYjISImNRE3FzMnMxczJzMXMycDPgEmLwEmIyIGHQEUFx4BNwN1/RYfFgKAFh8fFv2AFh+gNTY2azU2Nms1NjYwCAkHCrQGBgsQAwUVCgJVaxYfHxag/iAWHx8WAeCga2tra2tr/lgEEhUFWgMQC7QHBQoHBQAAAAIAAAAAA2oDCQBYAGwAAAEOAyMiJicGIyImJyYnJjc2Nz4CFzIXFh8BBwYeARcWNjc+Ajc2Jy4CIyIGBwYHBgcGHgIzMjc2NzY3Fw4BBwYjIicmJy4BNzY3PgIyFx4BFxYFBhYzMjc+ATc2PwEmIyIGBwYHBgNmAhYsRTAiNA8oRB0yDxIGBwQFEhIzRSYYEyEcGhUCBQwIDRoKEBYNAQQODT5eQj5kIyUTFQIEH0BgPxETJCMQDg8PJRQoKlNBPy0sKgMDHBpihKQ+PFcSFP5hBRodCAYKEAgJBhAMDRkjDQ0HBwGmLFRCKR0bNxsYHB8mJzEtKzshAQMHEhHyERYNAwQGCAwrOiI7OjZMKTIrLjg+QUpvSyUCBAoFBkQKDgQJGBYxL4xdUUxFbDoZGWE/QX41NwIEDg0QErsEFBMWGRwAAAUAAP/9A4MDAwAVACIALwBEAFkAACUiLwEuAT4CFh8BNz4BHgIGDwEGJyImNRE0NjIWFREUBgciJj0BNDYyFh0BFAYHIicmJyY0NzY3NjIXFhcWFAcGBwYDIgcGBwYUFxYXFjI3Njc2NCcmJyYCAA8KaQcFBQ0TEgZRUQYSEw0FBQdpCg8PFBQeFBQPDxQUHhQUD2laWDM1NTNYWtJaWDM1NTNYWmlWSkcqKysqR0qsSkcqKysqR0q/CmkHEhIOBQUHUFAHBQUOEhIHaQo0FQ8BBw8UFA/++Q8VNBQPNQ4VFQ41DxTCNTNYWtJaWDM1NTNYWtJaWDM1Ar8rKkdKrEpHKisrKkdKrEpHKisAAAAABAAAAAADjALwACAANwBHAFcAACUjNwcnJi8BJi8BEzY/ATY/AQUWHwEWHwEDBg8BBg8BJScHNwU2NzY3ESYnJichBgcGBxEWFxYXEzMVBwYHBgcGFTMVIzU+ASUzFQcGBwYHBhUzFSM1PgEBZEgBQAUkHAMYCAEBCBgDHCUHAkkiHAMaBwEBCBgDHCUI/teQAXoBPA8MCgQECgwP/coPCwsEBAoMD6A3DRAMEgsMUqQOOQEhNg0PDRIKDVKjDjgJZgEBCBkDHSUHAa0kHQQZCAEBCRcEHSYG/lMlHAQZCAEBSVZVAQQKDBABng8MCgUECg0Q/mMQDAoEAYs0CAoLERAUFICaKUIVNAgKCxEQFBSAmilCAAAAAAIAAAAAA3cC+AAYAD8AAAkBBiImNDcBIyImNDY7ATIeAR0BFAYiJjUVNDYyFh0BFA4BIyEiLgE1ETQ+ATsBMhYUBisBIgYVERQWMyEyNjUDLP6rCx8WCwFXjhAWFhCjHTAcFh8WFh8WHDAd/eQdMBwcMB3FDxYWD8UMEhIMAhwMEgJ1/q0LFh8LAVUWHxYcMB2jEBYWELQPFhYPxR0wHBwwHQIcHTAcFh8WEgz95AwSEgwAAAEAAAAAA5MDAQArAAABITc2NCYiDwEGFB8BFjI2NC8BITIeAgcOAiMhIgYUFjMhFj4BNzYuAgKb/l6DCxchC8QMDMQLIRcLfQGcIj8uFwIEMEsr/qAQFxcQAV8+bkYHBSBFXwI7ggwhFwzDDCELxAwXIQx+HDJAIixGKBchFwE6ZT40YU0qAAAFAAD/+wNuAvoADQARABUAGQAdAAABEyETMwMOASMhIiYnAxcRIxEzESMRJSEVISUVITUBSR8BNyBJIAIqHf7JHCoCIelJz0n+bQLc/SQCB/7bAgb+PgHC/jkcKCgcAccX/qsBVf6rAVWRScNJSQAAAwAA//QDJAMMADEAQgBOAAABNCYrASIGFRQOASIuATU0JisBIgYVFBceARcVIyIGHQEUFjMhMjY9ATQmKwE1PgE3NgUyPgE9ATQuASIOAR0BFB4BAzQ2MhYdARQGIiY1AyMEAzUDBDxnemc8BAM1AwQiIXVIgQkMAwIBaAIDDAmESHchI/7dKUUoKEVSRSgoRSoxRDExRDEBswMEBAM9Zzw8Zz0DBAQDSUA+UQlaEQwfAwUFAx8MEVoHUT9ATChEKMYoRSgoRSjGKEQoAVoiLy8ixiEwMCEAAgAA/+gDpwMXABIALAAACQEeAQcGBwEGLgE3EzYnAyY+AQcOARcTMzIWFAYrAQMGHgE3ATY3NTYmJwEmAQcCaCEWEA0a/ZchRSAKVgICVAsiRRAKCQNSzw0TEw3PUwMJEgkCagcEBAYJ/ZgJAwb+yBFFIRoN/sgQF0AiARoFBAEaI0EURwMRCv7vExoT/u8JEgYFATcDBwEJEgUBOAUAAAIAAAAAA8AC4AAVAF0AACUjNTQmKwEiBh0BIyIGHwEWMj8BNiYTLgEnJiIHDgEHDgIVFB4BOwEyNj0BNCYrASIuAjc+AT8CPgE3NjIXHgEfAh4BFRQOAisBIgYdARQWOwEyPgE1NC4BAnBKBQM8AwVKBQQDcAIIAnADBLYWWjs9hj07WRcrQyc2XDYoAwUFAygZLiQSAQEzKCYODS0eP5o/Hi0NDiYpMxMjLRkoAwUFAyg2XDYmRL7yAwUFA/IJBI4DA44ECQFTPV0aGxsaXT0LOFAuNlw2BQM8AwUTJS8ZKUALCiUiORYsLBU6IiUKC0MqGS0jEwUDPAMFNlw2LlA4AAAAAgAAAAADiwL2AAwAGQAAEzQ2MyEyFhQGIyEiJgEiJjURNDYyFhURFAagEw0Cqw0TEw39VQ0TAXUNExMbEhIBgA0TExoTE/6YEg4Cqg4SEg79Vg4SAAAAAAIAAAAAA3wDAAAcACkAACUyNjcXFjI+AS8BPgE1NCcmJyYiBwYHBhQXFhcWNyIuATQ+ATIeARQOAQG6MVwovw0nGQEOvR8gKilGSadIRykqKilGSVNBcEFBcINwQUFwkx4cvw0aJw2+KWAzVEhGKioqKkZIqEhGKStDQnCDb0JCb4NwQgAAAAACAAAAAAPOArwADAAZAAATNjIfARYUBiIvASY0JRYUBwEGIiY0NwE2MqMSMBLsESIxEe0RAyoREf4nETEjEQHZEjABvxER7BExIhHsETH9EjAS/ikRIjERAdgRAAQAAAAAA5MCSQAMABkAJgAzAAATNjIfARYUBiIvASY0BTYyHwEWFAYiLwEmNCUWFAcBBiImNDcBNjIXFhQHAQYiJjQ3ATYyfAwhDKAMGCEMoAwBJQsiC3kMGCEMeAwBDQwM/r8MIRcLAUEMIf0LC/6/DCEYDAFBDCEBnAwMoAsiFwygCyIdDAx4CyIXDHgLItMLIgv+wAwXIgsBQAwMCyIL/sAMFyILAUAMAAACAAAAAAOAAnoAJABBAAABFAYHDgEUFxYXFh0BFA4CIyEiJyYnJjcRND4CMyEyFx4BBzcRFAYjIicuAScmJyYnLgI0PgI3Njc2NzIWFQKeEAcJDwcNFAcSGyAO/pgTESIOBwENGCETAWcmHA0PAeEQEQgHCREJBgUPDhQmHiAtMREGCwoKFAsB3gMUCw0cIA4ZFAgCTQwgHBIHDyIREwE8Dx8bERoNIhIF/rIQGQQFCwYEBg0OFi82LDg2LgwEBwUBFhAABgAAAAADgwHcAAAADQAOABsAHAApAAATIxQeATI+ATQuASIOAQUjFB4BMj4BNC4BIg4BBSMUHgEyPgE0LgEiDgHBRBIgJR8TEx8lIBIBg0QSICQgEhIgJCASAYNFEx8lIBISICUfEwGXEx8TEx8lIBISIBITHxMTHyUgEhIgEhMfExMfJSASEiAAAAABAAD/+wOFAwUAIgAAEzc2Mh8BFhQPARYXFhc3NjIfARYUDwEGDwEmJyYnJic0NjejTg8tD34PDzgkP0VaMhAsD3QPD1QNEwjtvF80OAkODQKoTBAQgxAuEDpQPUIgNREReBAuEVoOAwECtltlbH4SIAwAAAEAAAAAAr8C9wAFAAAJAQcJARcBfQFCR/5tAZNHAYD+1UsBdgF3TAABAAAAAAN3ApwABQAACQEnCQEHAgD+1UsBdgF3TAID/r5HAZP+bUcAAQAAAAADHAL3AAUAAAkBNwkBJwKD/r5HAZP+bUcBgAErS/6K/olMAAEAAAAAA3cCaAAFAAAJARcJATcCAAErS/6K/olMASYBQUb+bQGTRgAEAAAAAANvAvgAFAAgADAAQwAAASIHBgcGFBcWFxYyNzY3NjQnJicmAzQ2MhYdARQGIiY1JzQ+ATIeAR0BFA4BIi4BNQUOASImJyY+ARYXHgEyNjc2HgEB+2RXVDEzMzFUV8lWVDEzMzFUVhQXIRcXIRfvCxIVEwsLExUSCwFcImNvYyIGAxEVBxpNVk4aCR8MAvgzMVRXyVZUMTMzMVRWyVdUMTP+5xAYGBA1ERcXETULEgsLEgs1CxILCxILoC0xMSsJFQ0CCCImJyINBB0AAAASAN4AAQAAAAAAAAATAAAAAQAAAAAAAQAIABMAAQAAAAAAAgAHABsAAQAAAAAAAwAIACIAAQAAAAAABAAIACoAAQAAAAAABQALADIAAQAAAAAABgAIAD0AAQAAAAAACgArAEUAAQAAAAAACwATAHAAAwABBAkAAAAmAIMAAwABBAkAAQAQAKkAAwABBAkAAgAOALkAAwABBAkAAwAQAMcAAwABBAkABAAQANcAAwABBAkABQAWAOcAAwABBAkABgAQAP0AAwABBAkACgBWAQ0AAwABBAkACwAmAWNDcmVhdGVkIGJ5IGljb25mb250aWNvbmZvbnRSZWd1bGFyaWNvbmZvbnRpY29uZm9udFZlcnNpb24gMS4waWNvbmZvbnRHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AGkAYwBvAG4AZgBvAG4AdABSAGUAZwB1AGwAYQByAGkAYwBvAG4AZgBvAG4AdABpAGMAbwBuAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG4AZgBvAG4AdABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjAA9jaGVja2JveGNoZWNrZWQIY2hlY2tib3gFcmFkaW8FY2xvc2UEY29weQdsb2FkaW5nBlNoYXBleAVpbWFnZQZpbWFnZTEEZmlsZQppbWFnZS1maWxsBXZpZGVvDk5vdGljZV9NZW50aW9uEWFycm93LWRvd24tY2lyY2xlB3lpbnlvbmcHemh1YW5mYQZjaGVodWkGZGVsZXRlBmF1ZGlvMQdzZW5kaW5nDmNsb3VkLWRvd25sb2FkA2FkZAZzZWFyY2gJQ2hlY2ttYXJrCmEtQ2hlY2thbGwFYXVkaW8EbW9yZQV2b2ljZRBqaWFudG91LXlvdS1jb3B5FWppYW50b3UteW91LWNvcHktY29weQtqaWFudG91LXlvdQtqaWFudG91LXhpYQRmYWNlAAAA) format("truetype")}.iconfont{font-family:iconfont,Arial,sans-serif!important;font-size:20px;font-style:normal;line-height:1;vertical-align:bottom;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}
@@ -1,97 +0,0 @@
1
- import React, { PropsWithChildren, useMemo, useState } from 'react';
2
- import { useUIKit } from '@tencentcloud/uikit-base-component-react';
3
- import {
4
- TUIContactContextProvider,
5
- TUIContactContextValue,
6
- } from '../../context/ContactContext';
7
- import { isH5 } from 'tuikit-atomicx-react';
8
- import { useUIManagerState } from '../../states';
9
- import useTUIContact from './hooks/useTUIContact';
10
- import { ContactList } from './ContactList/ContactList';
11
- import { ContactSearch } from '../ContactSearch/ContactSearch';
12
- import { Icon, IconTypes } from '../Icon';
13
- import './index.scss';
14
-
15
- export function UnMemoizedContact<T>(
16
- props: PropsWithChildren<T>,
17
- ): React.ReactElement {
18
- const { children } = props;
19
- const { t } = useUIKit();
20
- const { setActiveContact } = useUIManagerState('TUIContact');
21
- const [isShowAddFriend, setShowAddFriend] = useState(false);
22
- const addFriend = () => {
23
- setActiveContact();
24
- setShowAddFriend(true);
25
- };
26
- const addFriendBack = () => {
27
- setActiveContact();
28
- setShowAddFriend(false);
29
- };
30
- const {
31
- friendList,
32
- blockList,
33
- blocklistProfile,
34
- friendApplicationList,
35
- isShowContactList,
36
- setShowContactList,
37
- } = useTUIContact();
38
-
39
- const TUIContactValue: TUIContactContextValue = useMemo(
40
- () => ({
41
- friendList,
42
- blockList,
43
- blocklistProfile,
44
- friendApplicationList,
45
- isShowContactList,
46
- setShowContactList,
47
- }),
48
- [
49
- friendList,
50
- blocklistProfile,
51
- friendApplicationList,
52
- isShowContactList,
53
- setShowContactList,
54
- ],
55
- );
56
- return (
57
- <TUIContactContextProvider value={TUIContactValue}>
58
- {children || (
59
- <div className={`tui-contacts ${isH5 ? 'tui-contacts-h5' : ''} `}>
60
- {!isShowAddFriend && (
61
- <>
62
- <div className="tui-contacts-header">
63
- <div className="tui-contact-input">
64
- <ContactSearch />
65
- </div>
66
- <Icon
67
- onClick={addFriend}
68
- type={IconTypes.ADDFRIEND}
69
- width={24}
70
- height={24}
71
- />
72
- </div>
73
- <ContactList />
74
- </>
75
- )}
76
- {isShowAddFriend && (
77
- <>
78
- <div className="tui-contacts-add-header">
79
- <Icon
80
- onClick={addFriendBack}
81
- type={IconTypes.BACK}
82
- width={9}
83
- height={16}
84
- />
85
- <div className="tui-contacts-add-header-title">
86
- {t('TUIContact.Add Friend')}
87
- </div>
88
- </div>
89
- <ContactSearch />
90
- </>
91
- )}
92
- </div>
93
- )}
94
- </TUIContactContextProvider>
95
- );
96
- }
97
- export const Contact = React.memo(UnMemoizedContact);
@@ -1,36 +0,0 @@
1
- import type {
2
- PropsWithChildren,
3
- } from 'react';
4
- import React from 'react';
5
- import { useUIManagerState } from '../../../states';
6
- import { isH5 } from 'tuikit-atomicx-react';
7
- import { AddFriendInfo } from './addFriendInfo';
8
- import { BlockInfo } from './blockInfo';
9
- import { FriendApplicationInfo } from './friendApplication';
10
- import { FriendInfo } from './friendInfo';
11
- import { GroupInfo } from './groupInfo';
12
- import './index.scss';
13
-
14
- interface TUIContactInfoProps {
15
- className?: string | undefined;
16
- showChats?: () => void;
17
- }
18
- export function UnMemoizedContactInfo<T extends TUIContactInfoProps>(
19
- props: PropsWithChildren<T>,
20
- ): React.ReactElement {
21
- const { showChats } = props;
22
- const { contactData } = useUIManagerState('TUIContact');
23
- if (!contactData?.type) {
24
- return (<> </>);
25
- }
26
- return (
27
- <div className={`tui-contact-info ${isH5 ? 'tui-contact-info-h5' : ''} `}>
28
- {contactData?.type === 'addFriend' && (<AddFriendInfo profile={contactData?.data} />)}
29
- {contactData?.type === 'friend' && (<FriendInfo showChats={showChats} friend={contactData?.data} />)}
30
- {contactData?.type === 'block' && (<BlockInfo profile={contactData?.data} />)}
31
- {contactData?.type === 'group' && (<GroupInfo showChats={showChats} group={contactData?.data} />)}
32
- {contactData?.type === 'friendApplication' && <FriendApplicationInfo application={contactData?.data} />}
33
- </div>
34
- );
35
- }
36
- export const ContactInfo = React.memo(UnMemoizedContactInfo);
@@ -1,88 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { Profile } from '@tencentcloud/chat';
3
- import { useUIKit } from '@tencentcloud/uikit-base-component-react';
4
- import useContactInfo from './hooks/useContactInfo';
5
- import { BasicInfo } from './basicInfo';
6
- import { DivWithEdit } from '../../DivWithEdit';
7
-
8
- interface Props {
9
- profile: Profile;
10
- }
11
- export function UnMemoizedAddFriendInfo<T extends Props>(
12
- props: T,
13
- ): React.ReactElement {
14
- const { profile } = props;
15
- const { userID } = profile;
16
- const { t } = useUIKit();
17
- const [isEditName, setIsEditRemark] = useState('');
18
- const [remark, setRemark] = useState('');
19
- const [wording, setWording] = useState('');
20
- const [isSendedAdd, setIsSendAddFriend] = useState(false);
21
-
22
- const {
23
- addFriend,
24
- } = useContactInfo();
25
- const handleSetEditRemark = () => {
26
- setIsEditRemark('remark');
27
- };
28
-
29
- const addFriendHandler = async () => {
30
- const options = {
31
- userID,
32
- remark,
33
- wording,
34
- };
35
- await addFriend(options);
36
- setIsSendAddFriend(true);
37
- };
38
-
39
- const editText = (data?: any) => {
40
- setRemark(data?.value);
41
- setIsEditRemark('');
42
- };
43
-
44
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
45
- setWording(e.target.value);
46
- };
47
- return (
48
- <>
49
- <BasicInfo profile={profile} />
50
- {!isSendedAdd
51
- ? (
52
- <div className="tui-contact-info-content">
53
- <div className="content-item-wording">
54
- <p className="content-item-label">{t('TUIContact.Enter the verification info')}</p>
55
- <textarea className="content-item-wording-text" value={wording} onChange={(e: any) => { handleChange(e); }} />
56
- </div>
57
- <div className="content-item">
58
- <p className="content-item-label">{t('TUIContact.remark')}</p>
59
- <DivWithEdit
60
- name="remark"
61
- className="content-item-text"
62
- value={remark}
63
- type="text"
64
- toggle={handleSetEditRemark}
65
- isEdit={isEditName === 'remark'}
66
- confirm={editText}
67
- close={() => {
68
- setIsEditRemark('');
69
- }}
70
- />
71
- </div>
72
- <div className="content-btn-container">
73
- <div className="content-item-btn confirm-btn" role="button" tabIndex={0} onClick={addFriendHandler}>{t('TUIContact.Send application')}</div>
74
- </div>
75
- </div>
76
- )
77
- : (
78
- <div className="tui-contact-info-content">
79
- <div className="content-item">
80
- <p className="content-item-label">{t('TUIContact.verification info')}</p>
81
- <p className="content-item-text">{wording}</p>
82
- </div>
83
- </div>
84
- )}
85
- </>
86
- );
87
- }
88
- export const AddFriendInfo = React.memo(UnMemoizedAddFriendInfo);
@@ -1,52 +0,0 @@
1
- import React from 'react';
2
- import { TUIConversationService } from '@tencentcloud/chat-uikit-engine';
3
- import { useUIKit } from '@tencentcloud/uikit-base-component-react';
4
- import { defaultUserAvatar } from '../../../constant/avatar';
5
- import { useUIManagerState } from '../../../states';
6
- import { Avatar, isH5 } from 'tuikit-atomicx-react';
7
- import { Icon, IconTypes } from '../../Icon';
8
-
9
- import type { Profile } from '@tencentcloud/chat';
10
-
11
- interface Props {
12
- profile: Profile;
13
- }
14
- export function UnMemoizedBasicInfo<T extends Props>(
15
- props: T,
16
- ): React.ReactElement {
17
- const { profile } = props;
18
- const { t } = useUIKit();
19
- const {
20
- userID, nick, selfSignature, avatar,
21
- } = profile;
22
- const { setActiveContact } = useUIManagerState('TUIContact');
23
- const back = () => {
24
- TUIConversationService.switchConversation('');
25
- setActiveContact();
26
- };
27
- return (
28
- <div className="tui-contact-info-header">
29
- {isH5 && (
30
- <Icon
31
- width={9}
32
- height={16}
33
- type={IconTypes.BACK}
34
- onClick={back}
35
- />
36
- )}
37
- <div className="header-container">
38
- <div className="header-container-avatar">
39
- <Avatar size='xl' src={avatar || defaultUserAvatar} />
40
- <div className="header-container-name">{nick || userID}</div>
41
- </div>
42
- <div className="header-container-text">{`ID:${userID}`}</div>
43
- <div className="header-container-text">
44
- {t('TUIContact.Signature')}
45
- :
46
- {selfSignature || ''}
47
- </div>
48
- </div>
49
- </div>
50
- );
51
- }
52
- export const BasicInfo = React.memo(UnMemoizedBasicInfo);
@@ -1,45 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { useUIKit } from '@tencentcloud/uikit-base-component-react';
3
- import { useUIManagerState } from '../../../states';
4
- import { Switch } from '../../Switch';
5
- import { BasicInfo } from './basicInfo';
6
- import useContactInfo from './hooks/useContactInfo';
7
- import type { Profile } from '@tencentcloud/chat';
8
-
9
- interface Props {
10
- profile: Profile;
11
- }
12
- export function UnMemoizedBlockInfo<T extends Props>(
13
- props: T,
14
- ): React.ReactElement {
15
- const { profile } = props;
16
- const { contactData, setActiveContact } = useUIManagerState('TUIContact');
17
- const { t } = useUIKit();
18
- const [isAddToBlocklist, setIsAddToBlocklist] = useState(false);
19
-
20
- const {
21
- removeFromBlocklist,
22
- } = useContactInfo();
23
-
24
- useEffect(() => {
25
- setIsAddToBlocklist(true);
26
- }, [contactData]);
27
-
28
- const removeFromBlocklistHandler = async () => {
29
- await removeFromBlocklist(profile.userID);
30
- setIsAddToBlocklist(false);
31
- setActiveContact();
32
- };
33
- return (
34
- <>
35
- <BasicInfo profile={profile} />
36
- <div className="tui-contact-info-content">
37
- <div className="content-item">
38
- <p className="content-item-label">{t('TUIContact.block')}</p>
39
- <Switch className="content-item-text" onChange={removeFromBlocklistHandler} checked={isAddToBlocklist} />
40
- </div>
41
- </div>
42
- </>
43
- );
44
- }
45
- export const BlockInfo = React.memo(UnMemoizedBlockInfo);