3.0.4 • Published 12 days ago

@288-toolkit/dismissable v3.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
12 days ago

Dismissable

pnpm i @288-toolkit/dismissable

This component shows its content after an optional timeout and registers dismissals in browser storage. It supports both a maximum age and a last update date. The content will show up again if the dismissal is expired or if the content has been updated since the last dismissal.

It is useful for a banner or a cookie consent popup, for example.

Props

key

Used to identify the content being dismissed in browser storage.

export let key: string;

timeout

The delay in milliseconds before the content shows up.

export let timeout = 0;

lastUpdatedAt

The date of the last update of the content.

export let lastUpdatedAt: Maybe<Date> = null;

maxAge

The maximum age of the dismissal in seconds. The content will show up again after this time has passed.

export let maxAge = 0;

browserStorage

Whether to use sessionStorage or localStorage.

export let browserStorage: 'local' | 'session' = 'local';

closeOnNav

Whether to close the content when navigating to another page.

export let closeOnNav = false;

close

A function to close the popup without persistence.

export const close: () => void;

dismiss

A function to dismiss the popup for the provided maxAge.

export const dismiss: () => void;

isDismissed

A function to check if the popup is dismissed.

export const isDismissed: () => boolean;

Slot props

  • close (() => void): A function to close the popup.
  • dismiss (() => void): A function to dismiss the popup.
  • dismissed (boolean): Wether the popup is dimissed.

Examples

The default storage is localStorage, but you can also use sessionStorage.

<script lang="ts">
	import { Dismissable } from '@288-toolkit/dismissable';
</script>

<Dismissable key="forever" browserStorage="session" let:close>
	<div>This content can be dismissed once per session.</div>
	<button on:click={close}>Dismiss</button>
</Dismissable>

You can dismiss the content based on a maximum age in seconds.

<script lang="ts">
	import { Dismissable } from '@288-toolkit/dismissable';
</script>

<Dismissable key="maxage" maxAge={5} let:close>
	<div>This content can be dismissed for 5 seconds</div>
	<button on:click={close}>Dismiss</button>
</Dismissable>

The content will be back as soon as lastUpdatedAt prop is sooner then the last dismissal.

<script lang="ts">
	import { Dismissable } from '@288-toolkit/dismissable';
</script>

<Dismissable key="lastUpdate" maxAge={300} lastUpdatedAt={new Date(Date.now() + 1000)} let:close>
	<div>
		This content can be dismissed for 300 seconds, but it won't since its lastUpdatedAt is in
		the future.
	</div>
	<button on:click={close}>Dismiss</button>
</Dismissable>

You can also use animations in or out.

<script lang="ts">
	import { Dismissable } from '@288-toolkit/dismissable';
	import { fly } from 'svelte/transition';
</script>

<Dismissable key="animated" maxAge={5} let:close>
	<div in:fly={{ y: 0, duration: 500 }} out:fly={{ y: -100, duration: 200 }}>
		<button on:click={close}>Dismiss</button>
	</div>
</Dismissable>
3.0.4

12 days ago

3.0.3

12 days ago

3.0.2

12 days ago

3.0.1

12 days ago

3.0.0

13 days ago

2.0.0

13 days ago

1.0.2

18 days ago

1.0.1

18 days ago

1.0.0

18 days ago