zp-bee
Version:
zp-bee,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
303 lines (261 loc) • 4.85 kB
text/less
@import '../../style/themes/default.less';
.org-tree-container {
display: inline-block;
padding: 15px;
background-color: @white;
}
.org-tree {
display: table;
text-align: center;
&:before,
&:after {
content: '';
display: table;
}
&:after {
clear: both;
}
}
.org-tree-node,
.org-tree-node-children {
position: relative;
margin: 0 auto;
padding: 20px 5px 0 5px;
list-style-type: none;
&:before,
&:after {
transition: all 0.35s;
}
}
.org-tree-node-label {
position: relative;
display: inline-block;
box-sizing: border-box;
.org-tree-node-label-inner {
box-sizing: border-box;
padding: 10px 15px;
text-align: center;
border-radius: 3px;
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15);
}
}
.org-tree-node-btn {
position: absolute;
top: 100%;
left: 50%;
width: 20px;
height: 20px;
z-index: 10;
margin-left: -10px;
margin-top: 9px;
background-color: @white;
border: 1px solid @gray;
border-radius: 50%;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.15);
cursor: pointer;
transition: all 0.35s ease;
&:hover {
background-color: @gray-hover;
transform: scale(1.15);
}
&:before,
&:after {
content: '';
position: absolute;
}
&:before {
top: 50%;
left: 4px;
right: 4px;
height: 0;
border-top: 1px solid @gray;
}
&:after {
top: 4px;
left: 50%;
bottom: 4px;
width: 0;
border-left: 1px solid @gray;
}
&.expanded:after {
border: none;
}
}
.org-tree-node {
padding-top: 20px;
display: table-cell;
vertical-align: top;
&.is-leaf,
&.collapsed {
padding-left: 10px;
padding-right: 10px;
}
&:before,
&:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 50%;
height: 19px;
}
&:after {
left: 50%;
border-left: 1px solid @gray-1;
}
&:not(:first-child):before,
&:not(:last-child):after {
border-top: 1px solid @gray-1;
}
}
.collapsable .org-tree-node.collapsed {
padding-bottom: 30px;
.org-tree-node-label:after {
content: '';
position: absolute;
top: 100%;
left: 0;
width: 50%;
height: 20px;
border-right: 1px solid @gray-1;
}
}
.org-tree > .org-tree-node {
padding-top: 0;
&:after {
border-left: 0;
}
}
.org-tree-node-children {
padding-top: 20px;
display: table;
&:before {
content: '';
position: absolute;
top: 0;
left: 50%;
width: 0;
height: 20px;
border-left: 1px solid @gray-1;
}
&:after {
content: '';
display: table;
clear: both;
}
}
.horizontal {
.org-tree-node {
display: table-cell;
float: none;
padding-top: 0;
padding-left: 20px;
&.is-leaf,
&.collapsed {
padding-top: 10px;
padding-bottom: 10px;
}
&:before,
&:after {
width: 19px;
height: 50%;
}
&:after {
top: 50%;
left: 0;
border-left: 0;
}
&:only-child:before {
top: 1px;
border-bottom: 1px solid @gray-1;
}
&:not(:first-child):before,
&:not(:last-child):after {
border-top: 0;
border-left: 1px solid @gray-1;
}
&:not(:only-child):after {
border-top: 1px solid @gray-1;
}
.org-tree-node-inner {
display: table;
}
}
.org-tree-node-label {
display: table-cell;
vertical-align: middle;
}
&.collapsable .org-tree-node.collapsed {
padding-right: 30px;
.org-tree-node-label:after {
top: 0;
left: 100%;
width: 20px;
height: 50%;
border-right: 0;
border-bottom: 1px solid @gray-1;
}
}
.org-tree-node-btn {
top: 50%;
left: 100%;
margin-top: -11px;
margin-left: 9px;
}
& > .org-tree-node:only-child:before {
border-bottom: 0;
}
.org-tree-node-children {
display: table-cell;
padding-top: 0;
padding-left: 20px;
&:before {
top: 50%;
left: 0;
width: 20px;
height: 0;
border-left: 0;
border-top: 1px solid #ddd;
}
&:after {
display: none;
}
& > .org-tree-node {
display: block;
}
}
}
.text-center {
text-align: center;
}
.org-tree-node-condition {
position: relative;
background: @pink-background;
border: 1px dashed @pink-border;
border-radius: 4px;
padding: 4px 10px;
margin-bottom: 20px;
text-align: center;
z-index: 1;
&::after {
content: '';
position: absolute;
bottom: -20px;
left: 50%;
width: 0;
height: 20px;
border-left: 1px solid #ddd;
}
}
.org-tree-node-active {
box-sizing: border-box;
background: fade(@primary-color, 10);
box-shadow: 0 0 2px 0 @primary-color;
}
.org-tree-node-cursor {
cursor: pointer;
border: 1px solid @primary-color;
}
.@{zp-prefix}-inline-block {
display: inline-block;
}