fomantic-ui
Version:
Fomantic empowers designers and developers by creating a shared vocabulary for UI.
726 lines (700 loc) • 22.8 kB
text/less
/*!
* # Fomantic-UI - Toast
* https://github.com/fomantic/Fomantic-UI/
*
*
* Released under the MIT license
* https://opensource.org/licenses/MIT
*
*/
/*******************************
Theme
*******************************/
@type: "module";
@element: "toast";
@import (multiple) "../../theme.config";
/*******************************
Toast container
*******************************/
.ui.toast-container {
position: fixed;
z-index: 9999;
&.absolute {
position: absolute;
}
&.ui.attached when (@variationToastAttached) {
width: 100%;
left: 0;
& .vertical.attached when (@variationToastVertical) {
border-radius: 0;
}
&.ui.ui .attached.actions .button when (@variationToastActions) {
border-radius: 0;
}
& .toast-box {
margin: 0;
width: 100%;
border-radius: 0;
& > .ui.toast,
> .ui.message {
margin-left: 0;
}
& when (@variationToastFloating) {
&.floating,
&.hoverfloating:hover {
border: none;
}
}
& > .vertical > .content when (@variationToastVertical) {
flex: 1;
}
& > * {
width: 100%;
border-radius: 0;
& > .vertical:not(.actions) when (@variationToastVertical) {
flex: 1;
}
}
& > .attached.actions when (@variationToastActions) {
margin-right: @toastLeftRightMargin;
}
}
&.top when (@variationToastTop) {
top: 0;
}
&.bottom when (@variationToastBottom) {
bottom: 0;
}
}
&.top when (@variationToastTop) {
&.right when (@variationToastRight) {
top: @toastContainerDistance;
right: @toastContainerDistance;
margin-left: @toastContainerDistance;
}
&.left when (@variationToastLeft) {
top: @toastContainerDistance;
left: @toastContainerDistance;
margin-right: @toastContainerDistance;
}
&.center when (@variationToastCenter) {
left: 50%;
transform: translate(-50%, 0);
top: @toastContainerDistance;
}
}
&.bottom when (@variationToastBottom) {
&.right when (@variationToastRight) {
bottom: @toastContainerDistance;
right: @toastContainerDistance;
margin-left: @toastContainerDistance;
}
&.left when (@variationToastLeft) {
bottom: @toastContainerDistance;
left: @toastContainerDistance;
margin-right: @toastContainerDistance;
}
&.center when (@variationToastCenter) {
left: 50%;
transform: translate(-50%, 0);
bottom: @toastContainerDistance;
}
}
&.centered when (@variationToastCentered) {
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
}
& .visible.toast-box,
.animating.toast-box,
.toast-box {
display: table ;
}
&.horizontal when (@variationToastHorizontal) {
display: flex;
flex-direction: row;
& .toast-box {
margin-right: @toastBoxMarginRight;
}
}
& .toast-box {
margin-bottom: @toastBoxMarginBottom;
border-radius: @defaultBorderRadius;
cursor: default;
will-change: transform, opacity;
&:hover {
opacity: @toastOpacityOnHover;
}
&:not(.unclickable):hover {
cursor: @toastCursorOnHover;
}
& when (@variationToastFloating) {
&.floating,
&.hoverfloating:hover {
box-shadow: @floatingShadow;
border: @toastBoxBorder;
}
& when (@variationToastInverted) {
&.inverted.floating,
&.inverted.hoverfloating:hover {
box-shadow: @invertedFloatingShadow;
border: @invertedToastBoxBorder;
}
}
}
& when (@variationToastCompact) {
&.compact,
> .compact {
width: @toastWidth;
}
}
& > .ui.toast,
> .ui.message {
margin: @toastMargin;
position: relative;
}
& > .attached.progress when (@variationToastProgress) {
z-index: 1;
&.bottom {
margin: @toastMarginProgress -@toastLeftRightMargin @toastMarginBottom;
}
&.top {
margin: @toastMarginBottom -@toastLeftRightMargin @toastMarginProgress;
}
& .bar {
min-width: 0;
}
&.info .bar.bar.bar {
background: @toastInfoProgressColor;
}
&.warning .bar.bar.bar {
background: @toastWarningProgressColor;
}
&.success .bar.bar.bar {
background: @toastSuccessProgressColor;
}
&.error .bar.bar.bar {
background: @toastErrorProgressColor;
}
&.neutral .bar.bar.bar {
background: @toastNeutralProgressColor;
}
}
& > .ui.message when (@variationToastMessage) {
& > .close.icon when (@variationToastClose) {
top: @toastCloseTopDistance;
right: @toastCloseRightDistance;
}
& > .actions:last-child when (@variationToastActions) {
margin-bottom: @toastActionMargin;
}
&.icon when (@variationToastIcon) {
align-items: inherit;
& > :not(.icon):not(.actions) {
padding-left: @toastIconMessageContentPadding;
}
& > i.icon:not(.close) when (@variationToastIcon) {
display: inline-block;
position: absolute;
width: @toastIconMessageWidth;
top: 50%;
transform: translateY(-50%);
}
&:not(.vertical) {
&.actions > i.icon:not(.close) when (@variationToastActions) and (@variationToastIcon) {
top: e(%("calc(50%% - %d)", @toastIconCenteredAdjustment));
transform: none;
}
&.icon.icon.icon when (@variationToastIcon) {
display: block;
}
}
}
}
& .ui.toast {
& > .close.icon when (@variationToastClose) {
cursor: pointer;
margin: 0;
opacity: @toastCloseOpacity;
transition: @toastCloseTransition;
&:hover {
opacity: 1;
}
}
&.vertical > .close.icon when (@variationToastVertical) and (@variationToastClose) {
margin-top: -@toastCloseTopDistance;
margin-right: -@toastCloseTopDistance;
}
&:not(.vertical) > .close.icon when (@variationToastClose) {
position: absolute;
top: @toastCloseTopDistance;
&:not(.left) {
right: @toastCloseRightDistance;
}
&.left {
margin-left: -@toastCloseRightDistance;
}
}
}
& .ui.card when (@variationToastCard) {
margin: 0;
&.attached:not(.vertical) when (@variationToastAttached) {
&.bottom {
border-top-left-radius: 0;
border-top-right-radius: 0;
&.horizontal {
& > .image > img {
border-top-left-radius: 0;
}
& > .image:last-child > img {
border-top-right-radius: 0;
}
}
}
&.top {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
&.horizontal {
& > .image > img {
border-bottom-left-radius: 0;
}
& > .image:last-child > img {
border-bottom-right-radius: 0;
}
}
}
}
&.horizontal.actions when (@variationToastActions) {
& > .image > img {
border-bottom-left-radius: 0;
}
& > .image:last-child > img {
border-bottom-right-radius: 0;
}
}
}
& .progressing {
animation-iteration-count: 1;
animation-timing-function: linear;
& when (@variationToastProgress) {
&.up {
animation-name: progressUp;
}
&.down {
animation-name: progressDown;
}
}
&.wait {
animation-name: progressWait;
}
}
&:hover .pausable.progressing {
animation-play-state: paused;
}
& .ui.toast:not(.vertical) {
display: block;
}
& :not(.comment) {
&:not(.card) .actions when (@variationToastActions) {
margin: @toastActionMarginTop @toastActionMargin @toastActionMargin @toastActionMargin;
}
& .actions when (@variationToastActions) {
padding: @toastActionPadding @toastActionPadding @toastActionPaddingBottom @toastActionPadding;
text-align: right;
&.attached:not(.vertical) when (@variationToastAttached) {
margin-right: @toastLeftRightMargin;
}
&:not(.basic):not(.attached) {
background: @toastActionBackground;
border-top: @toastActionBorder;
}
&.left {
text-align: left;
}
}
}
& when (@variationToastVertical) {
& .vertical.actions > .button,
& > .vertical > .vertical.vertical,
& > .vertical.vertical.vertical {
display: flex;
}
}
& :not(.comment) .vertical.actions when (@variationToastVertical) and (@variationToastActions) {
flex-direction: column;
& > .button {
justify-content: center;
}
&.attached > .button when (@variationToastAttached) {
align-items: center;
}
&:not(.attached) {
border-top: 0;
margin-top: -@toastActionPaddingBottom;
margin-bottom: -@toastActionPaddingBottom;
margin-left: @toastActionMarginLeft;
justify-content: space-around;
&:not(.basic) {
border-left: @toastActionBorder;
}
& > .button:not(:last-child) {
margin-bottom: @toastActionMarginBottom;
}
&.top {
justify-content: flex-start;
}
&.bottom {
justify-content: flex-end;
}
}
}
}
}
.ui.vertical.attached when (@variationToastVertical) and (@variationToastAttached) {
&:not(.left) {
&.card when (@variationToastCard) {
& > .image > img {
border-top-right-radius: 0;
}
&.horizontal > .image:last-child > img {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
&.card,
&.toast {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
&.actions when (@variationToastActions) {
border-top-right-radius: @toastBorderRadius;
border-bottom-right-radius: @toastBorderRadius;
& .button:first-child,
.button:last-child {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
&.message when (@variationToastMessage) {
border-top-right-radius: 0;
border-bottom-left-radius: @toastBorderRadius;
}
}
&.left {
&.card when (@variationToastCard) {
& > .image > img {
border-top-left-radius: 0;
}
&.horizontal > .image > img {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
&.card,
&.toast {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
&.actions when (@variationToastActions) {
border-top-left-radius: @toastBorderRadius;
border-bottom-left-radius: @toastBorderRadius;
& .button:first-child,
.button:last-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
}
&.message.message.message when (@variationToastMessage) {
border-top-right-radius: @toastBorderRadius;
border-bottom-right-radius: @toastBorderRadius;
}
}
}
.ui.attached:not(.vertical) when (@variationToastAttached) {
&:not(.top) {
&.actions when (@variationToastActions) {
border-bottom-left-radius: @toastBorderRadius;
border-bottom-right-radius: @toastBorderRadius;
& .button:first-child {
border-bottom-left-radius: @toastBorderRadius;
}
& .button:last-child {
border-bottom-right-radius: @toastBorderRadius;
}
}
}
&.top {
&.actions when (@variationToastActions) {
border-top-left-radius: @toastBorderRadius;
border-top-right-radius: @toastBorderRadius;
& .button:first-child {
border-top-left-radius: @toastBorderRadius;
}
& .button:last-child {
border-top-right-radius: @toastBorderRadius;
}
}
}
}
/*******************************
Toast
*******************************/
.ui.toast {
display: none;
border-radius: @defaultBorderRadius;
padding: @toastPadding;
margin: @toastMargin;
color: @toastInvertedTextColor;
background-color: @toastNeutralColor;
& > .content > .header {
font-weight: bold;
color: inherit;
margin: 0;
}
&.info when (@variationToastInfo) {
background-color: @toastInfoColor;
color: @toastTextColor;
}
&.warning when (@variationToastWarning) {
background-color: @toastWarningColor;
color: @toastTextColor;
}
&.success when (@variationToastSuccess) {
background-color: @toastSuccessColor;
color: @toastTextColor;
}
&.error when (@variationToastError) {
background-color: @toastErrorColor;
color: @toastTextColor;
}
&.neutral {
background-color: @toastNeutralColor;
color: @toastNeutralTextColor;
}
& > i.icon:not(.close) when (@variationToastIcon) {
font-size: @toastIconFontSize;
}
&:not(.vertical) {
&:not(.centered):not(.center) {
& > i.icon:not(.close) when (@variationToastIcon) {
position: absolute;
}
& > .ui.image when (@variationToastImage) {
position: absolute;
}
}
& > i.icon:not(.close) when (@variationToastIcon) {
& + .content {
padding-left: @toastIconContentPadding;
}
}
& > .close.icon + .content when (@variationToastClose) {
padding-left: @toastCloseDistance;
}
& > .ui.image when (@variationToastImage) {
&.avatar + .content {
padding-left: @toastAvatarImageContentPadding;
min-height: @toastAvatarImageHeight;
}
&.mini + .content {
padding-left: @toastMiniImageContentPadding;
min-height: @toastMiniImageHeight;
}
&.tiny + .content {
padding-left: @toastTinyImageContentPadding;
min-height: @toastTinyImageHeight;
}
&.small + .content {
padding-left: @toastSmallImageContentPadding;
min-height: @toastSmallImageHeight;
}
}
&:not(.centered):not(.center) when (@variationToastImage) or (@variationToastIcon) {
& > .centered.image,
> .centered.icon {
transform: translateY(-50%);
top: 50%;
}
}
&.actions > .centered.image when (@variationToastActions) and (@variationToastImage) {
top: e(%("calc(50%% - %d)", @toastImageCenteredAdjustment));
}
&.actions > .centered.icon when (@variationToastActions) and (@variationToastIcon) {
top: e(%("calc(50%% - %d)", @toastIconCenteredAdjustment));
}
}
&.vertical when (@variationToastVertical) {
& > .content {
flex-grow: 1;
}
&.attached when (@variationToastAttached) {
flex-grow: 1;
}
& > .close.icon + .content when (@variationToastClose) {
padding-left: @toastCloseDistanceVertical;
}
& when (@variationToastImage) or (@variationToastIcon) {
& > .ui.image + .content,
> i.icon:not(.close) + .content {
padding-left: @toastImageContentPadding;
}
}
& > .ui.image when (@variationToastImage) {
align-self: flex-start;
flex-shrink: 0; /* IE11 fix */
}
& when (@variationToastImage) or (@variationToastIcon) {
& > .centered.image,
> .centered.icon {
align-self: center;
}
}
}
&.attached when (@variationToastAttached) {
&.bottom {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
&.top {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
}
&.ui.ui.ui.image when (@variationToastImage) {
padding: 0;
& > .content {
padding-top: @inputVerticalPadding;
padding-bottom: @inputVerticalPadding;
padding-right: @inputHorizontalPadding;
}
& > .actions when (@variationToastActions) {
margin: 0;
}
& > .ui.image {
border-top-left-radius: @defaultBorderRadius;
border-bottom-left-radius: @defaultBorderRadius;
&.mini {
min-width: @toastImageMiniImageAdjustment;
& + .content {
min-height: @toastImageMiniImageAdjustment;
padding-left: @toastImageMiniImagePadding;
}
}
}
}
}
.ui.hoverfloating.message:hover when (@variationToastMessage) and (@variationToastFloating) {
box-shadow:
0 0 0 1px inset,
@floatingShadow;
}
.ui.center.toast-container .toast-box,
.ui.right.toast-container .toast-box {
margin-left: auto;
}
.ui.center.toast-container .toast-box {
margin-right: auto;
}
& when (@variationToastCentered) {
.ui.ui.toast-container .toast-box .centered.toast,
.ui.ui.toast-container .toast-box .center.aligned.toast {
text-align: center;
display: flex;
justify-content: center;
& > .content,
& > .ui.image,
& > i.icon:not(.close) {
align-self: center;
}
}
.ui.toast-container .toast-box .toast .centered.content,
.ui.toast-container .toast-box .toast .center.aligned.content {
text-align: center;
}
.ui.toast-container .toast-box .centered.actions,
.ui.toast-container .toast-box .center.aligned.actions {
text-align: center;
&:not(.attached) > .button:not(.fluid) {
margin-left: @toastActionCenteredMargin;
margin-right: @toastActionCenteredMargin;
}
}
}
/* --------------
Colors
-------------- */
& when not (@variationToastColors = false) {
each(@variationToastColors, {
@color: @value;
@c: @colors[@@color][color];
@l: @colors[@@color][light];
.ui.@{color}.toast {
background-color: @c;
color: @toastTextColor;
}
& when (@variationToastInverted) {
.ui.inverted.@{color}.toast,
.ui.toast-container .toast-box > .inverted.@{color}.attached.progress .bar {
background-color: @l;
color: @toastInvertedTextColor;
}
}
});
}
& when (@variationToastInverted) {
.ui.inverted.toast {
color: @toastTextColor;
background-color: @toastInvertedColor;
}
}
@media only screen and (max-width: @mobileToastBreakpoint) {
.ui.toast-container .toast-box {
&.toast-box,
& > .compact,
& > .vertical > *,
& > * {
width: auto;
max-width: 100%;
}
& > *:not(.vertical) {
min-width: @mobileWidth;
}
& when (@variationToastCard) {
& > .ui.card.horizontal,
> .vertical > .ui.horizontal.card {
min-width: initial;
}
}
}
}
/* ---------------
Progress Bar
---------------- */
& when (@variationToastProgress) {
@keyframes progressDown {
0% {
width: 100%;
}
100% {
width: 0;
}
}
@keyframes progressUp {
0% {
width: 0;
}
100% {
width: 100%;
}
}
}
@keyframes progressWait {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
// stylelint-disable no-invalid-position-at-import-rule
@import (multiple, optional) "../../overrides.less";