= ({
function renderAddContact() {
return (
<>
-
+
= ({
{renderingUser?.phoneNumber
? formatPhoneNumberWithCode(phoneCodeList, renderingUser.phoneNumber)
- : lang('MobileHidden')}
+ : oldLang('MobileHidden')}
- {getUserStatus(lang, renderingUser!, userStatus)}
+ {getUserStatus(oldLang, renderingUser!, userStatus)}
+
+
+ {lang('EditUserNoteHint')}
+
{renderText(
- lang('NewContact.Phone.Hidden.Text', renderingUser?.firstName || ''),
+ oldLang('NewContact.Phone.Hidden.Text', renderingUser?.firstName || ''),
['emoji', 'simple_markdown'],
)}
@@ -163,10 +197,10 @@ const NewContactModal: FC = ({
checked={shouldSharePhoneNumber}
tabIndex={0}
onCheck={setShouldSharePhoneNumber}
- label={lang('lng_new_contact_share')}
+ label={oldLang('lng_new_contact_share')}
/>
- {renderText(lang('AddContact.SharedContactExceptionInfo', renderingUser?.firstName))}
+ {renderText(oldLang('AddContact.SharedContactExceptionInfo', renderingUser?.firstName))}
>
);
@@ -181,19 +215,19 @@ const NewContactModal: FC = ({
ref={inputRef}
value={phone}
inputMode="tel"
- label={lang('lng_contact_phone')}
+ label={oldLang('lng_contact_phone')}
tabIndex={0}
onChange={handlePhoneChange}
/>
@@ -205,7 +239,7 @@ const NewContactModal: FC = ({
return (
= ({
disabled={!canBeSubmitted}
onClick={handleSubmit}
>
- {lang('Done')}
+ {oldLang('Done')}
@@ -236,10 +270,15 @@ const NewContactModal: FC = ({
export default memo(withGlobal(
(global, { userId }): Complete => {
const user = userId ? selectUser(global, userId) : undefined;
+ const userFullInfo = userId ? selectUserFullInfo(global, userId) : undefined;
+ const contactNoteLimit = global.appConfig?.contactNoteLimit || DEFAULT_MAX_NOTE_LENGTH;
+
return {
user,
userStatus: userId ? selectUserStatus(global, userId) : undefined,
phoneCodeList: global.countryList.phoneCodes,
+ contactNoteLimit,
+ noteText: userFullInfo?.note?.text,
};
},
)(NewContactModal));
diff --git a/src/components/right/management/ManageUser.tsx b/src/components/right/management/ManageUser.tsx
index 5e9bb2ea9..171558b8b 100644
--- a/src/components/right/management/ManageUser.tsx
+++ b/src/components/right/management/ManageUser.tsx
@@ -19,9 +19,11 @@ import {
selectUser,
selectUserFullInfo,
} from '../../../global/selectors';
+import { DEFAULT_MAX_NOTE_LENGTH } from '../../../limits';
import useFlag from '../../../hooks/useFlag';
import useHistoryBack from '../../../hooks/useHistoryBack';
+import useLang from '../../../hooks/useLang';
import useOldLang from '../../../hooks/useOldLang';
import Avatar from '../../common/Avatar';
@@ -34,6 +36,7 @@ import InputText from '../../ui/InputText';
import ListItem from '../../ui/ListItem';
import SelectAvatar from '../../ui/SelectAvatar';
import Spinner from '../../ui/Spinner';
+import TextArea from '../../ui/TextArea';
import './Management.scss';
@@ -49,6 +52,8 @@ type StateProps = {
isMuted?: boolean;
personalPhoto?: ApiPhoto;
notPersonalPhoto?: ApiPhoto;
+ noteText?: string;
+ contactNoteLimit: number;
};
const ERROR_FIRST_NAME_MISSING = 'Please provide first name';
@@ -62,9 +67,12 @@ const ManageUser: FC = ({
isActive,
personalPhoto,
notPersonalPhoto,
+ noteText,
+ contactNoteLimit,
}) => {
const {
updateContact,
+ updateContactNote,
deleteContact,
closeManagement,
uploadContactProfilePhoto,
@@ -76,7 +84,8 @@ const ManageUser: FC = ({
const [isProfileFieldsTouched, markProfileFieldsTouched, unmarkProfileFieldsTouched] = useFlag();
const [error, setError] = useState();
const [isNotificationsTouched, markNotificationsTouched, unmarkNotificationsTouched] = useFlag();
- const lang = useOldLang();
+ const oldLang = useOldLang();
+ const lang = useLang();
useHistoryBack({
isActive,
@@ -85,9 +94,11 @@ const ManageUser: FC = ({
const currentFirstName = user ? (user.firstName || '') : '';
const currentLastName = user ? (user.lastName || '') : '';
+ const currentNote = noteText || '';
const [firstName, setFirstName] = useState(currentFirstName);
const [lastName, setLastName] = useState(currentLastName);
+ const [note, setNote] = useState(currentNote);
const [isNotificationsEnabled, setIsNotificationsEnabled] = useState(!isMuted);
useEffect(() => {
@@ -103,7 +114,8 @@ const ManageUser: FC = ({
useEffect(() => {
setFirstName(currentFirstName);
setLastName(currentLastName);
- }, [currentFirstName, currentLastName, user]);
+ setNote(currentNote);
+ }, [currentFirstName, currentLastName, currentNote]);
useEffect(() => {
if (progress === ManagementProgress.Complete) {
@@ -127,6 +139,11 @@ const ManageUser: FC = ({
markProfileFieldsTouched();
}, []);
+ const handleNoteChange = useCallback((e: ChangeEvent) => {
+ setNote(e.target.value);
+ markProfileFieldsTouched();
+ }, []);
+
const handleNotificationChange = useCallback((e: ChangeEvent) => {
setIsNotificationsEnabled(e.target.checked);
markNotificationsTouched();
@@ -136,24 +153,36 @@ const ManageUser: FC = ({
const handleProfileSave = useCallback(() => {
const trimmedFirstName = firstName.trim();
const trimmedLastName = lastName.trim();
+ const trimmedNote = note.trim();
if (!trimmedFirstName.length) {
setError(ERROR_FIRST_NAME_MISSING);
return;
}
+ firstNameRef.current?.blur();
+ lastNameRef.current?.blur();
+ noteRef.current?.blur();
+
updateContact({
userId,
firstName: trimmedFirstName,
lastName: trimmedLastName,
});
+ if (trimmedNote !== currentNote) {
+ updateContactNote({
+ userId,
+ note: { text: trimmedNote, entities: [] },
+ });
+ }
+
if (isNotificationsTouched) {
updateChatMutedState({
chatId: userId, mutedUntil: isNotificationsEnabled ? UNMUTE_TIMESTAMP : MUTE_INDEFINITE_TIMESTAMP,
});
}
- }, [firstName, isNotificationsEnabled, isNotificationsTouched, lastName, userId]);
+ }, [currentNote, firstName, isNotificationsEnabled, isNotificationsTouched, lastName, note, userId]);
const handleDeleteContact = useCallback(() => {
deleteContact({ userId });
@@ -161,6 +190,10 @@ const ManageUser: FC = ({
closeManagement();
}, [closeDeleteDialog, closeManagement, deleteContact, userId]);
+ const firstNameRef = useRef();
+ const lastNameRef = useRef();
+ const noteRef = useRef();
+
const inputRef = useRef();
const isSuggestRef = useRef(false);
@@ -191,6 +224,7 @@ const ManageUser: FC = ({
const canSetPersonalPhoto = !isUserBot(user) && user.id !== SERVICE_NOTIFICATIONS_USER_ID;
const isLoading = progress === ManagementProgress.InProgress;
+ const noteSymbolsLeft = contactNoteLimit - note.length;
return (
@@ -205,24 +239,37 @@ const ManageUser: FC
= ({
/>
+
+ {lang('EditUserNoteHint')}
= ({
{canSetPersonalPhoto && (
- {lang('UserInfo.SuggestPhoto', user.firstName)}
+ {oldLang('UserInfo.SuggestPhoto', user.firstName)}
- {lang('UserInfo.SetCustomPhoto', user.firstName)}
+ {oldLang('UserInfo.SetCustomPhoto', user.firstName)}
{personalPhoto && (
= ({
ripple
onClick={openResetPersonalPhotoDialog}
>
- {lang('UserInfo.ResetCustomPhoto')}
+ {oldLang('UserInfo.ResetCustomPhoto')}
)}
-
{lang('UserInfo.CustomPhotoInfo', user.firstName)}
+
{oldLang('UserInfo.CustomPhotoInfo', user.firstName)}
)}
- {lang('DeleteContact')}
+ {oldLang('DeleteContact')}
@@ -267,7 +314,7 @@ const ManageUser: FC = ({
isShown={isProfileFieldsTouched}
onClick={handleProfileSave}
disabled={isLoading}
- ariaLabel={lang('Save')}
+ ariaLabel={oldLang('Save')}
>
{isLoading ? (
@@ -278,16 +325,16 @@ const ManageUser: FC = ({
@@ -308,9 +355,11 @@ export default memo(withGlobal(
const isMuted = chat && getIsChatMuted(chat, selectNotifyDefaults(global), selectNotifyException(global, chat.id));
const personalPhoto = userFullInfo?.personalPhoto;
const notPersonalPhoto = userFullInfo?.profilePhoto || userFullInfo?.fallbackPhoto;
+ const noteText = userFullInfo?.note?.text;
+ const contactNoteLimit = global.appConfig?.contactNoteLimit || DEFAULT_MAX_NOTE_LENGTH;
return {
- user, progress, isMuted, personalPhoto, notPersonalPhoto,
+ user, progress, isMuted, personalPhoto, notPersonalPhoto, noteText, contactNoteLimit,
};
},
)(ManageUser));
diff --git a/src/components/right/management/Management.scss b/src/components/right/management/Management.scss
index 50c80f809..31332db34 100644
--- a/src/components/right/management/Management.scss
+++ b/src/components/right/management/Management.scss
@@ -97,12 +97,17 @@
}
}
+ .section-edit-info,
.section-info {
padding: 0 1rem;
font-size: 0.875rem;
color: var(--color-text-secondary);
}
+ .section-edit-info {
+ margin-top: -0.875rem;
+ }
+
.invite-link {
padding: 0 1rem;
}
diff --git a/src/global/actions/api/users.ts b/src/global/actions/api/users.ts
index 275b783bc..145e2278e 100644
--- a/src/global/actions/api/users.ts
+++ b/src/global/actions/api/users.ts
@@ -239,7 +239,7 @@ addActionHandler('openChatRefundModal', async (global, actions, payload): Promis
addActionHandler('updateContact', async (global, actions, payload): Promise => {
const {
- userId, firstName, lastName, shouldSharePhoneNumber,
+ userId, firstName, lastName, shouldSharePhoneNumber, note,
tabId = getCurrentTabId(),
} = payload;
@@ -253,7 +253,7 @@ addActionHandler('updateContact', async (global, actions, payload): Promise => {
+ const {
+ userId, note,
+ tabId = getCurrentTabId(),
+ } = payload;
+
+ const user = selectUser(global, userId);
+ if (!user) {
+ return;
+ }
+
+ global = getGlobal();
+ global = updateManagementProgress(global, ManagementProgress.InProgress, tabId);
+ setGlobal(global);
+
+ const result = await callApi('updateContactNote', user, note);
+
+ global = getGlobal();
+ if (result) global = updateUserFullInfo(global, userId, { note });
+ global = updateManagementProgress(global, ManagementProgress.Complete, tabId);
+ setGlobal(global);
+});
+
addActionHandler('deleteContact', async (global, actions, payload): Promise => {
const { userId } = payload;
diff --git a/src/global/types/actions.ts b/src/global/types/actions.ts
index 2339ab50d..a90e648af 100644
--- a/src/global/types/actions.ts
+++ b/src/global/types/actions.ts
@@ -1867,6 +1867,11 @@ export interface ActionPayloads {
firstName: string;
lastName?: string;
shouldSharePhoneNumber?: boolean;
+ note?: ApiFormattedText;
+ } & WithTabId;
+ updateContactNote: {
+ userId: string;
+ note: ApiFormattedText;
} & WithTabId;
toggleNoPaidMessagesException: {
userId: string;
diff --git a/src/hooks/element/useCollapsibleLines.ts b/src/hooks/element/useCollapsibleLines.ts
index 6492e387b..7df917419 100644
--- a/src/hooks/element/useCollapsibleLines.ts
+++ b/src/hooks/element/useCollapsibleLines.ts
@@ -20,15 +20,19 @@ export default function useCollapsibleLines();
+ const fullHeightRef = useRef();
const [isCollapsible, setIsCollapsible] = useState(!isDisabled);
const [isCollapsed, setIsCollapsed] = useState(isCollapsible);
useLayoutEffect(() => {
const element = (cutoutRef || ref).current;
+ const shouldUseStyleInExpand = !cutoutRef;
+
if (isDisabled || !element || isFirstRenderRef.current) return;
requestMutation(() => {
- element.style.maxHeight = isCollapsed ? `${cutoutHeightRef.current}px` : '';
+ element.style.maxHeight = isCollapsed ? `${cutoutHeightRef.current}px` :
+ shouldUseStyleInExpand ? `${fullHeightRef.current}px` : ``;
});
}, [cutoutRef, isCollapsed, isDisabled, ref]);
@@ -39,6 +43,7 @@ export default function useCollapsibleLines maxLinesBeforeCollapse) {
cutoutHeightRef.current = lineHeight * maxLinesBeforeCollapse;
setIsCollapsible(true);
@@ -63,7 +68,9 @@ export default function useCollapsibleLines = Bool;
contacts.getSponsoredPeers#b6c8c393 q:string = contacts.SponsoredPeers;
+contacts.updateContactNote#139f63fb id:InputUser note:TextWithEntities = Bool;
messages.getMessages#63c66506 id:Vector = messages.Messages;
messages.getDialogs#a0f4cb4f flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.Dialogs;
messages.getHistory#4423e6c5 peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:long = messages.Messages;
diff --git a/src/lib/gramjs/tl/static/api.json b/src/lib/gramjs/tl/static/api.json
index 58a0d5f8a..31a484d19 100644
--- a/src/lib/gramjs/tl/static/api.json
+++ b/src/lib/gramjs/tl/static/api.json
@@ -79,6 +79,7 @@
"contacts.resolveUsername",
"contacts.getTopPeers",
"contacts.addContact",
+ "contacts.updateContactNote",
"contacts.resolvePhone",
"contacts.editCloseFriends",
"contacts.getSponsoredPeers",
diff --git a/src/limits.ts b/src/limits.ts
index c8fa04d34..47067a90a 100644
--- a/src/limits.ts
+++ b/src/limits.ts
@@ -37,6 +37,7 @@ export const DEFAULT_LIMITS: Record = {
};
export const DEFAULT_MAX_MESSAGE_LENGTH = 4096;
+export const DEFAULT_MAX_NOTE_LENGTH = 128;
export const DEFAULT_APP_CONFIG: ApiAppConfig = {
hash: 0,
diff --git a/src/styles/icons.css b/src/styles/icons.css
index 7a07f160d..79d78b9f2 100644
--- a/src/styles/icons.css
+++ b/src/styles/icons.css
@@ -3,8 +3,8 @@
font-weight: normal;
font-style: normal;
font-display: block;
- src: url("./icons.woff2?c4762f96fd2b9a4edb1c0206e3cf5af6") format("woff2"),
-url("./icons.woff?c4762f96fd2b9a4edb1c0206e3cf5af6") format("woff");
+ src: url("./icons.woff2?ef047748945945a49b46209abb54795c") format("woff2"),
+url("./icons.woff?ef047748945945a49b46209abb54795c") format("woff");
}
.icon-char::before {
@@ -471,435 +471,438 @@ url("./icons.woff?c4762f96fd2b9a4edb1c0206e3cf5af6") format("woff");
.icon-non-contacts::before {
content: "\f196";
}
-.icon-one-filled::before {
+.icon-note::before {
content: "\f197";
}
-.icon-open-in-new-tab::before {
+.icon-one-filled::before {
content: "\f198";
}
-.icon-password-off::before {
+.icon-open-in-new-tab::before {
content: "\f199";
}
-.icon-pause::before {
+.icon-password-off::before {
content: "\f19a";
}
-.icon-permissions::before {
+.icon-pause::before {
content: "\f19b";
}
-.icon-phone-discard-outline::before {
+.icon-permissions::before {
content: "\f19c";
}
-.icon-phone-discard::before {
+.icon-phone-discard-outline::before {
content: "\f19d";
}
-.icon-phone::before {
+.icon-phone-discard::before {
content: "\f19e";
}
-.icon-photo::before {
+.icon-phone::before {
content: "\f19f";
}
-.icon-pin-badge::before {
+.icon-photo::before {
content: "\f1a0";
}
-.icon-pin-list::before {
+.icon-pin-badge::before {
content: "\f1a1";
}
-.icon-pin::before {
+.icon-pin-list::before {
content: "\f1a2";
}
-.icon-pinned-chat::before {
+.icon-pin::before {
content: "\f1a3";
}
-.icon-pinned-message::before {
+.icon-pinned-chat::before {
content: "\f1a4";
}
-.icon-pip::before {
+.icon-pinned-message::before {
content: "\f1a5";
}
-.icon-play-story::before {
+.icon-pip::before {
content: "\f1a6";
}
-.icon-play::before {
+.icon-play-story::before {
content: "\f1a7";
}
-.icon-poll::before {
+.icon-play::before {
content: "\f1a8";
}
-.icon-previous::before {
+.icon-poll::before {
content: "\f1a9";
}
-.icon-privacy-policy::before {
+.icon-previous::before {
content: "\f1aa";
}
-.icon-proof-of-ownership::before {
+.icon-privacy-policy::before {
content: "\f1ab";
}
-.icon-quote-text::before {
+.icon-proof-of-ownership::before {
content: "\f1ac";
}
-.icon-quote::before {
+.icon-quote-text::before {
content: "\f1ad";
}
-.icon-radial-badge::before {
+.icon-quote::before {
content: "\f1ae";
}
-.icon-rating-icons-level1::before {
+.icon-radial-badge::before {
content: "\f1af";
}
-.icon-rating-icons-level10::before {
+.icon-rating-icons-level1::before {
content: "\f1b0";
}
-.icon-rating-icons-level2::before {
+.icon-rating-icons-level10::before {
content: "\f1b1";
}
-.icon-rating-icons-level20::before {
+.icon-rating-icons-level2::before {
content: "\f1b2";
}
-.icon-rating-icons-level3::before {
+.icon-rating-icons-level20::before {
content: "\f1b3";
}
-.icon-rating-icons-level30::before {
+.icon-rating-icons-level3::before {
content: "\f1b4";
}
-.icon-rating-icons-level4::before {
+.icon-rating-icons-level30::before {
content: "\f1b5";
}
-.icon-rating-icons-level40::before {
+.icon-rating-icons-level4::before {
content: "\f1b6";
}
-.icon-rating-icons-level5::before {
+.icon-rating-icons-level40::before {
content: "\f1b7";
}
-.icon-rating-icons-level50::before {
+.icon-rating-icons-level5::before {
content: "\f1b8";
}
-.icon-rating-icons-level6::before {
+.icon-rating-icons-level50::before {
content: "\f1b9";
}
-.icon-rating-icons-level60::before {
+.icon-rating-icons-level6::before {
content: "\f1ba";
}
-.icon-rating-icons-level7::before {
+.icon-rating-icons-level60::before {
content: "\f1bb";
}
-.icon-rating-icons-level70::before {
+.icon-rating-icons-level7::before {
content: "\f1bc";
}
-.icon-rating-icons-level8::before {
+.icon-rating-icons-level70::before {
content: "\f1bd";
}
-.icon-rating-icons-level80::before {
+.icon-rating-icons-level8::before {
content: "\f1be";
}
-.icon-rating-icons-level9::before {
+.icon-rating-icons-level80::before {
content: "\f1bf";
}
-.icon-rating-icons-level90::before {
+.icon-rating-icons-level9::before {
content: "\f1c0";
}
-.icon-rating-icons-negative::before {
+.icon-rating-icons-level90::before {
content: "\f1c1";
}
-.icon-readchats::before {
+.icon-rating-icons-negative::before {
content: "\f1c2";
}
-.icon-recent::before {
+.icon-readchats::before {
content: "\f1c3";
}
-.icon-refund::before {
+.icon-recent::before {
content: "\f1c4";
}
-.icon-reload::before {
+.icon-refund::before {
content: "\f1c5";
}
-.icon-remove-quote::before {
+.icon-reload::before {
content: "\f1c6";
}
-.icon-remove::before {
+.icon-remove-quote::before {
content: "\f1c7";
}
-.icon-reopen-topic::before {
+.icon-remove::before {
content: "\f1c8";
}
-.icon-replace::before {
+.icon-reopen-topic::before {
content: "\f1c9";
}
-.icon-replies::before {
+.icon-replace::before {
content: "\f1ca";
}
-.icon-reply-filled::before {
+.icon-replies::before {
content: "\f1cb";
}
-.icon-reply::before {
+.icon-reply-filled::before {
content: "\f1cc";
}
-.icon-revenue-split::before {
+.icon-reply::before {
content: "\f1cd";
}
-.icon-revote::before {
+.icon-revenue-split::before {
content: "\f1ce";
}
-.icon-save-story::before {
+.icon-revote::before {
content: "\f1cf";
}
-.icon-saved-messages::before {
+.icon-save-story::before {
content: "\f1d0";
}
-.icon-schedule::before {
+.icon-saved-messages::before {
content: "\f1d1";
}
-.icon-scheduled::before {
+.icon-schedule::before {
content: "\f1d2";
}
-.icon-sd-photo::before {
+.icon-scheduled::before {
content: "\f1d3";
}
-.icon-search::before {
+.icon-sd-photo::before {
content: "\f1d4";
}
-.icon-select::before {
+.icon-search::before {
content: "\f1d5";
}
-.icon-sell-outline::before {
+.icon-select::before {
content: "\f1d6";
}
-.icon-sell::before {
+.icon-sell-outline::before {
content: "\f1d7";
}
-.icon-send-outline::before {
+.icon-sell::before {
content: "\f1d8";
}
-.icon-send::before {
+.icon-send-outline::before {
content: "\f1d9";
}
-.icon-settings-filled::before {
+.icon-send::before {
content: "\f1da";
}
-.icon-settings::before {
+.icon-settings-filled::before {
content: "\f1db";
}
-.icon-share-filled::before {
+.icon-settings::before {
content: "\f1dc";
}
-.icon-share-screen-outlined::before {
+.icon-share-filled::before {
content: "\f1dd";
}
-.icon-share-screen-stop::before {
+.icon-share-screen-outlined::before {
content: "\f1de";
}
-.icon-share-screen::before {
+.icon-share-screen-stop::before {
content: "\f1df";
}
-.icon-show-message::before {
+.icon-share-screen::before {
content: "\f1e0";
}
-.icon-sidebar::before {
+.icon-show-message::before {
content: "\f1e1";
}
-.icon-skip-next::before {
+.icon-sidebar::before {
content: "\f1e2";
}
-.icon-skip-previous::before {
+.icon-skip-next::before {
content: "\f1e3";
}
-.icon-smallscreen::before {
+.icon-skip-previous::before {
content: "\f1e4";
}
-.icon-smile::before {
+.icon-smallscreen::before {
content: "\f1e5";
}
-.icon-sort-by-date::before {
+.icon-smile::before {
content: "\f1e6";
}
-.icon-sort-by-number::before {
+.icon-sort-by-date::before {
content: "\f1e7";
}
-.icon-sort-by-price::before {
+.icon-sort-by-number::before {
content: "\f1e8";
}
-.icon-sort::before {
+.icon-sort-by-price::before {
content: "\f1e9";
}
-.icon-speaker-muted-story::before {
+.icon-sort::before {
content: "\f1ea";
}
-.icon-speaker-outline::before {
+.icon-speaker-muted-story::before {
content: "\f1eb";
}
-.icon-speaker-story::before {
+.icon-speaker-outline::before {
content: "\f1ec";
}
-.icon-speaker::before {
+.icon-speaker-story::before {
content: "\f1ed";
}
-.icon-spoiler-disable::before {
+.icon-speaker::before {
content: "\f1ee";
}
-.icon-spoiler::before {
+.icon-spoiler-disable::before {
content: "\f1ef";
}
-.icon-sport::before {
+.icon-spoiler::before {
content: "\f1f0";
}
-.icon-star::before {
+.icon-sport::before {
content: "\f1f1";
}
-.icon-stars-lock::before {
+.icon-star::before {
content: "\f1f2";
}
-.icon-stars-refund::before {
+.icon-stars-lock::before {
content: "\f1f3";
}
-.icon-stats::before {
+.icon-stars-refund::before {
content: "\f1f4";
}
-.icon-stealth-future::before {
+.icon-stats::before {
content: "\f1f5";
}
-.icon-stealth-past::before {
+.icon-stealth-future::before {
content: "\f1f6";
}
-.icon-stickers::before {
+.icon-stealth-past::before {
content: "\f1f7";
}
-.icon-stop-raising-hand::before {
+.icon-stickers::before {
content: "\f1f8";
}
-.icon-stop::before {
+.icon-stop-raising-hand::before {
content: "\f1f9";
}
-.icon-story-caption::before {
+.icon-stop::before {
content: "\f1fa";
}
-.icon-story-expired::before {
+.icon-story-caption::before {
content: "\f1fb";
}
-.icon-story-priority::before {
+.icon-story-expired::before {
content: "\f1fc";
}
-.icon-story-reply::before {
+.icon-story-priority::before {
content: "\f1fd";
}
-.icon-strikethrough::before {
+.icon-story-reply::before {
content: "\f1fe";
}
-.icon-tag-add::before {
+.icon-strikethrough::before {
content: "\f1ff";
}
-.icon-tag-crossed::before {
+.icon-tag-add::before {
content: "\f200";
}
-.icon-tag-filter::before {
+.icon-tag-crossed::before {
content: "\f201";
}
-.icon-tag-name::before {
+.icon-tag-filter::before {
content: "\f202";
}
-.icon-tag::before {
+.icon-tag-name::before {
content: "\f203";
}
-.icon-timer::before {
+.icon-tag::before {
content: "\f204";
}
-.icon-toncoin::before {
+.icon-timer::before {
content: "\f205";
}
-.icon-trade::before {
+.icon-toncoin::before {
content: "\f206";
}
-.icon-transcribe::before {
+.icon-trade::before {
content: "\f207";
}
-.icon-truck::before {
+.icon-transcribe::before {
content: "\f208";
}
-.icon-unarchive::before {
+.icon-truck::before {
content: "\f209";
}
-.icon-underlined::before {
+.icon-unarchive::before {
content: "\f20a";
}
-.icon-understood::before {
+.icon-underlined::before {
content: "\f20b";
}
-.icon-unique-profile::before {
+.icon-understood::before {
content: "\f20c";
}
-.icon-unlist-outline::before {
+.icon-unique-profile::before {
content: "\f20d";
}
-.icon-unlist::before {
+.icon-unlist-outline::before {
content: "\f20e";
}
-.icon-unlock-badge::before {
+.icon-unlist::before {
content: "\f20f";
}
-.icon-unlock::before {
+.icon-unlock-badge::before {
content: "\f210";
}
-.icon-unmute::before {
+.icon-unlock::before {
content: "\f211";
}
-.icon-unpin::before {
+.icon-unmute::before {
content: "\f212";
}
-.icon-unread::before {
+.icon-unpin::before {
content: "\f213";
}
-.icon-up::before {
+.icon-unread::before {
content: "\f214";
}
-.icon-user-filled::before {
+.icon-up::before {
content: "\f215";
}
-.icon-user-online::before {
+.icon-user-filled::before {
content: "\f216";
}
-.icon-user-stars::before {
+.icon-user-online::before {
content: "\f217";
}
-.icon-user::before {
+.icon-user-stars::before {
content: "\f218";
}
-.icon-video-outlined::before {
+.icon-user::before {
content: "\f219";
}
-.icon-video-stop::before {
+.icon-video-outlined::before {
content: "\f21a";
}
-.icon-video::before {
+.icon-video-stop::before {
content: "\f21b";
}
-.icon-view-once::before {
+.icon-video::before {
content: "\f21c";
}
-.icon-voice-chat::before {
+.icon-view-once::before {
content: "\f21d";
}
-.icon-volume-1::before {
+.icon-voice-chat::before {
content: "\f21e";
}
-.icon-volume-2::before {
+.icon-volume-1::before {
content: "\f21f";
}
-.icon-volume-3::before {
+.icon-volume-2::before {
content: "\f220";
}
-.icon-warning::before {
+.icon-volume-3::before {
content: "\f221";
}
-.icon-web::before {
+.icon-warning::before {
content: "\f222";
}
-.icon-webapp::before {
+.icon-web::before {
content: "\f223";
}
-.icon-word-wrap::before {
+.icon-webapp::before {
content: "\f224";
}
-.icon-zoom-in::before {
+.icon-word-wrap::before {
content: "\f225";
}
-.icon-zoom-out::before {
+.icon-zoom-in::before {
content: "\f226";
}
+.icon-zoom-out::before {
+ content: "\f227";
+}
diff --git a/src/styles/icons.scss b/src/styles/icons.scss
index 572a76e38..e27b82e28 100644
--- a/src/styles/icons.scss
+++ b/src/styles/icons.scss
@@ -166,148 +166,149 @@ $icons-map: (
"nochannel": "\f194",
"noise-suppression": "\f195",
"non-contacts": "\f196",
- "one-filled": "\f197",
- "open-in-new-tab": "\f198",
- "password-off": "\f199",
- "pause": "\f19a",
- "permissions": "\f19b",
- "phone-discard-outline": "\f19c",
- "phone-discard": "\f19d",
- "phone": "\f19e",
- "photo": "\f19f",
- "pin-badge": "\f1a0",
- "pin-list": "\f1a1",
- "pin": "\f1a2",
- "pinned-chat": "\f1a3",
- "pinned-message": "\f1a4",
- "pip": "\f1a5",
- "play-story": "\f1a6",
- "play": "\f1a7",
- "poll": "\f1a8",
- "previous": "\f1a9",
- "privacy-policy": "\f1aa",
- "proof-of-ownership": "\f1ab",
- "quote-text": "\f1ac",
- "quote": "\f1ad",
- "radial-badge": "\f1ae",
- "rating-icons-level1": "\f1af",
- "rating-icons-level10": "\f1b0",
- "rating-icons-level2": "\f1b1",
- "rating-icons-level20": "\f1b2",
- "rating-icons-level3": "\f1b3",
- "rating-icons-level30": "\f1b4",
- "rating-icons-level4": "\f1b5",
- "rating-icons-level40": "\f1b6",
- "rating-icons-level5": "\f1b7",
- "rating-icons-level50": "\f1b8",
- "rating-icons-level6": "\f1b9",
- "rating-icons-level60": "\f1ba",
- "rating-icons-level7": "\f1bb",
- "rating-icons-level70": "\f1bc",
- "rating-icons-level8": "\f1bd",
- "rating-icons-level80": "\f1be",
- "rating-icons-level9": "\f1bf",
- "rating-icons-level90": "\f1c0",
- "rating-icons-negative": "\f1c1",
- "readchats": "\f1c2",
- "recent": "\f1c3",
- "refund": "\f1c4",
- "reload": "\f1c5",
- "remove-quote": "\f1c6",
- "remove": "\f1c7",
- "reopen-topic": "\f1c8",
- "replace": "\f1c9",
- "replies": "\f1ca",
- "reply-filled": "\f1cb",
- "reply": "\f1cc",
- "revenue-split": "\f1cd",
- "revote": "\f1ce",
- "save-story": "\f1cf",
- "saved-messages": "\f1d0",
- "schedule": "\f1d1",
- "scheduled": "\f1d2",
- "sd-photo": "\f1d3",
- "search": "\f1d4",
- "select": "\f1d5",
- "sell-outline": "\f1d6",
- "sell": "\f1d7",
- "send-outline": "\f1d8",
- "send": "\f1d9",
- "settings-filled": "\f1da",
- "settings": "\f1db",
- "share-filled": "\f1dc",
- "share-screen-outlined": "\f1dd",
- "share-screen-stop": "\f1de",
- "share-screen": "\f1df",
- "show-message": "\f1e0",
- "sidebar": "\f1e1",
- "skip-next": "\f1e2",
- "skip-previous": "\f1e3",
- "smallscreen": "\f1e4",
- "smile": "\f1e5",
- "sort-by-date": "\f1e6",
- "sort-by-number": "\f1e7",
- "sort-by-price": "\f1e8",
- "sort": "\f1e9",
- "speaker-muted-story": "\f1ea",
- "speaker-outline": "\f1eb",
- "speaker-story": "\f1ec",
- "speaker": "\f1ed",
- "spoiler-disable": "\f1ee",
- "spoiler": "\f1ef",
- "sport": "\f1f0",
- "star": "\f1f1",
- "stars-lock": "\f1f2",
- "stars-refund": "\f1f3",
- "stats": "\f1f4",
- "stealth-future": "\f1f5",
- "stealth-past": "\f1f6",
- "stickers": "\f1f7",
- "stop-raising-hand": "\f1f8",
- "stop": "\f1f9",
- "story-caption": "\f1fa",
- "story-expired": "\f1fb",
- "story-priority": "\f1fc",
- "story-reply": "\f1fd",
- "strikethrough": "\f1fe",
- "tag-add": "\f1ff",
- "tag-crossed": "\f200",
- "tag-filter": "\f201",
- "tag-name": "\f202",
- "tag": "\f203",
- "timer": "\f204",
- "toncoin": "\f205",
- "trade": "\f206",
- "transcribe": "\f207",
- "truck": "\f208",
- "unarchive": "\f209",
- "underlined": "\f20a",
- "understood": "\f20b",
- "unique-profile": "\f20c",
- "unlist-outline": "\f20d",
- "unlist": "\f20e",
- "unlock-badge": "\f20f",
- "unlock": "\f210",
- "unmute": "\f211",
- "unpin": "\f212",
- "unread": "\f213",
- "up": "\f214",
- "user-filled": "\f215",
- "user-online": "\f216",
- "user-stars": "\f217",
- "user": "\f218",
- "video-outlined": "\f219",
- "video-stop": "\f21a",
- "video": "\f21b",
- "view-once": "\f21c",
- "voice-chat": "\f21d",
- "volume-1": "\f21e",
- "volume-2": "\f21f",
- "volume-3": "\f220",
- "warning": "\f221",
- "web": "\f222",
- "webapp": "\f223",
- "word-wrap": "\f224",
- "zoom-in": "\f225",
- "zoom-out": "\f226",
+ "note": "\f197",
+ "one-filled": "\f198",
+ "open-in-new-tab": "\f199",
+ "password-off": "\f19a",
+ "pause": "\f19b",
+ "permissions": "\f19c",
+ "phone-discard-outline": "\f19d",
+ "phone-discard": "\f19e",
+ "phone": "\f19f",
+ "photo": "\f1a0",
+ "pin-badge": "\f1a1",
+ "pin-list": "\f1a2",
+ "pin": "\f1a3",
+ "pinned-chat": "\f1a4",
+ "pinned-message": "\f1a5",
+ "pip": "\f1a6",
+ "play-story": "\f1a7",
+ "play": "\f1a8",
+ "poll": "\f1a9",
+ "previous": "\f1aa",
+ "privacy-policy": "\f1ab",
+ "proof-of-ownership": "\f1ac",
+ "quote-text": "\f1ad",
+ "quote": "\f1ae",
+ "radial-badge": "\f1af",
+ "rating-icons-level1": "\f1b0",
+ "rating-icons-level10": "\f1b1",
+ "rating-icons-level2": "\f1b2",
+ "rating-icons-level20": "\f1b3",
+ "rating-icons-level3": "\f1b4",
+ "rating-icons-level30": "\f1b5",
+ "rating-icons-level4": "\f1b6",
+ "rating-icons-level40": "\f1b7",
+ "rating-icons-level5": "\f1b8",
+ "rating-icons-level50": "\f1b9",
+ "rating-icons-level6": "\f1ba",
+ "rating-icons-level60": "\f1bb",
+ "rating-icons-level7": "\f1bc",
+ "rating-icons-level70": "\f1bd",
+ "rating-icons-level8": "\f1be",
+ "rating-icons-level80": "\f1bf",
+ "rating-icons-level9": "\f1c0",
+ "rating-icons-level90": "\f1c1",
+ "rating-icons-negative": "\f1c2",
+ "readchats": "\f1c3",
+ "recent": "\f1c4",
+ "refund": "\f1c5",
+ "reload": "\f1c6",
+ "remove-quote": "\f1c7",
+ "remove": "\f1c8",
+ "reopen-topic": "\f1c9",
+ "replace": "\f1ca",
+ "replies": "\f1cb",
+ "reply-filled": "\f1cc",
+ "reply": "\f1cd",
+ "revenue-split": "\f1ce",
+ "revote": "\f1cf",
+ "save-story": "\f1d0",
+ "saved-messages": "\f1d1",
+ "schedule": "\f1d2",
+ "scheduled": "\f1d3",
+ "sd-photo": "\f1d4",
+ "search": "\f1d5",
+ "select": "\f1d6",
+ "sell-outline": "\f1d7",
+ "sell": "\f1d8",
+ "send-outline": "\f1d9",
+ "send": "\f1da",
+ "settings-filled": "\f1db",
+ "settings": "\f1dc",
+ "share-filled": "\f1dd",
+ "share-screen-outlined": "\f1de",
+ "share-screen-stop": "\f1df",
+ "share-screen": "\f1e0",
+ "show-message": "\f1e1",
+ "sidebar": "\f1e2",
+ "skip-next": "\f1e3",
+ "skip-previous": "\f1e4",
+ "smallscreen": "\f1e5",
+ "smile": "\f1e6",
+ "sort-by-date": "\f1e7",
+ "sort-by-number": "\f1e8",
+ "sort-by-price": "\f1e9",
+ "sort": "\f1ea",
+ "speaker-muted-story": "\f1eb",
+ "speaker-outline": "\f1ec",
+ "speaker-story": "\f1ed",
+ "speaker": "\f1ee",
+ "spoiler-disable": "\f1ef",
+ "spoiler": "\f1f0",
+ "sport": "\f1f1",
+ "star": "\f1f2",
+ "stars-lock": "\f1f3",
+ "stars-refund": "\f1f4",
+ "stats": "\f1f5",
+ "stealth-future": "\f1f6",
+ "stealth-past": "\f1f7",
+ "stickers": "\f1f8",
+ "stop-raising-hand": "\f1f9",
+ "stop": "\f1fa",
+ "story-caption": "\f1fb",
+ "story-expired": "\f1fc",
+ "story-priority": "\f1fd",
+ "story-reply": "\f1fe",
+ "strikethrough": "\f1ff",
+ "tag-add": "\f200",
+ "tag-crossed": "\f201",
+ "tag-filter": "\f202",
+ "tag-name": "\f203",
+ "tag": "\f204",
+ "timer": "\f205",
+ "toncoin": "\f206",
+ "trade": "\f207",
+ "transcribe": "\f208",
+ "truck": "\f209",
+ "unarchive": "\f20a",
+ "underlined": "\f20b",
+ "understood": "\f20c",
+ "unique-profile": "\f20d",
+ "unlist-outline": "\f20e",
+ "unlist": "\f20f",
+ "unlock-badge": "\f210",
+ "unlock": "\f211",
+ "unmute": "\f212",
+ "unpin": "\f213",
+ "unread": "\f214",
+ "up": "\f215",
+ "user-filled": "\f216",
+ "user-online": "\f217",
+ "user-stars": "\f218",
+ "user": "\f219",
+ "video-outlined": "\f21a",
+ "video-stop": "\f21b",
+ "video": "\f21c",
+ "view-once": "\f21d",
+ "voice-chat": "\f21e",
+ "volume-1": "\f21f",
+ "volume-2": "\f220",
+ "volume-3": "\f221",
+ "warning": "\f222",
+ "web": "\f223",
+ "webapp": "\f224",
+ "word-wrap": "\f225",
+ "zoom-in": "\f226",
+ "zoom-out": "\f227",
);
diff --git a/src/styles/icons.woff b/src/styles/icons.woff
index 72753e205..446d0220d 100644
Binary files a/src/styles/icons.woff and b/src/styles/icons.woff differ
diff --git a/src/styles/icons.woff2 b/src/styles/icons.woff2
index c52acb729..fdf68556b 100644
Binary files a/src/styles/icons.woff2 and b/src/styles/icons.woff2 differ
diff --git a/src/types/icons/font.ts b/src/types/icons/font.ts
index 4563cc549..766619bea 100644
--- a/src/types/icons/font.ts
+++ b/src/types/icons/font.ts
@@ -149,6 +149,7 @@ export type FontIconName =
| 'nochannel'
| 'noise-suppression'
| 'non-contacts'
+ | 'note'
| 'one-filled'
| 'open-in-new-tab'
| 'password-off'
diff --git a/src/types/language.d.ts b/src/types/language.d.ts
index 617372f2a..7d074947b 100644
--- a/src/types/language.d.ts
+++ b/src/types/language.d.ts
@@ -1716,6 +1716,9 @@ export interface LangPair {
'ConfirmBuyGiftForTonDescription': undefined;
'TitleGiftLocked': undefined;
'QuickPreview': undefined;
+ 'UserNoteTitle': undefined;
+ 'UserNoteHint': undefined;
+ 'EditUserNoteHint': undefined;
}
export interface LangPairWithVariables {