index.js•4.51 kB
export default {
    root: ({ props }) => ({
        class: [
            // Flexbox
            'flex flex-col',
            // Position
            'relative',
            { '!transition-none !transform-none !w-screen !h-screen !max-h-full !top-0 !left-0': props.position == 'full' },
            // Size
            {
                'h-full w-full max-w-[28rem]': props.position == 'left' || props.position == 'right',
                'h-auto w-full': props.position == 'top' || props.position == 'bottom'
            },
            // Shape
            'border-0 dark:border',
            'shadow-xl',
            // Colors
            'bg-surface-0 dark:bg-surface-800',
            'text-surface-700 dark:text-white/80',
            'dark:border-surface-700',
            // Transitions
            'transition-transform',
            'duration-300',
            // Misc
            'pointer-events-auto'
        ]
    }),
    header: {
        class: [
            // Flexbox and Alignment
            'flex items-center justify-between',
            'shrink-0',
            // Spacing
            'px-6 pt-6',
            // Colors
            'bg-surface-0 dark:bg-surface-800',
            'text-surface-700 dark:text-surface-0/80'
        ]
    },
    title: {
        class: ['font-semibold leading-6 text-base m-0']
    },
    icons: {
        class: ['flex items-center']
    },
    closeButton: {
        class: [
            'relative',
            // Flexbox and Alignment
            'flex items-center justify-center',
            // Size and Spacing
            'mr-2',
            'last:mr-0',
            'w-6 h-6',
            // Shape
            'border-0',
            'rounded-full',
            // Colors
            'text-surface-500',
            'bg-transparent',
            // Transitions
            'transition duration-200 ease-in-out',
            // States
            'hover:text-surface-700 dark:hover:text-white/80',
            'hover:bg-surface-100 dark:hover:bg-surface-800/80',
            'focus:outline-none focus:outline-offset-0 focus:ring-1 focus:ring-inset',
            'focus:ring-primary-500 dark:focus:ring-primary-400',
            // Misc
            'overflow-hidden'
        ]
    },
    closeicon: {
        class: [
            // Display
            'inline-block',
            // Size
            'w-3',
            'h-3'
        ]
    },
    content: {
        class: [
            // Spacing and Size
            'px-6 pb-6',
            'mt-6',
            'h-full',
            'w-full',
            // Growth and Overflow
            'grow',
            'overflow-y-auto'
        ]
    },
    mask: ({ props }) => ({
        class: [
            // Transitions
            'transition',
            'duration-300',
            { 'p-5': !props.position == 'full' },
            // Background and Effects
            { 'has-[.mask-active]:bg-transparent dark:has-[.mask-active]:bg-transparent bg-surface-500/70 dark:bg-surface-700/70': props.modal, 'has-[.mask-active]:backdrop-blur-none backdrop-blur-sm': props.modal }
        ]
    }),
    transition: ({ props }) => {
        return props.position === 'top'
            ? {
                  enterFromClass: 'translate-x-0 -translate-y-full translate-z-0 mask-active',
                  leaveToClass: 'translate-x-0 -translate-y-full translate-z-0 mask-active'
              }
            : props.position === 'bottom'
            ? {
                  enterFromClass: 'translate-x-0 translate-y-full translate-z-0 mask-active',
                  leaveToClass: 'translate-x-0 translate-y-full translate-z-0 mask-active'
              }
            : props.position === 'left'
            ? {
                  enterFromClass: '-translate-x-full translate-y-0 translate-z-0 mask-active',
                  leaveToClass: '-translate-x-full translate-y-0 translate-z-0 mask-active'
              }
            : props.position === 'right'
            ? {
                  enterFromClass: 'translate-x-full translate-y-0 translate-z-0 mask-active',
                  leaveToClass: 'translate-x-full translate-y-0 translate-z-0 mask-active'
              }
            : {
                  enterFromClass: 'opacity-0 mask-active',
                  enterActiveClass: 'transition-opacity duration-400 ease-in',
                  leaveActiveClass: 'transition-opacity duration-400 ease-in',
                  leaveToClass: 'opacity-0 mask-active'
              };
    }
};