Render Custom Emoji in Text
. Supports local and remote emojis. Remote emojis are loaded and cached using Nuke
Remote emoji
EmojiText(verbatim: "Hello :my_emoji:",
emojis: [RemoteEmoji(shortcode: "my_emoji", url: /* URL to emoji */)])
Local emoji
EmojiText(verbatim: "Hello :my_emoji:",
emojis: [LocalEmoji(shortcode: "my_emoji", image: /* some UIImage or NSImage */)])
SF Symbol
EmojiText(verbatim: "Hello Moon & Starts :moon.stars:",
emojis: [SFSymbolEmoji(shortcode: "moon.stars")])
Also supports Markdown
EmojiText(markdown: "**Hello** *World* :my_emoji:",
emojis: [RemoteEmoji(shortcode: "my_emoji", url: /* URL to emoji */)])
Warning
This feature is in beta and therefore is opt-in only. Performance may vary.
Currently only UIKit platforms support animated emoji.
Enable animation by setting adding the .animated()
modifier to EmojiText
.
EmojiText(verbatim: "GIF :my_gif:",
emojis: [RemoteEmoji(shortcode: "my_gif", url: /* URL to gif */)])
.animated()
Supported formats:
- APNG
- GIF
- WebP
[!INFO] The animation will automatically pause when using low-power mode. To always play animations, even in low-power mode set the animation mode to
AnimatedEmojiMode.always
EmojiText(verbatim: "GIF :my_gif:", emojis: [RemoteEmoji(shortcode: "my_gif", url: /* URL to gif */)]) .animated() .environment(\.emojiText.AnimatedMode, .always)
Remote emojis are replaced by a placeholder image when loading. Default is the SF Symbol square.dashed
but you can overide the placeholder image with
.emojiText.placeholder(systemName: /* SF Symbol */)
or
.emojiText.placeholder(image: /* some UIImage or NSImage */)
Remote emojis use ImagePipeline.shared
from Nuke to load them, but you can provide a custom pipeline with
.environment(\.emojiText.imagePipeline, ImagePipeline())
See LICENSE