From 5835eb5f0f835b5f03646dec78f85b2f556a109b Mon Sep 17 00:00:00 2001 From: Joseph Anson Date: Wed, 28 May 2025 14:57:12 +0100 Subject: [PATCH] feat(Modal/Slideover): add `close` method in slots (#4219) Co-authored-by: Benjamin Canac --- .../examples/modal/ModalFooterSlotExample.vue | 4 +-- .../slideover/SlideoverFooterSlotExample.vue | 4 +-- docs/content/3.components/modal.md | 4 +-- docs/content/3.components/slideover.md | 4 +-- playground/app/pages/components/modal.vue | 8 +++++ playground/app/pages/components/slideover.vue | 16 ++++++++++ src/runtime/components/Modal.vue | 31 ++++++++++--------- src/runtime/components/Slideover.vue | 31 ++++++++++--------- 8 files changed, 64 insertions(+), 38 deletions(-) diff --git a/docs/app/components/content/examples/modal/ModalFooterSlotExample.vue b/docs/app/components/content/examples/modal/ModalFooterSlotExample.vue index 08047cbc..ab9dfc7e 100644 --- a/docs/app/components/content/examples/modal/ModalFooterSlotExample.vue +++ b/docs/app/components/content/examples/modal/ModalFooterSlotExample.vue @@ -10,8 +10,8 @@ const open = ref(false) - - diff --git a/playground/app/pages/components/slideover.vue b/playground/app/pages/components/slideover.vue index c14e196c..c10326a0 100644 --- a/playground/app/pages/components/slideover.vue +++ b/playground/app/pages/components/slideover.vue @@ -125,5 +125,21 @@ function openSlideover() { + + + + + + + + + + diff --git a/src/runtime/components/Modal.vue b/src/runtime/components/Modal.vue index 7108b601..b56b5f23 100644 --- a/src/runtime/components/Modal.vue +++ b/src/runtime/components/Modal.vue @@ -61,13 +61,13 @@ export interface ModalEmits extends DialogRootEmits { export interface ModalSlots { default(props: { open: boolean }): any - content(props?: {}): any - header(props?: {}): any + content(props: { close: () => void }): any + header(props: { close: () => void }): any title(props?: {}): any description(props?: {}): any - close(props: { ui: { [K in keyof Required]: (props?: Record) => string } }): any - body(props?: {}): any - footer(props?: {}): any + close(props: { close: () => void, ui: { [K in keyof Required]: (props?: Record) => string } }): any + body(props: { close: () => void }): any + footer(props: { close: () => void }): any } @@ -124,8 +124,9 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.modal || {}) })) +