naive-ui
Version:
A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast
227 lines • 7.01 kB
JavaScript
import { c, cB, cE, cM } from "../../../_utils/cssr/index.mjs";
// vars:
// --n-color
// --n-text-color
// --n-description-text-color
// --n-action-text-color
// --n-title-text-color
// --n-title-font-weight
// --n-title-font-size
// --n-meta-font-size
// --n-description-font-size
// --n-bezier
// --n-bezier-ease-out
// --n-bezier-ease-in
// --n-border-radius
// --n-box-shadow
// --n-close-margin
// --n-close-size
// --n-close-icon-size
// --n-close-color-hover
// --n-close-color-pressed
// --n-close-icon-color
// --n-close-icon-color-hover
// --n-close-icon-color-pressed
// --n-line-height
// --n-icon-color
// --n-width
// --n-padding-top
// --n-padding-bottom
// --n-padding-left
// --n-padding-right
export default c([cB('notification-container', `
z-index: 4000;
position: fixed;
overflow: visible;
display: flex;
flex-direction: column;
align-items: flex-end;
`, [c('>', [cB('scrollbar', `
width: initial;
overflow: visible;
height: -moz-fit-content !important;
height: fit-content !important;
max-height: 100vh !important;
`, [c('>', [cB('scrollbar-container', `
height: -moz-fit-content !important;
height: fit-content !important;
max-height: 100vh !important;
`, [cB('scrollbar-content', `
padding-top: 12px;
padding-bottom: 33px;
`)])])])]), cM('top, top-right, top-left', `
top: 12px;
`, [c('&.transitioning >', [cB('scrollbar', [c('>', [cB('scrollbar-container', `
min-height: 100vh !important;
`)])])])]), cM('bottom, bottom-right, bottom-left', `
bottom: 12px;
`, [c('>', [cB('scrollbar', [c('>', [cB('scrollbar-container', [cB('scrollbar-content', `
padding-bottom: 12px;
`)])])])]), cB('notification-wrapper', `
display: flex;
align-items: flex-end;
margin-bottom: 0;
margin-top: 12px;
`)]), cM('top, bottom', `
left: 50%;
transform: translateX(-50%);
`, [cB('notification-wrapper', [c('&.notification-transition-enter-from, &.notification-transition-leave-to', `
transform: scale(0.85);
`), c('&.notification-transition-leave-from, &.notification-transition-enter-to', `
transform: scale(1);
`)])]), cM('top', [cB('notification-wrapper', `
transform-origin: top center;
`)]), cM('bottom', [cB('notification-wrapper', `
transform-origin: bottom center;
`)]), cM('top-right, bottom-right', [cB('notification', `
margin-left: 28px;
margin-right: 16px;
`)]), cM('top-left, bottom-left', [cB('notification', `
margin-left: 16px;
margin-right: 28px;
`)]), cM('top-right', `
right: 0;
`, [placementTransformStyle('top-right')]), cM('top-left', `
left: 0;
`, [placementTransformStyle('top-left')]), cM('bottom-right', `
right: 0;
`, [placementTransformStyle('bottom-right')]), cM('bottom-left', `
left: 0;
`, [placementTransformStyle('bottom-left')]), cM('scrollable', [cM('top-right', `
top: 0;
`), cM('top-left', `
top: 0;
`), cM('bottom-right', `
bottom: 0;
`), cM('bottom-left', `
bottom: 0;
`)]), cB('notification-wrapper', `
margin-bottom: 12px;
`, [c('&.notification-transition-enter-from, &.notification-transition-leave-to', `
opacity: 0;
margin-top: 0 !important;
margin-bottom: 0 !important;
`), c('&.notification-transition-leave-from, &.notification-transition-enter-to', `
opacity: 1;
`), c('&.notification-transition-leave-active', `
transition:
background-color .3s var(--n-bezier),
color .3s var(--n-bezier),
opacity .3s var(--n-bezier),
transform .3s var(--n-bezier-ease-in),
max-height .3s var(--n-bezier),
margin-top .3s linear,
margin-bottom .3s linear,
box-shadow .3s var(--n-bezier);
`), c('&.notification-transition-enter-active', `
transition:
background-color .3s var(--n-bezier),
color .3s var(--n-bezier),
opacity .3s var(--n-bezier),
transform .3s var(--n-bezier-ease-out),
max-height .3s var(--n-bezier),
margin-top .3s linear,
margin-bottom .3s linear,
box-shadow .3s var(--n-bezier);
`)]), cB('notification', `
background-color: var(--n-color);
color: var(--n-text-color);
transition:
background-color .3s var(--n-bezier),
color .3s var(--n-bezier),
opacity .3s var(--n-bezier),
box-shadow .3s var(--n-bezier);
font-family: inherit;
font-size: var(--n-font-size);
font-weight: 400;
position: relative;
display: flex;
overflow: hidden;
flex-shrink: 0;
padding-left: var(--n-padding-left);
padding-right: var(--n-padding-right);
width: var(--n-width);
max-width: calc(100vw - 16px - 16px);
border-radius: var(--n-border-radius);
box-shadow: var(--n-box-shadow);
box-sizing: border-box;
opacity: 1;
`, [cE('avatar', [cB('icon', `
color: var(--n-icon-color);
`), cB('base-icon', `
color: var(--n-icon-color);
`)]), cM('show-avatar', [cB('notification-main', `
margin-left: 40px;
width: calc(100% - 40px);
`)]), cM('closable', [cB('notification-main', [c('> *:first-child', `
padding-right: 20px;
`)]), cE('close', `
position: absolute;
top: 0;
right: 0;
margin: var(--n-close-margin);
transition:
background-color .3s var(--n-bezier),
color .3s var(--n-bezier);
`)]), cE('avatar', `
position: absolute;
top: var(--n-padding-top);
left: var(--n-padding-left);
width: 28px;
height: 28px;
font-size: 28px;
display: flex;
align-items: center;
justify-content: center;
`, [cB('icon', 'transition: color .3s var(--n-bezier);')]), cB('notification-main', `
padding-top: var(--n-padding-top);
padding-bottom: var(--n-padding-bottom);
box-sizing: border-box;
display: flex;
flex-direction: column;
margin-left: 8px;
width: calc(100% - 8px);
`, [cB('notification-main-footer', `
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 12px;
`, [cE('meta', `
font-size: var(--n-meta-font-size);
transition: color .3s var(--n-bezier-ease-out);
color: var(--n-description-text-color);
`), cE('action', `
cursor: pointer;
transition: color .3s var(--n-bezier-ease-out);
color: var(--n-action-text-color);
`)]), cE('header', `
font-weight: var(--n-title-font-weight);
font-size: var(--n-title-font-size);
transition: color .3s var(--n-bezier-ease-out);
color: var(--n-title-text-color);
`), cE('description', `
margin-top: 8px;
font-size: var(--n-description-font-size);
white-space: pre-wrap;
word-wrap: break-word;
transition: color .3s var(--n-bezier-ease-out);
color: var(--n-description-text-color);
`), cE('content', `
line-height: var(--n-line-height);
margin: 12px 0 0 0;
font-family: inherit;
white-space: pre-wrap;
word-wrap: break-word;
transition: color .3s var(--n-bezier-ease-out);
color: var(--n-text-color);
`, [c('&:first-child', 'margin: 0;')])])])])]);
function placementTransformStyle(placement) {
const direction = placement.split('-')[1];
const transformXEnter = direction === 'left' ? 'calc(-100%)' : 'calc(100%)';
const transformXLeave = '0';
return cB('notification-wrapper', [c('&.notification-transition-enter-from, &.notification-transition-leave-to', `
transform: translate(${transformXEnter}, 0);
`), c('&.notification-transition-leave-from, &.notification-transition-enter-to', `
transform: translate(${transformXLeave}, 0);
`)]);
}