import { css } from 'styled-components'; import { VariantOfType } from '../../variants'; export const ModalPortalCss = css` position: fixed; left: 0; top: 0; right: 0; bottom: 0; display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 10000; `; export const ModalBackdropCss = css` position: fixed; inset: 0px; background-color: rgba(0, 0, 0, 0.3); z-index: 10000; opacity: 0; transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; &[data-enter] { opacity: 1; } &[data-leave] { opacity: 0; } `; export const ModalDialogCss = css` position: fixed; display: flex; flex-direction: column; row-gap: 1rem; height: fit-content; max-height: calc(100vh - 2 * 0.75rem); max-width: 28rem; overflow: auto; inset: 0.75rem; padding: 1.5rem 2rem; border-radius: 2rem; color: var(--color-neutral-900); box-shadow: var(--shadow-lg); font-size: 1rem; background-color: var(--color-neutral-100); // box-sizing: border-box; margin: auto; z-index: 10000; // inset: 0.75rem; // color-scheme: light; opacity: 0; transition-property: opacity, transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); // cubic-bezier(0.1, 0.6, 0.1, 1); transition-duration: 150ms; // 400ms &[data-enter] { opacity: 1; } &[data-leave] { opacity: 0; } --gap: 3rem; &.top { top: var(--gap); } &.top-left { top: var(--gap); left: var(--gap); } &.top-right { top: var(--gap); right: var(--gap); } &.right { right: var(--gap); } &.bottom { bottom: var(--gap); } &.bottom-left { bottom: var(--gap); left: var(--gap); } &.bottom-right { bottom: var(--gap); right: var(--gap); } &.left { left: var(--gap); } &.center { &, &[data-leave] { transform: translate3d(0, var(--gap), 0); } &[data-enter] { transform: translate3d(0, 0, 0); } } `; export const ModalHeaderCss = css` flex-shrink: 0; display: inline-flex; justify-content: space-between; align-items: center; width: 100%; padding-bottom: 0.5rem; `; export const ModalTitleCss = css` `; export const ModalContentCss = css` position: relative; display: flex; flex-direction: column; row-gap: 1rem; padding-bottom: 1rem; font-size: 1rem; text-align: left; `; export const ModalFooterCss = css` flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; width: 100%; padding: 0.5rem 0; `; export const modalVariants = { default: { backdrop: ModalBackdropCss, content: ModalContentCss, dialog: ModalDialogCss, footer: ModalFooterCss, header: ModalHeaderCss, portal: ModalPortalCss, title: ModalTitleCss, }, }; export type IModalVariants = VariantOfType;