Skip to content

divadretlaw/EmojiText

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EmojiText

Render Custom Emoji in Text. Supports local and remote emojis. Remote emojis are loaded and cached using Nuke

Usage

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")])

Markdown

Also supports Markdown

EmojiText(markdown: "**Hello** *World* :my_emoji:",
          emojis: [RemoteEmoji(shortcode: "my_emoji", url: /* URL to emoji */)])

Animated 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)

Configuration

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())

License

See LICENSE