Skip to content

Commit

Permalink
feat(Modal): add prevent-close prop
Browse files Browse the repository at this point in the history
Resolves #303
  • Loading branch information
benjamincanac committed Jul 12, 2023
1 parent e08263f commit 2cc5c0d
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 1 deletion.
15 changes: 15 additions & 0 deletions docs/components/content/examples/ModalExampleDisableOverlay.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<script setup>
const isOpen = ref(false)
</script>

<template>
<div>
<UButton label="Open" @click="isOpen = true" />

<UModal v-model="isOpen" :overlay="false">
<div class="p-4">
<Placeholder class="h-48" />
</div>
</UModal>
</div>
</template>
15 changes: 15 additions & 0 deletions docs/components/content/examples/ModalExampleDisableTransition.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<script setup>
const isOpen = ref(false)
</script>

<template>
<div>
<UButton label="Open" @click="isOpen = true" />

<UModal v-model="isOpen" :transition="false">
<div class="p-4">
<Placeholder class="h-48" />
</div>
</UModal>
</div>
</template>
24 changes: 24 additions & 0 deletions docs/components/content/examples/ModalExamplePreventClose.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<script setup>
const isOpen = ref(false)
</script>

<template>
<div>
<UButton label="Open" @click="isOpen = true" />

<UModal v-model="isOpen" prevent-close>
<UCard :ui="{ ring: '', divide: 'divide-y divide-gray-100 dark:divide-gray-800' }">
<template #header>
<div class="flex items-center justify-between">
<h3 class="text-base font-semibold leading-6 text-gray-900 dark:text-white">
Modal
</h3>
<UButton color="gray" variant="ghost" icon="i-heroicons-x-mark-20-solid" class="-my-1" @click="isOpen = false" />
</div>
</template>

<Placeholder class="h-32" />
</UCard>
</UModal>
</div>
</template>
89 changes: 89 additions & 0 deletions docs/content/6.overlays/1.modal.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ headlessui:

## Usage

Use a `v-model` to control the Modal state.

::component-example
#default
:modal-example-basic
Expand Down Expand Up @@ -64,6 +66,93 @@ const isOpen = ref(false)
```
::

### Disable overlay

::component-example
#default
:modal-example-disable-overlay

#code
```vue
<script setup>
const isOpen = ref(false)
</script>
<template>
<div>
<UButton label="Open" @click="isOpen = true" />
<UModal v-model="isOpen" :overlay="false">
<div class="p-4">
<Placeholder class="h-48" />
</div>
</UModal>
</div>
</template>
```
::

### Disable transition

::component-example
#default
:modal-example-disable-transition

#code
```vue
<script setup>
const isOpen = ref(false)
</script>
<template>
<div>
<UButton label="Open" @click="isOpen = true" />
<UModal v-model="isOpen" :transition="false">
<div class="p-4">
<Placeholder class="h-48" />
</div>
</UModal>
</div>
</template>
```
::

### Prevent close

::component-example
#default
:modal-example-prevent-close

#code
```vue
<script setup>
const isOpen = ref(false)
</script>
<template>
<div>
<UButton label="Open" @click="isOpen = true" />
<UModal v-model="isOpen" prevent-close>
<UCard :ui="{ ring: '', divide: 'divide-y divide-gray-100 dark:divide-gray-800' }">
<template #header>
<div class="flex items-center justify-between">
<h3 class="text-base font-semibold leading-6 text-gray-900 dark:text-white">
Modal
</h3>
<UButton color="gray" variant="ghost" icon="i-heroicons-x-mark-20-solid" class="-my-1" @click="isOpen = false" />
</div>
</template>
<Placeholder class="h-32" />
</UCard>
</UModal>
</div>
</template>
```
::

## Props

:component-props
Expand Down
7 changes: 6 additions & 1 deletion src/runtime/components/overlays/Modal.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<TransitionRoot :appear="appear" :show="isOpen" as="template">
<HDialog :class="ui.wrapper" @close="close">
<HDialog :class="ui.wrapper" @close="(e) => !preventClose && close(e)">
<TransitionChild v-if="overlay" as="template" :appear="appear" v-bind="ui.overlay.transition">
<div :class="[ui.overlay.base, ui.overlay.background]" />
</TransitionChild>
Expand Down Expand Up @@ -54,6 +54,10 @@ export default defineComponent({
type: Boolean,
default: true
},
preventClose: {
type: Boolean,
default: false
},
ui: {
type: Object as PropType<Partial<typeof appConfig.ui.modal>>,
default: () => appConfig.ui.modal
Expand Down Expand Up @@ -87,6 +91,7 @@ export default defineComponent({
function close (value: boolean) {
isOpen.value = value
emit('close')
}
Expand Down

0 comments on commit 2cc5c0d

Please sign in to comment.