Skip to content

mattjennings/svelte-modals

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Aug 17, 2022
55fd1c1 · Aug 17, 2022

History

47 Commits
Aug 1, 2021
Apr 29, 2022
Jun 11, 2021
Jan 15, 2022
Jun 12, 2021
Jun 11, 2021
Jun 11, 2021
Jun 12, 2021
Jun 13, 2021
Jun 12, 2021
Jun 11, 2021
Aug 17, 2022
Jan 15, 2022
Jun 11, 2021
Jun 13, 2021
Apr 29, 2022
Jul 30, 2021

Repository files navigation

svelte-modals

A simple, flexible, zero-dependency modal manager for Svelte.

View documentation

Getting Started

npm install svelte-modals

Add Modals somewhere in your app. This is where the modals will render.

<script>
  import { Modals, closeModal } from 'svelte-modals'
</script>

<Modals>
  <div
    slot="backdrop"
    class="backdrop"
    on:click={closeModal}
  />
</Modals>

<style>
  .backdrop {
    position: fixed;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    background: rgba(0,0,0,0.50)
  }
</style>

Create your Modal component

<script>
  import { closeModal } from 'svelte-modals'

  // provided by Modals
  export let isOpen

  export let title
  export let message
</script>

{#if isOpen}
<div role="dialog" class="modal">
  <div class="contents">
    <h2>{title}</h2>
    <p>{message}</p>
    <div class="actions">
      <button on:click="{closeModal}">OK</button>
    </div>
  </div>
</div>
{/if}

<style>
  .modal {
    position: fixed;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    display: flex;
    justify-content: center;
    align-items: center;

    /* allow click-through to backdrop */
    pointer-events: none;
  }

  .contents {
    min-width: 240px;
    border-radius: 6px;
    padding: 16px;
    background: white;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    pointer-events: auto;
  }

  h2 {
    text-align: center;
    font-size: 24px;
  }

  p {
    text-align: center;
    margin-top: 16px;
  }

  .actions {
    margin-top: 32px;
    display: flex;
    justify-content: flex-end;
  }
</style>

Open it

<script>
  import { openModal } from 'svelte-modals'
  import Modal from './Modal.svelte'

  function handleClick() {
    openModal(Modal, { title: 'Alert', message: 'This is an alert' })
  }
</script>

<button on:click="{handleClick}">Open Modal</button>