aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/Qr.svelte
blob: 692f665e456aa368cf01323110b9769346d7eea7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script lang="ts">
  let { icon = "", text }: any = $props();
  let qr = $state();

  const toggleFullscreen = (el) =>
    document.fullscreenElement ? document.exitFullscreen() : el.requestFullscreen();

  let src = $derived.by(() => {
    let url = `/qr/${encodeURIComponent(text)}`;
    if (icon) url += `/${icon}`;
    else url += "/raw";
    return url;
  });
</script>

<div
  class="w-72 sm:w-80 mx-auto cursor-pointer"
  bind:this={qr}
  onclick={() => toggleFullscreen(qr)}
  onkeydown={(e) => (e.key === "Enter" || e.key === " ") && toggleFullscreen(qr)}
  role="button"
  tabindex="0"
  aria-label="Toggle fullscreen QR"
>
  <img {src} class="mx-auto" alt="QR Code" />
</div>