0.4.3 • Published 12 months ago

@overlays/svelte v0.4.3

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

Getting Started

create imperative overlays in the svelte application, supporting context inheritance!

Install

With pnpm:

pnpm add @overlays/svelte

With yarn:

yarn add @overlays/svelte

Usage

Step 1: Define Component

<script lang="ts">
  import { useOverlay, Overlay } from "@overlays/svelte";
  import { fly } from "svelte/transition";
  
  export let title: number
  export let duration = 200

  // duration of overlay duration, helps prevent premature component destroy
  const { resolve, reject } = useOverlay({ duration })

  function onClick() {
    resolve(`${title}:confirmed`)
  }
</script>

<Overlay>
  <div transition:fly={{ opacity: 0, duration }} on:click={onClick}>
    <slot name="title">
      { title }
    </slot>
  </div>
</Overlay>

Step 2: Create Overlay

You can use the defineOverlay method to convert the component into a modal dialog in Javascript / Typescript, which allows you to call it.

import { defineOverlay } from '@overlays/svelte'
import OverlayComponent from './overlay.svelte'

// Convert to imperative callback
const callback = defineOverlay(OverlayComponent)
// Call the component and get the value of the resolve callback
const value = await callback({ title: 'callbackOverlay' })
// value === "callbackOverlay:confirmed"

You can also use renderOverlay to directly call the component and skip the defineOverlay method.

import { renderOverlay } from '@overlays/svelte'
import OverlayComponent from './overlay.svelte'

const value = await renderOverlay(OverlayComponent, {
  title: 'useOverlay'
})
// value === "useOverlay:confirmed"

Controlled manner

By default, you do not need to control the display and hiding of the visible variable. The value is controlled by the component Overlay, and you can pass in visible to control the display

<script lang="ts">
  import { useOverlay, Overlay } from "@overlays/svelte";

  let visible = false

  const { resolve, reject, deferred, vanish } = useOverlay({
    // close the transition duration, at this point you need to manually destroy it
    duration: false,
    // cancel setting visible to true immediately
    immediate: false
  })

  // Manually set vanish (when promise ends)
  deferred.finally(() => vanish())
</script>

<Overlay bind:visible={visible}>
  <div on:click={() => resolve(`${title}:confirmed`)}>
    ...
  </div>
</Overlay>
0.4.3

12 months ago

0.4.2

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.0

1 year ago

0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago