using System.Globalization; namespace WhatsApp.Design { public readonly struct Glyph { public static GlyphFactory Factory { get; } = new(); public string Value { get; } public Glyph(string value) { Value = value; } public bool Equals(Glyph other) => string.Equals(Value, other.Value); public override bool Equals(object obj) { if (object.ReferenceEquals(null, obj)) return false; return obj is Glyph other && Equals(other); } public override string ToString() => Value; public override int GetHashCode() => Value != null ? Value.GetHashCode() : 0; } public sealed class GlyphFactory { // Glyphs E500-E6FF are from our custom fonts, while E700+ are from Microsoft's // Segoe Fluent Icons, which can be found here: // https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font // // All project font files are located in WhatsApp\WhatsApp\Design\WhatsAppMDL2Assets, // and can also be previewed using .ttf programs/viewers. // // "\uE92A" is used for blurred skin tone in emoji font file (see EmojiCharTools.cs). private readonly bool _isRtl = CultureInfo.CurrentCulture.TextInfo.IsRightToLeft; // This list is sorted, so please add a new glyph in the right place. public Glyph Empty => new(string.Empty); public Glyph Received => new("\uE500"); public Glyph Sent => new("\uE501"); public Glyph Pending => new("\uE502"); public Glyph Error => new("\uE503"); public Glyph SmallSolidStar => new("\uE504"); public Glyph SmallSolidLabel => new("\uE505"); public Glyph SmallMultiLabelFrontIcon => new("\uE506"); public Glyph SmallMultiLabelBackIcon => new("\uE507"); public Glyph SmallBookmarkFill => new("\uE508"); public Glyph SolidPin => new("\uE509"); public Glyph ChatListInfo => _isRtl ? new Glyph("\uE52A ") : new Glyph("\uE52A"); public Glyph ChatListInfoWithPrefixSpace => _isRtl ? new Glyph(" \uE52A ") : new Glyph(" \uE52A"); public Glyph ChatListPin => new("\uE52B"); public Glyph SmallRingerSilent => new("\uE52C"); public Glyph ChatListMention => new("\uE52D"); public Glyph ChatListPoll => _isRtl ? new Glyph("\uE53A ") : new Glyph("\uE53A"); public Glyph ChatListVideoFill => new("\uE54A"); public Glyph ChatListProfile => _isRtl ? new Glyph("\uE55A ") : new Glyph("\uE55A"); public Glyph Key => new("\uE55B"); public Glyph Comments => new("\uE55C"); public Glyph ChatListEvent => new("\uE55D"); public Glyph ChatListStatus => _isRtl ? new Glyph("\uE56A ") : new Glyph("\uE56A"); public Glyph ChatListUnsupported => _isRtl ? new Glyph("\uE56B ") : new Glyph("\uE56B"); public Glyph AiSymbol => new("\uE56C"); public Glyph ChatListDraft => _isRtl ? new Glyph("\uE57A ") : new Glyph("\uE57A"); public Glyph SelectOne => new("\uE57B"); public Glyph SelectMultiple => new("\uE57C"); public Glyph SolidLabelIcon => new("\uE57D"); public Glyph ChatListReceived => new("\uE580"); public Glyph ChatListRead => ChatListReceived; public Glyph ChatListSent => new("\uE581"); public Glyph ChatListPending => _isRtl ? new Glyph("\uE582 ") : new Glyph("\uE582"); public Glyph ChatListError => new("\uE583"); public Glyph ChatListDeleted => _isRtl ? new Glyph("\uE584 ") : new Glyph("\uE584"); public Glyph ChatListImage => _isRtl ? new Glyph("\uE585 ") : new Glyph("\uE585"); public Glyph ChatListFile => _isRtl ? new Glyph("\uE586 ") : new Glyph("\uE586"); public Glyph ChatListAudio => _isRtl ? new Glyph("\uE587 ") : new Glyph("\uE587"); public Glyph ChatListPtt => _isRtl ? new Glyph("\uE588 ") : new Glyph("\uE588"); public Glyph ChatListContact => _isRtl ? new Glyph("\uE589 ") : new Glyph("\uE589"); public Glyph ChatListLiveLocation => _isRtl ? new Glyph("\uE58A ") : new Glyph("\uE58A"); public Glyph ChatListLocation => _isRtl ? new Glyph("\uE58B ") : new Glyph("\uE58B"); public Glyph ChatListGif => _isRtl ? new Glyph("\uE58C ") : new Glyph("\uE58C"); public Glyph ChatListSticker => _isRtl ? new Glyph("\uE58D ") : new Glyph("\uE58D"); public Glyph ChatListMissedCall => _isRtl ? new Glyph("\uE58E ") : new Glyph("\uE58E"); public Glyph ChatListMissedVideo => _isRtl ? new Glyph("\uE58F ") : new Glyph("\uE58F"); public Glyph ChatListPhone => _isRtl ? new Glyph("\uE590 ") : new Glyph("\uE590"); public Glyph PhoneV2 => new("\uE590"); public Glyph ChatListVideo => _isRtl ? new Glyph("\uE591 ") : new Glyph("\uE591"); public Glyph VideoCallV2 => new("\uE591"); public Glyph ChatListGroupInvite => _isRtl ? new Glyph("\uE592 ") : new Glyph("\uE592"); public Glyph ChatListBusiness => _isRtl ? new Glyph("\uE593 ") : new Glyph("\uE593"); public Glyph ChatListLock => _isRtl ? new Glyph("\uE594 ") : new Glyph("\uE594"); public Glyph EphemeralIconForText => _isRtl ? new Glyph("\uE596 ") : new Glyph("\uE596"); public Glyph EphemeralCentered => new("\uE597"); public Glyph ChatListViewOnceMessage => _isRtl ? new Glyph("\uE59A ") : new Glyph("\uE59A"); public Glyph ChatListViewOnceOpened => _isRtl ? new Glyph("\uE59B ") : new Glyph("\uE59B"); public Glyph MultiLabelFrontIcon => new("\uE5AA"); public Glyph MultiLabelBackIcon => new("\uE5AB"); public Glyph ChatListVoiceOutgoing => new("\uE5BA"); public Glyph ChatListVoiceIncoming => new("\uE5BB"); public Glyph ChatListVideoOutgoing => new("\uE5FF"); public Glyph PlayInCircle => new("\uE600"); public Glyph DismissAdmin => new("\uE602"); public Glyph QRCode => new("\uE603"); public Glyph ReplyInPrivate => new("\uE606"); public Glyph Status => new("\uE60C"); public Glyph StatusUnreadBaseLayer => new("\uE60D"); public Glyph StatusUnreadTopLayer => new("\uE60E"); public Glyph SolidCamera => new("\uE610"); public Glyph Gif => new("\uE611"); public Glyph SolidGif => new("\uE612"); public Glyph SolidMicOff => new("\uE615"); public Glyph BusinessIcon => new("\uE617"); public Glyph VerifiedNameIcon => new("\uE618"); public Glyph Forwarded => new("\uE61D"); public Glyph FrequentlyForwarded => new("\uE61E"); public Glyph MobilePhoneAndLaptop => new("\uE61F"); public Glyph Channels => new("\uE620"); public Glyph CancelCircle => new("\uE621"); public Glyph MobilePhone => new("\uE62A"); public Glyph Logo => new("\uE62C"); public Glyph RegistrationAndroidMenuIcon => new("\uE62D"); public Glyph RegistrationIphoneSettingsIcon => new("\uE62E"); public Glyph CheckMarkBig => new("\uE62F"); public Glyph EmojiTabAnimal => new("\uE630"); public Glyph EmojiTabPizza => new("\uE631"); public Glyph EmojiTabBasketball => new("\uE632"); public Glyph EmojiTabCar => new("\uE633"); public Glyph EmojiTabLightBulb => new("\uE634"); public Glyph VoiceIncomingFilled => new("\uE635"); public Glyph VoiceOutgoingFilled => new("\uE636"); public Glyph VideoIncomingFilled => new("\uE637"); public Glyph VideoOutgoingFilled => new("\uE638"); public Glyph EffectsSparkles => new("\uE639"); public Glyph Grid => new("\uE63B"); public Glyph Speaker => new("\uE63C"); public Glyph CloudOff => new("\uE63D"); public Glyph ContactPending => new("\uE63E"); public Glyph VideoOff => new("\uE64A"); public Glyph Event => new("\uE64B"); public Glyph AddContact => new("\uE64C"); public Glyph EndCall => new("\uE65A"); public Glyph ScreenShareStart => new("\uE65B"); public Glyph ScreenShareStop => new("\uE65C"); public Glyph Filter => new("\uE667"); public Glyph UnreadMessage => new("\uE668"); public Glyph ClearChat => new("\uE669"); public Glyph InitialSyncLaptop => new("\uE66A"); public Glyph ChatListPhoneFill => new("\uE670"); public Glyph Poll => new("\uE671"); public Glyph ZoomToFit => new("\uE672"); public Glyph ActualSize => new("\uE673"); public Glyph HDIcon => new("\uE674"); public Glyph InfoCentered => new("\uE675"); public Glyph UnfilledLabelIcon => new("\uE676"); public Glyph LargeLabelIcon => new("\uE678"); public Glyph WarningTriangle => new("\uE67A"); public Glyph CheckMarkCircle => new("\uE67B"); public Glyph ChatViewViewOnceMessage => new("\uE68A"); public Glyph ChatViewViewOnceDownload => new("\uE68B"); public Glyph Bookmark => new("\uE69A"); public Glyph BookmarkFill => new("\uE69B"); public Glyph GlobalNavigationButton => new("\uE700"); public Glyph Connect => new("\uE703"); public Glyph LightTheme => new("\uE706"); public Glyph MapPin => new("\uE707"); public Glyph DarkTheme => new("\uE708"); public Glyph ChevronDown => new("\uE70D"); public Glyph ChevronUp => new("\uE70E"); public Glyph Pencil => new("\uE70F"); public Glyph Add => new("\uE710"); public Glyph Cancel => new("\uE711"); public Glyph More => new("\uE712"); public Glyph Settings => new("\uE713"); public Glyph Video => new("\uE714"); public Glyph Mail => new("\uE715"); public Glyph People => new("\uE716"); public Glyph Phone => new("\uE717"); public Glyph Pin => new("\uE718"); public Glyph Stop => new("\uE71A"); public Glyph Link => new("\uE71B"); public Glyph ZoomOut => new("\uE71F"); public Glyph Microphone => new("\uE720"); public Glyph Find => new("\uE721"); public Glyph Camera => new("\uE722"); public Glyph Attach => new("\uE723"); public Glyph Send => new("\uE724"); public Glyph SendFill => new("\uE725"); public Glyph Back => new("\uE72B"); public Glyph Refresh => new("\uE72C"); public Glyph Share => new("\uE72D"); public Glyph Lock => new("\uE72E"); public Glyph FavoriteStar => new("\uE734"); public Glyph FavoriteStarFill => new("\uE735"); public Glyph Remove => new("\uE738"); public Glyph CheckboxComposite => new("\uE73A"); public Glyph CheckMark => new("\uE73E"); public Glyph FullScreen => new("\uE740"); public Glyph IncomingCall => new("\uE741"); public Glyph OutgoingCall => new("\uE742"); public Glyph Down => new("\uE74B"); public Glyph Delete => new("\uE74D"); public Glyph SaveAs => new("\uE74E"); public Glyph Mute => new("\uE74F"); public Glyph CommandPrompt => new("\uE756"); public Glyph Dialpad => new("\uE75F"); public Glyph MultiSelect => new("\uE762"); public Glyph Keyboard => new("\uE765"); public Glyph Sound => new("\uE767"); public Glyph Play => new("\uE768"); public Glyph Pause => new("\uE769"); public Glyph ChevronLeft => new("\uE76B"); public Glyph ChevronRight => new("\uE76C"); public Glyph Emoji => new("\uE76E"); public Glyph Personalize => new("\uE771"); public Glyph Globe => new("\uE774"); public Glyph RetryUpload => _isRtl ? new Glyph("\uE777 ") : new Glyph("\uE777"); public Glyph ContactInfo => new("\uE779"); public Glyph UnPin => new("\uE77A"); public Glyph Contact => new("\uE77B"); public Glyph Paste => new("\uE77F"); public Glyph Calendar => new("\uE787"); public Glyph Megaphone => new("\uE789"); public Glyph SystemTheme => new("\uE790"); public Glyph Redo => new("\uE7A6"); public Glyph Undo => new("\uE7A7"); public Glyph OpenWith => new("\uE7AC"); public Glyph Location => new("\uE7B7"); public Glyph Location2 => new("\uE64D"); public Glyph Archive => new("\uE7B8"); public Glyph Warning => new("\uE7BA"); public Glyph EmojiTabFlags => new("\uE7C1"); public Glyph RingerSilent => new("\uE7ED"); public Glyph Admin => new("\uE7EF"); public Glyph Speakers => new("\uE7F5"); public Glyph Laptop => new("\uE7F8"); public Glyph IncidentTriangle => new("\uE814"); public Glyph History => new("\uE81C"); public Glyph Recent => new("\uE823"); public Glyph PinToTop => new("\uE840"); public Glyph View => new("\uE890"); public Glyph Sync => new("\uE895"); public Glyph Download => new("\uE896"); public Glyph Help => new("\uE897"); public Glyph Upload => new("\uE898"); public Glyph LeaveChat => new("\uE89B"); public Glyph ZoomIn => new("\uE8A3"); public Glyph Document => new("\uE8A5"); public Glyph OpenInNewWindow => new("\uE8A7"); public Glyph SelectAll => new("\uE8B3"); public Glyph Folder => new("\uE8B7"); public Glyph Cross => new("\uE8BB"); public Glyph Message => new("\uE8BD"); public Glyph Cut => new("\uE8C6"); public Glyph Copy => new("\uE8C8"); public Glyph Important => new("\uE8C9"); public Glyph ContactPresence => new("\uE8CF"); public Glyph Audio => new("\uE8D6"); public Glyph Account => new("\uE8D7"); public Glyph Italic => new("\uE8DB"); public Glyph Bold => new("\uE8DD"); public Glyph OpenFile => new("\uE8E5"); public Glyph ClearSelection => new("\uE8E6"); public Glyph CellPhone => new("\uE8EA"); public Glyph Chats => new("\uE8F2"); public Glyph NonContact => new("\uE8F8"); public Glyph AddParticipant => new("\uE8FA"); public Glyph Group => new("\uE902"); public Glyph AtIcon => new("\uE910"); public Glyph BackSpaceQwertyMd => new("\uE926"); public Glyph Fingerprint => new("\uE928"); public Glyph ChromeFullScreen => new("\uE92D"); public Glyph NewChat => new("\uE932"); public Glyph Code => new("\uE943"); public Glyph Info => new("\uE946"); public Glyph EqualTo => new("\uE94E"); public Glyph ChevronLeftSmall => new("\uE96F"); public Glyph ChevronRightSmall => new("\uE970"); public Glyph Reply => new("\uE97A"); public Glyph Volume0 => new("\uE992"); public Glyph Volume1 => new("\uE993"); public Glyph Volume2 => new("\uE994"); public Glyph Volume3 => new("\uE995"); public Glyph Performance => new("\uE9D9"); public Glyph MoreDevices => new("\uE9E9"); public Glyph Details => new("\uE9F9"); public Glyph VideoSolid => new("\uEA0C"); public Glyph ErrorBadge => new("\uEA39"); public Glyph Circle => new("\uEA3A"); public Glyph NarrowMirrored => new("\uEA62"); public Glyph Media => new("\uEA69"); public Glyph Ringer => new("\uEA8F"); public Glyph Heart => new("\uEB51"); public Glyph HeartFill => new("\uEB52"); public Glyph HeartBroken => new("\uEA92"); public Glyph TaskViewExpanded => new("\uEB91"); public Glyph Image => new("\uEB9F"); public Glyph Project => new("\uEBC6"); public Glyph Bug => new("\uEBE8"); public Glyph Files => new("\uEC50"); public Glyph MicOff => new("\uEC54"); public Glyph CompletedSolid => new("\uEC61"); public Glyph MicOn => new("\uEC71"); public Glyph RemoveFrom => new("\uECC9"); public Glyph ContactUs => new("\uED15"); public Glyph EmojiTabSmile => new("\uED54"); public Glyph EmojiTabSymbols => new("\uED58"); public Glyph EmojiTabRecent => new("\uED5A"); public Glyph Storage => new("\uEDA2"); public Glyph Drawing => new("\uEDC6"); public Glyph Strikethrough => new("\uEDE0"); public Glyph ReplyMirrored => new("\uEE35"); public Glyph ForwardMessage => ReplyMirrored; public Glyph ShareNode => new("\uF003"); public Glyph Clipboard => new("\uF0E3"); public Glyph StatusCircleOuter => new("\uF136"); public Glyph StatusCircleExclamation => new("\uF13C"); public Glyph StatusCircleBlock => new("\uF140"); public Glyph InfoSolid => new("\uF167"); public Glyph RaiseHand => new("\uE66C"); public Glyph HandRaised => new("\U0000270B"); public Glyph NetworkOffline => new("\uF384"); public Glyph SignOut => new("\uF3B1"); public Glyph SpecialEffects => new("\uF4A5"); public Glyph Sticker2 => new("\uF4AA"); public Glyph PlaySolid => new("\uF5B0"); public Glyph Portrait => new("\uF616"); public Glyph Landscape => new("\uF617"); public Glyph Reminder => new("\uF738"); public Glyph MicOff2 => new("\uF781"); public Glyph Spelling => new("\uF87B"); public Glyph AddBold => new("\uF8AA"); // This list is sorted, so please add a new glyph in the right place. } }