modal-g
Version:
gantd modal
207 lines (173 loc) • 5.08 kB
text/less
@gant-prefix: gant;
@component: ~'@{gant-prefix}-modal';
@activeIconColor: var(--modal-header-icon-hover-color);
// 对角方向
@diagonalDirections: rightTop, rightBottom, leftBottom, leftTop;
// 坐标轴方向
@axialDirections: top, right, bottom, left;
@diagonalSize: 20px;
@diagonalOffset: 12px;
@axialSize: 10px;
@axialcOffset: @axialSize / 2;
// Modal
:root {
--modal-highlight-color: #f00;
--modal-body-padding: 10px;
--modal-header-bg: #fff;
--modal-footer-bg: transparent;
--modal-footer-reset-color: rgba(0, 0, 0, 1);
--modal-footer-border-color-split: rgba(0,0,0,0.45);
--modal-mask-bg: rgba(0,0,0,0.45);
--modal-header-bg: #fff;
--modal-header-color: rgba(0, 0, 0, 0.65);
--modal-header-hover-color: rgba(0, 0, 0, 1);
--modal-header-icon-hover-color: #fff;
--modal-header-danger-icon-bg: #f00;
--modal-header-default-icon-bg: rgba(0, 0, 0, 0.3);
}
html {
.@{component}-resizableModalWrapper{
.ant-modal-header {
padding: 4px ;
}
.ant-modal-close-x {
width: 30px;
height: 30px;
line-height: 30px;
}
.ant-modal-body {
padding: 10px;
}
.ant-modal-title {
font-size: 14px;
font-weight: bold;
}
.ant-modal-confirm-body {
padding-bottom: 30px;
}
.ant-modal-confirm {
.ant-modal-confirm-btns {
margin-top: 0px;
}
.ant-modal-body {
padding: 10px ;
}
}
.ant-modal-footer{
padding:3px;
}
}
}
.diagonalPositionMixin(@direction){
top: if((@direction=leftTop) or (@direction=rightTop), -@diagonalOffset, none);
right: if((@direction=rightTop) or (@direction=rightBottom), -@diagonalOffset, none);
bottom: if((@direction=rightBottom) or (@direction=leftBottom), -@diagonalOffset, none);
left: if((@direction=leftBottom) or (@direction=leftTop), -@diagonalOffset, none);
cursor: if((@direction=leftBottom) or (@direction=rightTop), ne-resize, se-resize);
z-index: 11;
}
.axialPositionMixin(@direction){
top: if(@direction=top, -@axialcOffset, if((@direction=left) or (@direction=right), @diagonalOffset, none));
right: if(@direction=right, -@axialcOffset, none);
bottom: if(@direction=bottom, -@axialcOffset, none);
left: if(@direction=left, -@axialcOffset, none);
cursor: if(@direction=top, n-resize, if(@direction=right, e-resize, if(@direction=bottom, s-resize, w-resize)));
width:if((@direction=top) or (@direction=bottom), calc(100% - @diagonalSize), @axialSize);
height:if((@direction=top) or (@direction=bottom), @axialSize, calc(100% - @diagonalSize));
z-index: 11;
}
.@{component} {
&-resizableModalDefault {
pointer-events: none;
}
&-resizableModalDialog {
pointer-events: auto;
}
&-resizableModalWrapper {
overflow: hidden ;
.ant-modal {
display: flex;
max-width: none;
// transform-origin: 50% 50% !important;
}
.ant-modal-content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.ant-modal-close {
transition: none;
}
.ant-modal-close-x {
&:hover {
background-color: var(--modal-header-danger-icon-bg);
i {
color: @activeIconColor;
}
}
&:active {
background-color: var(--modal-highlight-color);
i {
color: @activeIconColor;
}
}
}
}
.ant-modal-body {
flex: 1;
overflow-y: auto;
}
.@{component}-resizableModalTitle {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.@{component}-canDrag {
cursor: move;
}
.@{component}-resizableModalContent {
height: 100%;
}
.@{component}-maximizeAnchor {
right: 30px;
width: 30px;
top: 0;
cursor: pointer;
height: 30px;
position: absolute;
.gant-input-wrapper {
font-size: 16px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: var(--modal-header-color);
}
&:hover {
background-color: var(--modal-header-default-icon-bg);
i {
color: @activeIconColor;
}
}
}
each(@diagonalDirections, {
.@{component}-@{value}-resizeAnchor {
.diagonalPositionMixin(@value);
width: @diagonalSize;
height: @diagonalSize;
position: absolute;
}
})
each(@axialDirections, {
.@{component}-@{value}-resizeAnchor {
.axialPositionMixin(@value);
position: absolute;
}
})
}
&-maximize {
.ant-modal-content {
border-radius: 0;
}
}
}