import BaseStyle from 'primevue/base/style'; const css = ` @layer primevue { .p-sidebar-mask { display: none; pointer-events: none; background-color: transparent; transition-property: background-color; } .p-sidebar-mask.p-component-overlay { pointer-events: auto; } .p-sidebar-visible { display: flex; } .p-sidebar { display: flex; flex-direction: column; pointer-events: auto; transform: translate3d(0px, 0px, 0px); position: relative; transition: transform 0.3s; } .p-sidebar-content { overflow-y: auto; flex-grow: 1; } .p-sidebar-header { display: flex; align-items: center; justify-content: flex-end; flex-shrink: 0; } .p-sidebar-icon { display: flex; align-items: center; justify-content: center; overflow: hidden; position: relative; } .p-sidebar-full .p-sidebar { transition: none; transform: none; width: 100vw !important; height: 100vh !important; max-height: 100%; top: 0px !important; left: 0px !important; } /* Animation */ /* Center */ .p-sidebar-left .p-sidebar-enter-from, .p-sidebar-left .p-sidebar-leave-to { transform: translateX(-100%); } .p-sidebar-right .p-sidebar-enter-from, .p-sidebar-right .p-sidebar-leave-to { transform: translateX(100%); } .p-sidebar-top .p-sidebar-enter-from, .p-sidebar-top .p-sidebar-leave-to { transform: translateY(-100%); } .p-sidebar-bottom .p-sidebar-enter-from, .p-sidebar-bottom .p-sidebar-leave-to { transform: translateY(100%); } .p-sidebar-full .p-sidebar-enter-from, .p-sidebar-full .p-sidebar-leave-to { opacity: 0; } .p-sidebar-full .p-sidebar-enter-active, .p-sidebar-full .p-sidebar-leave-active { transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1); } /* Size */ .p-sidebar-left .p-sidebar { width: 20rem; height: 100%; } .p-sidebar-right .p-sidebar { width: 20rem; height: 100%; } .p-sidebar-top .p-sidebar { height: 10rem; width: 100%; } .p-sidebar-bottom .p-sidebar { height: 10rem; width: 100%; } .p-sidebar-left .p-sidebar-sm, .p-sidebar-right .p-sidebar-sm { width: 20rem; } .p-sidebar-left .p-sidebar-md, .p-sidebar-right .p-sidebar-md { width: 40rem; } .p-sidebar-left .p-sidebar-lg, .p-sidebar-right .p-sidebar-lg { width: 60rem; } .p-sidebar-top .p-sidebar-sm, .p-sidebar-bottom .p-sidebar-sm { height: 10rem; } .p-sidebar-top .p-sidebar-md, .p-sidebar-bottom .p-sidebar-md { height: 20rem; } .p-sidebar-top .p-sidebar-lg, .p-sidebar-bottom .p-sidebar-lg { height: 30rem; } .p-sidebar-left .p-sidebar-content, .p-sidebar-right .p-sidebar-content, .p-sidebar-top .p-sidebar-content, .p-sidebar-bottom .p-sidebar-content { width: 100%; height: 100%; } @media screen and (max-width: 64em) { .p-sidebar-left .p-sidebar-lg, .p-sidebar-left .p-sidebar-md, .p-sidebar-right .p-sidebar-lg, .p-sidebar-right .p-sidebar-md { width: 20rem; } } } `; const inlineStyles = { mask: ({ position }) => ({ position: 'fixed', height: '100%', width: '100%', left: 0, top: 0, display: 'flex', justifyContent: position === 'left' ? 'flex-start' : position === 'right' ? 'flex-end' : 'center', alignItems: position === 'top' ? 'flex-start' : position === 'bottom' ? 'flex-end' : 'center' }) }; const classes = { mask: ({ instance, props }) => { const positions = ['left', 'right', 'top', 'bottom']; const pos = positions.find((item) => item === props.position); return [ 'p-sidebar-mask', { 'p-component-overlay p-component-overlay-enter': props.modal, 'p-sidebar-mask-scrollblocker': props.blockScroll, 'p-sidebar-visible': instance.containerVisible, 'p-sidebar-full': instance.fullScreen }, pos ? `p-sidebar-${pos}` : '' ]; }, root: ({ instance }) => [ 'p-sidebar p-component', { 'p-input-filled': instance.$primevue.config.inputStyle === 'filled', 'p-ripple-disabled': instance.$primevue.config.ripple === false, 'p-sidebar-full': instance.fullScreen } ], header: 'p-sidebar-header', headerContent: 'p-sidebar-header-content', closeButton: 'p-sidebar-close p-sidebar-icon p-link', closeIcon: 'p-sidebar-close-icon', content: 'p-sidebar-content' }; export default BaseStyle.extend({ name: 'sidebar', css, classes, inlineStyles });