atagen

malice

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