@shopware-ag/meteor-component-library
Version:
The meteor component library is a Vue component library developed by Shopware. It is based on the [Meteor Design System](https://shopware.design/).
115 lines (84 loc) • 2.48 kB
text/mdx
import { Meta } from "@storybook/blocks";
import * as ModalStories from "./mt-modal.stories";
<Meta of={ModalStories} />
# mt-modal
A modal is a dialog box, displayed on top of the current page.
## How to use
In 99% of the cases you'll open a modal through a button. We
designed the component in a way to make this as easy as possible.
> **Note:** You need to wrap the modal components in a `mt-modal-root` component.
```html
<template>
<mt-modal-root>
<mt-modal title="Some random title">
<template #default>This is my modal</template>
<template #footer>
<mt-button-close :as="MtButton" variant="secondary">
Close
</mt-button-close>
</template>
</mt-modal>
<mt-modal-trigger :as="MtButton">Open modal</mt-modal-trigger>
</mt-modal-root>
</template>
```
If you need to do something before you close the modal, you can use
the `mt-modal-action` component like this:
```html
<template>
<!-- mt-modal-root and mt-modal are the same as above -->
<template #footer>
<mt-modal-action
:as="MtButton"
variant="primary"
@click="
(done) => {
// Do something like a network request
// Call `done` to close the modal
done();
}
"
>
Confirm action
</mt-modal-action>
</template>
</template>
```
## Controled state
Sometimes, you want to open a modal through something else than a button.
In this case, you can use the `isOpen` prop to control the modal state.
```html
<template>
<mt-modal-root :is-open="isOpen">
<mt-modal title="Some random title">
<template #default>This is my modal</template>
<template #footer>
<mt-button variant="secondary" @click="() => (isOpen = false)"
>Close</mt-button
>
</template>
</mt-modal>
</mt-modal-root>
</template>
<script setup>
const isOpen = ref(false);
onMounted(() => {
setTimeout(() => {
isOpen.value = true;
}, 1_000);
});
</script>
```
## API Reference
### `mt-modal-root`
The root component that wraps all related modal components.
It takes care of controlling if the modal is visible or not.
### `mt-modal`
The actual modal component.
### `mt-trigger`
An element that opens the modal, when clicked.
### `mt-modal-action`
Allows you to perform an action before closing the modal,
most of the time, this is used for a confirm action.
### `mt-modal-close`
Closes the button when clicked.