544a170ead2c | atagen | 2026-10-20 11:47 UTC | 1 | <script lang="ts"> |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 2 | import { twemojiUrl } from './twemoji'; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 3 | |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 4 | export let emoji: string; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 5 | export let size: number | string = 20; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 6 | export let label: string | null = null; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 7 | |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 8 | let failed = false; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 9 | $: emoji, (failed = false); |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 10 | $: dim = typeof size === 'number' ? `${size}px` : size; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 11 | $: align = typeof size === 'number' ? 'middle' : '-0.25em'; |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 12 | </script> |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 13 | |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 14 | {#if failed} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 15 | <span class="native" style={`font-size:${dim}`} aria-label={label ?? undefined}>{emoji}</span> |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 16 | {:else} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 17 | <img |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 18 | class="emoji" |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 19 | src={twemojiUrl(emoji)} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 20 | alt={emoji} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 21 | aria-label={label ?? undefined} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 22 | style={`width:${dim};height:${dim};vertical-align:${align}`} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 23 | draggable="false" |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 24 | loading="lazy" |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 25 | on:error={() => (failed = true)} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 26 | /> |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 27 | {/if} |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 28 | |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 29 | <style> |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 30 | .emoji { display: inline-block; object-fit: contain; } |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 31 | .native { display: inline-block; line-height: 1; vertical-align: middle; } |
544a170ead2c | atagen | 2026-10-20 11:47 UTC | 32 | </style> |