atagen

malice

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