From 89c81809422afc6949066900529c4c1753801bf4 Mon Sep 17 00:00:00 2001 From: Selemondev Date: Tue, 1 Aug 2023 21:47:01 +0300 Subject: [PATCH] feat(app): #38 modal This pull request is intended to close issue #38 by adding the modal component Closes: #38 --- packages/windi/src/App.vue | 15 ++- .../src/Types/componentsTypes/components.ts | 15 +++ packages/windi/src/Types/enums/Components.ts | 1 + .../windi/src/components/Modal/WModal.vue | 107 ++++++++++++++++++ packages/windi/src/components/Modal/index.ts | 5 + packages/windi/src/index.ts | 3 + packages/windi/src/theme/windiTheme.ts | 33 ++++++ 7 files changed, 176 insertions(+), 3 deletions(-) create mode 100644 packages/windi/src/components/Modal/WModal.vue create mode 100644 packages/windi/src/components/Modal/index.ts diff --git a/packages/windi/src/App.vue b/packages/windi/src/App.vue index 84c3d05..1d4a253 100644 --- a/packages/windi/src/App.vue +++ b/packages/windi/src/App.vue @@ -1,11 +1,20 @@ diff --git a/packages/windi/src/Types/componentsTypes/components.ts b/packages/windi/src/Types/componentsTypes/components.ts index fb59267..b140be2 100644 --- a/packages/windi/src/Types/componentsTypes/components.ts +++ b/packages/windi/src/Types/componentsTypes/components.ts @@ -145,6 +145,19 @@ export interface WTag extends WComponentRoot { tagCloseIcon?: string } +export interface WModal extends WComponentRoot { + modalWrapper?: string + modalContainer?: string + modalBase?: string + modalOverlayBase?: string + modalOverlayBackground?: string + modalOverlayTransition?: string + modalShadow?: string + modalWidth?: string + modalHeight?: string + modalTransition?: string +} + export type WAccordionVariant = WithVariantProps export type WAccordionItemVariants = WithVariantProps @@ -176,3 +189,5 @@ export type WDividerVariants = WithVariantProps export type WSwitchVariants = WithVariantProps export type WTagVariants = WithVariantProps + +export type WModalVariants = WithVariantProps diff --git a/packages/windi/src/Types/enums/Components.ts b/packages/windi/src/Types/enums/Components.ts index eaed06c..f062abf 100644 --- a/packages/windi/src/Types/enums/Components.ts +++ b/packages/windi/src/Types/enums/Components.ts @@ -15,4 +15,5 @@ export enum Components { WDivider = 'WDivider', WSwitch = 'WSwitch', WTag = 'WTag', + WModal = 'WModal', } diff --git a/packages/windi/src/components/Modal/WModal.vue b/packages/windi/src/components/Modal/WModal.vue new file mode 100644 index 0000000..13040b6 --- /dev/null +++ b/packages/windi/src/components/Modal/WModal.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/packages/windi/src/components/Modal/index.ts b/packages/windi/src/components/Modal/index.ts new file mode 100644 index 0000000..03e8b77 --- /dev/null +++ b/packages/windi/src/components/Modal/index.ts @@ -0,0 +1,5 @@ +import Modal from './WModal.vue' + +export default { + Modal, +} diff --git a/packages/windi/src/index.ts b/packages/windi/src/index.ts index 5740b9d..e1a7c25 100644 --- a/packages/windi/src/index.ts +++ b/packages/windi/src/index.ts @@ -18,6 +18,7 @@ import Divider from './components/Divider/WDivider.vue' import Switch from './components/Switch/WSwitch.vue' import Tag from './components/Tag/WTag.vue' import windiTheme from './theme/windiTheme' +import Modal from './components/Modal/WModal.vue' const components: Record> = { Accordion, @@ -36,6 +37,7 @@ const components: Record> = { Divider, Switch, Tag, + Modal, } function install(app: App, configuration: WindiUIConfiguration) { @@ -62,3 +64,4 @@ export { default as Checkbox } from './components/Checkbox' export { default as Divider } from './components/Divider' export { default as Switch } from './components/Switch' export { default as Tag } from './components/Tag' +export { default as Modal } from './components/Modal' diff --git a/packages/windi/src/theme/windiTheme.ts b/packages/windi/src/theme/windiTheme.ts index d584ee4..890a68a 100644 --- a/packages/windi/src/theme/windiTheme.ts +++ b/packages/windi/src/theme/windiTheme.ts @@ -806,6 +806,39 @@ export default { }, }, + WModal: { + base: { + root: 'relative z-50', + modalWrapper: 'fixed inset-0 overflow-y-auto', + modalContainer: 'flex min-h-full items-end justify-center text-center p-4 sm:p-0 sm:items-center', + modalBase: 'relative text-left rtl:text-right overflow-hidden sm:my-8 w-full flex flex-col', + modalShadow: 'shadow-xl', + modalWidth: 'sm:max-w-lg', + modalBackground: 'bg-background', + modalRing: '', + modalRounded: 'rounded-lg', + modalHeight: '', + modalOverlayBase: 'fixed inset-0 transition-opacity', + modalOverlayBackground: 'bg-gray-200/75 dark:bg-gray-800/75', + modalOverlayTransition: { + enter: 'ease-out duration-300', + enterFrom: 'opacity-0', + enterTo: 'opacity-100', + leave: 'ease-in duration-200', + leaveFrom: 'opacity-100', + leaveTo: 'opacity-0', + }, + modalTransition: { + 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', + }, + }, + }, + transitions: { scale: { 'enter-active-class': 'duration-200 ease-[cubic-bezier(0.175,0.885,0.32,1.475)]',