@knadh/oat
Version:
124 lines (104 loc) • 2.79 kB
CSS
@layer components {
.toast-container {
position: fixed;
display: flex;
flex-direction: column;
pointer-events: none;
margin: 0;
padding: 0;
border: none;
background: transparent;
overflow: visible;
&::backdrop {
display: none;
}
&[data-placement="top-left"] {
inset: var(--space-4) auto auto var(--space-4);
}
&[data-placement="top-center"] {
inset: var(--space-4) auto auto 50%;
transform: translateX(-50%);
}
&[data-placement="top-right"] {
inset: var(--space-4) var(--space-4) auto auto;
}
&[data-placement="bottom-left"] {
inset: auto auto var(--space-4) var(--space-4);
flex-direction: column-reverse;
}
&[data-placement="bottom-center"] {
inset: auto auto var(--space-4) 50%;
transform: translateX(-50%);
flex-direction: column-reverse;
}
&[data-placement="bottom-right"] {
inset: auto var(--space-4) var(--space-4) auto;
flex-direction: column-reverse;
}
}
.toast {
--transition: 300ms;
--transition-in: calc(var(--transition) - 50ms);
padding: var(--space-5) var(--space-4);
max-width: 28rem;
min-width: 20rem;
pointer-events: auto;
background-color: var(--card);
border: 1px solid var(--border);
border-inline-start-width: var(--space-1);
border-inline-start-style: solid;
border-radius: var(--radius-medium);
box-shadow: var(--shadow-small);
transition: opacity var(--transition-in), transform var(--transition-in), margin var(--transition-in);
line-height: 1;
.toast-title {
font-weight: 600;
margin: 0 0 var(--space-3) 0;
}
.toast-message {
color: var(--muted-foreground);
}
&[data-variant="success"] {
border-inline-start-color: var(--success);
.toast-title {
color: var(--success);
}
}
&[data-variant="danger"] {
border-inline-start-color: var(--danger);
.toast-title {
color: var(--danger);
}
}
&[data-variant="warning"] {
border-inline-start-color: var(--warning);
.toast-title {
color: var(--warning);
}
}
& > [data-close] {
margin-inline-start: auto;
background: none;
border: none;
padding: 0;
cursor: pointer;
opacity: 0.5;
&:hover {
opacity: 1;
}
}
margin: var(--space-2) 0;
&[data-entering] {
opacity: 0;
transform: translateY(-1rem);
}
&[data-exiting] {
opacity: 0;
margin: 0;
padding-block: 0;
max-height: 0;
overflow: hidden;
transition: opacity var(--transition), margin var(--transition), padding var(--transition), max-height var(--transition);
}
}
}