tdesign-react
Version:
TDesign Component for React
225 lines (188 loc) • 5.49 kB
text/less
.content-placement-top {
.@{prefix}-popup[data-popper-placement^="top"] {
.@{prefix}-popup__content {
margin-bottom: @popup-content-margin;
&--arrow {
margin-bottom: @popup-content-arrow-spacer;
}
}
}
}
.content-placement-bottom {
.@{prefix}-popup[data-popper-placement^="bottom"] {
.@{prefix}-popup__content {
margin-top: @popup-content-margin;
&--arrow {
margin-top: @popup-content-arrow-spacer;
}
}
}
}
.content-placement-left {
.@{prefix}-popup[data-popper-placement^="left"] {
.@{prefix}-popup__content {
margin-right: @popup-content-margin;
&--arrow {
margin-right: @popup-content-arrow-spacer;
}
&--text {
max-width: 480px;
}
}
}
}
.content-placement-right {
.@{prefix}-popup[data-popper-placement^="right"] {
.@{prefix}-popup__content {
margin-left: @popup-content-margin;
&--arrow {
margin-left: @popup-content-arrow-spacer;
}
&--text {
max-width: 480px;
}
}
}
}
.arrow-placement-top() {
.@{prefix}-popup[data-popper-placement^="top"] .@{prefix}-popup__arrow {
&::before {
border-top-left-radius: 100%;
box-shadow: @popup-top-arrow-shadow;
}
}
.@{prefix}-popup[data-popper-placement="top-start"] .@{prefix}-popup__arrow {
left: @popup-arrow-width;
}
.@{prefix}-popup[data-popper-placement="top"] .@{prefix}-popup__arrow {
left: 50%;
margin-left: calc(-@popup-arrow-width / 2);
}
.@{prefix}-popup[data-popper-placement="top-end"] .@{prefix}-popup__arrow {
left: calc(100% - @popup-arrow-width * 2);
}
}
.arrow-placement-bottom() {
.@{prefix}-popup[data-popper-placement^="bottom"] .@{prefix}-popup__arrow {
top: calc(-@popup-arrow-width / 2);
&::before {
border-bottom-right-radius: 100%;
box-shadow: @popup-bottom-arrow-shadow;
}
}
.@{prefix}-popup[data-popper-placement="bottom-start"] .@{prefix}-popup__arrow {
left: @popup-arrow-width;
}
.@{prefix}-popup[data-popper-placement="bottom"] .@{prefix}-popup__arrow {
left: 50%;
margin-left: calc(-@popup-arrow-width / 2);
}
.@{prefix}-popup[data-popper-placement="bottom-end"] .@{prefix}-popup__arrow {
left: calc(100% - @popup-arrow-width * 2);
}
}
.arrow-placement-left() {
.@{prefix}-popup[data-popper-placement^="left"] .@{prefix}-popup__arrow {
right: calc(-@popup-arrow-width / 2);
&::before {
box-shadow: @popup-left-arrow-shadow;
}
}
.@{prefix}-popup[data-popper-placement="left-start"] .@{prefix}-popup__arrow {
top: @popup-arrow-width;
}
.@{prefix}-popup[data-popper-placement="left"] .@{prefix}-popup__arrow {
top: 50%;
margin-top: calc(-@popup-arrow-width / 2);
}
.@{prefix}-popup[data-popper-placement="left-end"] .@{prefix}-popup__arrow {
top: calc(100% - @popup-arrow-width * 2);
}
}
.arrow-placement-right() {
.@{prefix}-popup[data-popper-placement^="right"] .@{prefix}-popup__arrow {
left: calc(-@popup-arrow-width / 2);
&::before {
box-shadow: @popup-right-arrow-shadow;
}
}
.@{prefix}-popup[data-popper-placement="right-start"] .@{prefix}-popup__arrow {
top: @popup-arrow-width;
}
.@{prefix}-popup[data-popper-placement="right"] .@{prefix}-popup__arrow {
top: 50%;
margin-top: calc(-@popup-arrow-width / 2);
}
.@{prefix}-popup[data-popper-placement="right-end"] .@{prefix}-popup__arrow {
top: calc(100% - @popup-arrow-width * 2);
}
}
// @placement: bottom | top | right
.expand-animation(@placement, @prefix-cls, @dom-attrs: ~'') {
@keyframe-name: "t-popup-animation-expand";
@clip-path-endpoint-tl: -20% 0;
@clip-path-endpoint-tr: 120% 0;
@clip-path-endpoint-br: 120% 120%;
@clip-path-endpoint-bl: -20% 120%;
@clip-path-rect: polygon(
@clip-path-endpoint-tl,
@clip-path-endpoint-tr,
@clip-path-endpoint-br,
@clip-path-endpoint-bl
);
@clip-path-top: polygon(
@clip-path-endpoint-tl,
@clip-path-endpoint-tr,
@clip-path-endpoint-tr,
@clip-path-endpoint-tl
);
@clip-path-bottom: polygon(
@clip-path-endpoint-bl,
@clip-path-endpoint-br,
@clip-path-endpoint-br,
@clip-path-endpoint-bl
);
@clip-path-left: polygon(
@clip-path-endpoint-tl,
@clip-path-endpoint-tl,
@clip-path-endpoint-bl,
@clip-path-endpoint-bl
);
.@{popup-flow}-@{prefix-cls}-enter-active@{dom-attrs} {
animation: ~"@{keyframe-name}-in-@{placement}" @popup-flow-duration @anim-time-fn-easing,
t-fade-in @popup-flow-duration linear;
}
.@{popup-flow}-@{prefix-cls}-leave-active@{dom-attrs} {
animation: ~"@{keyframe-name}-out-@{placement}" @popup-flow-duration @anim-time-fn-easing,
t-fade-out @popup-flow-duration @anim-time-fn-ease-out;
}
.keyframe(@start-path) {
@keyframe-in-name: ~"@{keyframe-name}-in-@{placement}";
@keyframe-out-name: ~"@{keyframe-name}-out-@{placement}";
@keyframes @keyframe-in-name {
0% {
clip-path: @start-path;
}
100% {
clip-path: @clip-path-rect;
}
}
@keyframes @keyframe-out-name {
0% {
clip-path: @clip-path-rect;
}
100% {
clip-path: @start-path;
}
}
}
& when (@placement = top) {
.keyframe(@clip-path-bottom);
}
& when (@placement = bottom) {
.keyframe(@clip-path-top);
}
& when (@placement = right) {
.keyframe(@clip-path-left);
}
}