Skip to content

romkor/svelte-portal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

bddbc7c · Jan 17, 2024

History

93 Commits
Jan 16, 2024
Jan 16, 2024
Jun 2, 2022
Mar 27, 2021
Oct 24, 2020
Sep 14, 2020
Oct 25, 2020
Oct 23, 2020
Jan 14, 2020
Jan 16, 2024
Nov 5, 2019
Dec 31, 2020
Oct 24, 2020
Oct 24, 2020
Jan 17, 2024
Jan 17, 2024

Repository files navigation

Svelte component for rendering outside the DOM of parent component

Idea borrowed from here: sveltejs/svelte#3088 (comment)

Installation

npm install --save svelte-portal

or

yarn add svelte-portal

Usage Portal component

The <Portal /> component has only one property: target

target can be a HTMLElement target={document.body} or a css selector target="#modals" that points to an already existing element.

When no target is given it defaults to: document.body.

Example

<script>
  import Portal from "svelte-portal";
</script>

<Portal target="body">
  <div class="toast">Entity successfully updated!</div>
</Portal>

Usage portal action

The functionality can also be applied to DOM elements directly via a svelte action:

Example

<script>
  import { portal } from "svelte-portal";
</script>

<div class="toast" use:portal={"body"} hidden>Entity successfully updated!</div>

The hidden atrribute is only needed when using ssr, when portal has moved the element to it's targetted location it removes the hidden attribute.

TypeScript support

<script lang="ts"> users should import from "svelte-portal/src/Portal.svelte" instead of "svelte-portal" to get typing support.