react-url-table
Version:
Smart and flexible table component built with React and for React projects. based on React16 hooks and mobx-react-lite
199 lines (170 loc) • 6.08 kB
CSS
:root {
--accentColor: #15a5fb;
--backGroundColor: #1d324b;
--backGroundDarkColor: #0e2440;
--cellBorderColor: #263a55;
--thTextColor: #9de4ff;
--sortedThBorder: 2px solid var(--thTextColor);
--baseFont: Helvetica-light, Helvetica Neue, Helvetica, Arial, sans-serif;
--fontColor: #617da1;
--baseRowHeight: 33px;
font-family: var(--baseFont);
color: var(--fontColor);
}
.url_table {
width: 100%;
background-color: var(--backGroundColor);
border-collapse: collapse;
border-radius: 5px;
overflow: hidden;
}
.url_table thead {
background-color: var(--accentColor);
}
.url_table__header {
outline: none;
cursor: pointer;
color: var(--thTextColor);
text-align: left;
}
.url_table__header--sorted-desc {
box-shadow: inset 0 -2px 0;
}
.url_table__header--sorted-asc {
box-shadow: inset 0 2px 0;
}
.url_table tbody tr:not(.url_table__row--selected):hover {
background-color: var(--cellBorderColor);
}
.url_table__row--selected {
background-color: var(--thTextColor);
color: black;
}
.url_table__row__cell, .url_table__header,
.url_table__progress td, .url_table__empty td {
border: 1px solid var(--cellBorderColor);
padding: 7px 11px;
}
.url_table__progress td, .url_table__empty td {
text-align: center;
}
/* pagination */
.url_table__pagination li {
display: inline-block;
text-align: center;
margin-left: 5px;
min-width: 22px;
height: 22px;
cursor: pointer;
user-select: none;
color: var(--backGroundDarkColor);
}
li.url_table__pagination__page:hover, li.url_table__pagination__page--disabled {
color: var(--fontColor);
}
.url_table__pagination a {
outline: none;
}
.url_table__pagination__page--selected {
border-bottom: 1px solid var(--accentColor);
color: var(--accentColor);
}
/* controls panel */
.url_table__controls_panel {
display: flex;
width: 100%;
margin-bottom: 10px;
}
/* sorting panel */
.url_table__sorting_panel {
display: flex;
min-height: 25px;
}
.url_table__sorting_panel__badge {
font-size: 12px;
margin-left: 10px;
padding-left: 5px;
display: flex;
align-items: center;
border: 1px solid var(--accentColor);
color: var(--thTextColor);
border-radius: 25px;
}
.url_table__sorting_panel__badge__close {
font-size: 10px;
display: inline-flex;
align-items: center;
justify-content: center;
margin-left: 7px;
width: 25px;
height: 100%;
border: 1px solid var(--accentColor);
position: relative;
left: 1px;
border-radius: 50%;
cursor: pointer;
}
.url_table__sorting_panel__badge--asc:before,
.url_table__sorting_panel__badge--desc:before {
content: "";
-webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 129 129' xmlns:xlink='http://www.w3.org/1999/xlink' enable-background='new 0 0 129 129'%3E%3Cg%3E%3Cpath d='m121.4,61.6l-54-54c-0.7-0.7-1.8-1.2-2.9-1.2s-2.2,0.5-2.9,1.2l-54,54c-1.6,1.6-1.6,4.2 0,5.8 0.8,0.8 1.8,1.2 2.9,1.2s2.1-0.4 2.9-1.2l47-47v98.1c0,2.3 1.8,4.1 4.1,4.1s4.1-1.8 4.1-4.1v-98.1l47,47c1.6,1.6 4.2,1.6 5.8,0s1.5-4.2 1.42109e-14-5.8z'/%3E%3C/g%3E%3C/svg%3E%0A");
mask-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 129 129' xmlns:xlink='http://www.w3.org/1999/xlink' enable-background='new 0 0 129 129'%3E%3Cg%3E%3Cpath d='m121.4,61.6l-54-54c-0.7-0.7-1.8-1.2-2.9-1.2s-2.2,0.5-2.9,1.2l-54,54c-1.6,1.6-1.6,4.2 0,5.8 0.8,0.8 1.8,1.2 2.9,1.2s2.1-0.4 2.9-1.2l47-47v98.1c0,2.3 1.8,4.1 4.1,4.1s4.1-1.8 4.1-4.1v-98.1l47,47c1.6,1.6 4.2,1.6 5.8,0s1.5-4.2 1.42109e-14-5.8z'/%3E%3C/g%3E%3C/svg%3E%0A");
background-color: var(--thTextColor);
height: 15px;
width: 15px;
background-repeat: no-repeat;
margin-right: 5px;
}
.url_table__sorting_panel__badge--desc:before {
transform: rotate(180deg);
}
/* error */
.url_table__error {
color: crimson;
background-color: lightpink;
height: var(--baseRowHeight);
display: flex;
align-items: center;
justify-content: center;
}
/* search */
.url_table__search {
flex-basis: 150px;
margin-left: auto;
}
.url_table__search__input {
background-color: transparent;
border: none;
border-bottom: 1px solid var(--accentColor);
padding: 5px;
font-size: 14px;
outline: none;
text-indent: 15px;
background-repeat: no-repeat;
background-size: 1em;
background-position: center left;
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNTYuOTY2IDU2Ljk2NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTYuOTY2IDU2Ljk2NjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiMxNWE1ZmIiIGQ9Ik01NS4xNDYsNTEuODg3TDQxLjU4OCwzNy43ODZjMy40ODYtNC4xNDQsNS4zOTYtOS4zNTgsNS4zOTYtMTQuNzg2YzAtMTIuNjgyLTEwLjMxOC0yMy0yMy0yM3MtMjMsMTAuMzE4LTIzLDIzczEwLjMxOCwyMywyMywyM2M0Ljc2MSwwLDkuMjk4LTEuNDM2LDEzLjE3Ny00LjE2MmwxMy42NjEsMTQuMjA4YzAuNTcxLDAuNTkzLDEuMzM5LDAuOTIsMi4xNjIsMC45MmMwLjc3OSwwLDEuNTE4LTAuMjk3LDIuMDc5LTAuODM3QzU2LjI1NSw1NC45ODIsNTYuMjkzLDUzLjA4LDU1LjE0Niw1MS44ODd6IE0yMy45ODQsNmM5LjM3NCwwLDE3LDcuNjI2LDE3LDE3cy03LjYyNiwxNy0xNywxN3MtMTctNy42MjYtMTctMTdTMTQuNjEsNiwyMy45ODQsNnoiLz48L3N2Zz4=);
}
.url_table__search__input, .url_table__search__input::placeholder {
color: var(--thTextColor);
}
/* Edit mode */
.url_table__row__cell--editable {
position: relative;
outline: 0;
}
.url_table__row__cell--focus {
box-shadow: inset 0 0 0 1px var(--accentColor);
}
.url_table__row__cell--edit:before {
position: absolute;
content: "";
border: 1px dashed var(--accentColor);
top: 1px;
left: 1px;
width: calc(100% - 4px);
height: calc(100% - 4px);
}
.url_table__row--selected .url_table__row__cell--edit:before {
border: 1px dashed black;
}