forked from melt-ui/melt-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Popover overlay (melt-ui#1025)
- Loading branch information
1 parent
b9e8486
commit ebd638a
Showing
5 changed files
with
227 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"@melt-ui/svelte": minor | ||
--- | ||
|
||
Popover: add optional `overlay` element builder for simplified modal behavior (part of #1018) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
<script lang="ts"> | ||
import { createPopover, melt } from '$lib/index.js'; | ||
import { fade } from 'svelte/transition'; | ||
import { Settings2, X } from '$icons/index.js'; | ||
const { | ||
elements: { trigger, content, arrow, close, overlay }, | ||
states: { open }, | ||
} = createPopover({ | ||
forceVisible: true, | ||
preventScroll: true, | ||
}); | ||
</script> | ||
|
||
<button | ||
type="button" | ||
class="trigger" | ||
use:melt={$trigger} | ||
aria-label="Update dimensions" | ||
> | ||
<Settings2 class="size-4" /> | ||
<span class="sr-only">Open Popover</span> | ||
</button> | ||
|
||
{#if $open} | ||
<div use:melt={$overlay} class="fixed inset-0 z-40" /> | ||
<div | ||
use:melt={$content} | ||
transition:fade={{ duration: 100 }} | ||
class="force-dark content" | ||
> | ||
<div use:melt={$arrow} /> | ||
<div class="flex flex-col gap-2.5"> | ||
<p>Dimensions</p> | ||
<fieldset> | ||
<label for="width">Width</label> | ||
<input type="number" id="width" class="input" placeholder="Width" /> | ||
</fieldset> | ||
<fieldset> | ||
<label for="height">Height</label> | ||
<input type="number" id="height" class="input" placeholder="Height" /> | ||
</fieldset> | ||
<fieldset> | ||
<label for="depth">Depth</label> | ||
<input type="number" id="depth" class="input" placeholder="Depth" /> | ||
</fieldset> | ||
<fieldset> | ||
<label for="weight">Weight</label> | ||
<input type="number" id="weight" class="input" placeholder="Weight" /> | ||
</fieldset> | ||
</div> | ||
<button class="close" use:melt={$close}> | ||
<X class="size-4" /> | ||
</button> | ||
</div> | ||
{/if} | ||
|
||
<style lang="postcss"> | ||
fieldset { | ||
@apply flex items-center gap-5; | ||
} | ||
label { | ||
@apply w-[75px] text-sm text-neutral-700; | ||
} | ||
p { | ||
@apply mb-2 font-medium text-neutral-900; | ||
} | ||
.input { | ||
@apply flex h-8 w-full rounded-md border border-magnum-800 bg-transparent px-2.5 text-sm; | ||
@apply ring-offset-magnum-300 focus-visible:ring; | ||
@apply focus-visible:ring-magnum-400 focus-visible:ring-offset-1; | ||
@apply flex-1 items-center justify-center; | ||
@apply px-2.5 text-sm leading-none text-magnum-700; | ||
} | ||
.trigger { | ||
@apply inline-flex h-9 w-9 items-center justify-center rounded-full bg-white p-0; | ||
@apply text-sm font-medium text-magnum-900 transition-colors hover:bg-white/90; | ||
@apply focus-visible:ring focus-visible:ring-magnum-400 focus-visible:ring-offset-2; | ||
} | ||
.close { | ||
@apply absolute right-1.5 top-1.5 flex h-7 w-7 items-center justify-center rounded-full; | ||
@apply text-magnum-900 transition-colors hover:bg-magnum-500/10; | ||
@apply focus-visible:ring focus-visible:ring-magnum-400 focus-visible:ring-offset-2; | ||
@apply bg-white p-0 text-sm font-medium; | ||
} | ||
.content { | ||
@apply z-40 w-60 rounded-[4px] bg-white p-5 shadow-sm; | ||
} | ||
</style> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters