create modal component
This commit is contained in:
parent
0f95f330ef
commit
4427a37e3e
6 changed files with 84 additions and 0 deletions
33
src/lib/components/Actions/Modal/Modal.stories.svelte
Normal file
33
src/lib/components/Actions/Modal/Modal.stories.svelte
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
<script module lang="ts">
|
||||||
|
import { defineMeta } from '@storybook/addon-svelte-csf';
|
||||||
|
import type { ComponentProps } from 'svelte';
|
||||||
|
import Modal from './Modal.svelte';
|
||||||
|
import ModalBody from './ModalBody.svelte';
|
||||||
|
import ModalActions from './ModalActions.svelte';
|
||||||
|
import Button from '../Button.svelte';
|
||||||
|
|
||||||
|
const { Story } = defineMeta({
|
||||||
|
title: 'Actions/Modal',
|
||||||
|
component: Modal,
|
||||||
|
argTypes: {
|
||||||
|
open: {
|
||||||
|
control: 'boolean',
|
||||||
|
defaultValue: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#snippet template({ children: _, ...props }: Partial<ComponentProps<typeof Modal>>)}
|
||||||
|
<Modal {...props}>
|
||||||
|
<ModalBody>
|
||||||
|
<h3 class="text-lg font-bold">Hello!</h3>
|
||||||
|
<p class="py-4">Press ESC key or click the button below to close</p>
|
||||||
|
<ModalActions>
|
||||||
|
<Button>Close</Button>
|
||||||
|
</ModalActions>
|
||||||
|
</ModalBody>
|
||||||
|
</Modal>
|
||||||
|
{/snippet}
|
||||||
|
|
||||||
|
<Story name="Default" children={template} />
|
||||||
21
src/lib/components/Actions/Modal/Modal.svelte
Normal file
21
src/lib/components/Actions/Modal/Modal.svelte
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import type { SvelteHTMLElements } from 'svelte/elements';
|
||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
type Props = SvelteHTMLElements['dialog'] & {
|
||||||
|
backdrop?: boolean;
|
||||||
|
dialog?: HTMLDialogElement;
|
||||||
|
};
|
||||||
|
|
||||||
|
let { backdrop, dialog = $bindable(), children, class: className, ...props }: Props = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<dialog {...props} class={twMerge('modal', clsx(className))} bind:this={dialog}>
|
||||||
|
{@render children?.()}
|
||||||
|
{#if backdrop}
|
||||||
|
<form method="dialog" class="modal-backdrop">
|
||||||
|
<button>close</button>
|
||||||
|
</form>
|
||||||
|
{/if}
|
||||||
|
</dialog>
|
||||||
13
src/lib/components/Actions/Modal/ModalActions.svelte
Normal file
13
src/lib/components/Actions/Modal/ModalActions.svelte
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import type { SvelteHTMLElements } from 'svelte/elements';
|
||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
type Props = SvelteHTMLElements['div'];
|
||||||
|
|
||||||
|
let { children, class: className, ...props }: Props = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {...props} class={twMerge('modal-action', clsx(className))}>
|
||||||
|
{@render children?.()}
|
||||||
|
</div>
|
||||||
13
src/lib/components/Actions/Modal/ModalBody.svelte
Normal file
13
src/lib/components/Actions/Modal/ModalBody.svelte
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import type { SvelteHTMLElements } from 'svelte/elements';
|
||||||
|
import { twMerge } from 'tailwind-merge';
|
||||||
|
|
||||||
|
type Props = SvelteHTMLElements['div'];
|
||||||
|
|
||||||
|
let { children, class: className, ...props }: Props = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {...props} class={twMerge('modal-box', clsx(className))}>
|
||||||
|
{@render children?.()}
|
||||||
|
</div>
|
||||||
3
src/lib/components/Actions/Modal/index.ts
Normal file
3
src/lib/components/Actions/Modal/index.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export { default as Modal } from './Modal.svelte';
|
||||||
|
export { default as ModalActions } from './ModalActions.svelte';
|
||||||
|
export { default as ModalBody } from './ModalBody.svelte';
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
export { default as Button } from './Button.svelte';
|
export { default as Button } from './Button.svelte';
|
||||||
|
export * from './Modal/';
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue