diff --git a/src/runtime/components/overlays/Modal.vue b/src/runtime/components/overlays/Modal.vue index 16c23df3..4640c1d3 100644 --- a/src/runtime/components/overlays/Modal.vue +++ b/src/runtime/components/overlays/Modal.vue @@ -7,7 +7,7 @@ :appear="appear" v-bind="overlayTransition" > -
+
@@ -78,9 +78,13 @@ const props = defineProps({ type: Boolean, default: true }, - overlayClass: { + overlayBackgroundClass: { type: String, - default: () => $ui.modal.overlay + default: () => $ui.modal.overlay.background + }, + overlayTransitionClass: { + type: Object, + default: () => $ui.modal.overlay.transition }, shadowClass: { type: String, @@ -101,6 +105,10 @@ const props = defineProps({ transition: { type: Boolean, default: true + }, + transitionClass: { + type: Object, + default: () => $ui.modal.transition } }) @@ -131,14 +139,7 @@ const overlayTransition = computed(() => { return {} } - return { - enter: 'ease-out duration-300', - enterFrom: 'opacity-0', - enterTo: 'opacity-100', - leave: 'ease-in duration-200', - leaveFrom: 'opacity-100', - leaveTo: 'opacity-0' - } + return props.overlayTransitionClass }) const modalTransition = computed(() => { @@ -146,14 +147,7 @@ const modalTransition = computed(() => { return {} } - return { - enter: 'ease-out duration-300', - enterFrom: 'opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95', - enterTo: 'opacity-100 translate-y-0 sm:scale-100', - leave: 'ease-in duration-200', - leaveFrom: 'opacity-100 translate-y-0 sm:scale-100', - leaveTo: 'opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95' - } + return props.transitionClass }) function close (value: boolean) { diff --git a/src/runtime/components/overlays/Slideover.vue b/src/runtime/components/overlays/Slideover.vue index d2bfdaa3..124d7ee8 100644 --- a/src/runtime/components/overlays/Slideover.vue +++ b/src/runtime/components/overlays/Slideover.vue @@ -8,25 +8,20 @@ @close="isOpen = false" > -
+
@@ -64,9 +59,17 @@ const props = defineProps({ type: String, default: () => $ui.slideover.background }, - overlayClass: { + overlay: { + type: Boolean, + default: true + }, + overlayBackgroundClass: { type: String, - default: () => $ui.slideover.overlay + default: () => $ui.slideover.overlay.background + }, + overlayTransitionClass: { + type: Object, + default: () => $ui.slideover.overlay.transition }, widthClass: { type: String, @@ -75,8 +78,13 @@ const props = defineProps({ headerClass: { type: String, default: () => $ui.slideover.header + }, + transitionClass: { + type: Object, + default: () => $ui.slideover.transition } }) + const emit = defineEmits(['update:modelValue']) const isOpen: WritableComputedRef = computed({ diff --git a/src/runtime/presets/default.ts b/src/runtime/presets/default.ts index 910a304c..357118b7 100644 --- a/src/runtime/presets/default.ts +++ b/src/runtime/presets/default.ts @@ -253,12 +253,30 @@ export default (variantColors: string[]) => { container: 'flex min-h-full items-end sm:items-center justify-center p-4 sm:p-0 text-center', base: 'relative inline-block align-bottom text-left overflow-hidden transform transition-all sm:my-8 sm:align-middle w-full', background: 'u-bg-white', - overlay: 'bg-gray-500/75 dark:bg-gray-600/75', + overlay: { + background: 'bg-gray-500/75 dark:bg-gray-600/75', + transition: { + enter: 'ease-out duration-300', + enterFrom: 'opacity-0', + enterTo: 'opacity-100', + leave: 'ease-in duration-200', + leaveFrom: 'opacity-100', + leaveTo: 'opacity-0' + } + }, border: '', ring: '', rounded: 'rounded-lg', shadow: 'shadow-xl', - width: 'sm:max-w-lg' + width: 'sm:max-w-lg', + transition: { + enter: 'ease-out duration-300', + enterFrom: 'opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95', + enterTo: 'opacity-100 translate-y-0 sm:scale-100', + leave: 'ease-in duration-200', + leaveFrom: 'opacity-100 translate-y-0 sm:scale-100', + leaveTo: 'opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95' + } } const container = { @@ -402,11 +420,25 @@ export default (variantColors: string[]) => { } const slideover = { - overlay: 'bg-gray-500/75 dark:bg-gray-600/75', + overlay: { + background: 'bg-gray-500/75 dark:bg-gray-600/75', + transition: { + enter: 'ease-in-out duration-500', + enterFrom: 'opacity-0', + enterTo: 'opacity-100', + leave: 'ease-in-out duration-500', + leaveFrom: 'opacity-100', + leaveTo: 'opacity-0' + } + }, base: 'relative flex-1 flex flex-col w-full focus:outline-none', background: 'u-bg-white', width: 'max-w-md', - header: 'flex items-center justify-between flex-shrink-0 px-4 sm:px-6 h-16 border-b u-border-gray-200' + header: 'flex items-center justify-between flex-shrink-0 px-4 sm:px-6 h-16 border-b u-border-gray-200', + transition: { + enter: 'transform transition ease-in-out duration-500 sm:duration-700', + leave: 'transform transition ease-in-out duration-500 sm:duration-700' + } } const notification = {