md_parser_wasm 0.3.5

A markdown parser written in Rust and compiled to WebAssembly
Documentation
<script lang="ts">
  import { fly } from "svelte/transition";
  import Header from "./components/Header.svelte";
  import MarkdownInput from "./components/MarkdownInput.svelte";
  import MarkdownPreview from "./components/MarkdownPreview.svelte";
  import { markdown, preview } from "./lib/stores";
  import Icon from "svelte-icons-pack/Icon.svelte";
  import IoCheckmarkDoneCircleSharp from "svelte-icons-pack/io/IoCheckmarkDoneCircleSharp";
  import { onMount } from "svelte";
  import * as init from "../../pkg/markdown_parser";

  let rust: typeof init;

  async function loadRust() {
    rust = init;
  }

  onMount(() => {
    loadRust();

    window.addEventListener("keydown", handleKeydown);

    markdown.subscribe((value) => {
      console.log(value);
      if (value && value.length > 10) {
        showButton = true;
      } else {
        showButton = false;
      }

      markdownValue = value;

      renderMarkdown();
    });
  });

  let showButton = false;
  let markdownValue = "";

  function handleKeydown(e: KeyboardEvent) {
    console.log(e);
    if (e.ctrlKey && e.keyCode == 13) {
      console.log("Markdown");
      renderMarkdown();
    }
  }

  function renderMarkdown() {
    let parsed = rust.parse(markdownValue);
    preview.set(parsed);
  }
</script>

<main>
  <Header />
  <div class="input-container">
    <div style="height: 100%; margin-right: 15px">
      <MarkdownInput />
    </div>
    <div style="flex:1; min-width: 250px; height: 100%">
      <MarkdownPreview />
    </div>
  </div>
  {#if showButton}
    <div
      on:click={renderMarkdown}
      transition:fly={{ y: -50, x: -50 }}
      class="preview-button"
    >
      <Icon size="40" color="white" src={IoCheckmarkDoneCircleSharp} />
    </div>
  {/if}
</main>

<style>
  .input-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    height: 80vh;
  }

  .preview-button {
    position: absolute;
    display: flex;
    align-items: center;
    justify-content: center;
    place-items: center;
    border-radius: 25%;
    bottom: 10px;
    right: 10px;
    height: 55px;
    width: 55px;
    background: red;
  }
</style>