fleet/frontend/components/TableContainer/DataTable/_styles.scss

382 lines
8.9 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$shadow-width: 40px;
$shadow-transition-width: 10px;
.data-table-block {
position: relative;
display: inline-block;
width: 100%;
.data-table {
&__wrapper {
position: relative;
border: 1px solid $ui-fleet-black-10;
border-radius: 6px;
margin-top: $pad-small;
flex-grow: 1;
width: 100%;
// Shadow
background-image:
/* Shadows */ linear-gradient(
to right,
white,
$transparent
),
linear-gradient(to left, white, $transparent),
/* Shadow covers */
linear-gradient(to right, $ui-shadow, white $shadow-transition-width),
linear-gradient(to left, $ui-shadow, white $shadow-transition-width);
background-position: left center, right center, left center, right center;
background-repeat: no-repeat;
background-color: white;
background-size: $shadow-width 100%, $shadow-width 100%, 50% 100%,
50% 100%;
/* Opera doesn't support this in the shorthand */
background-attachment: local, local, scroll, scroll;
// End shadow
}
// applied to same element as data-table__table while loading
&__no-rows {
min-height: 272px;
}
&__table {
position: relative;
width: 100%;
border-collapse: collapse;
color: $core-fleet-black;
font-size: $x-small;
}
tr {
border-bottom: 1px solid $ui-fleet-black-10;
&:last-child {
border-bottom: 0;
}
// override styles of checkbox data cells
.form-field--checkbox {
display: flex;
justify-content: center;
margin-bottom: 0;
.fleet-checkbox__label {
padding-left: 0;
}
}
// Cleaner when tabbing
a:focus-visible {
outline-offset: 0;
border-radius: $border-radius-medium;
}
}
thead {
background-color: $ui-off-white-opaque; // opaque needed for horizontal scroll shadow
color: $core-fleet-black;
text-align: left;
border-bottom: 1px solid $ui-fleet-black-10;
// resize header icons
img {
width: 16px;
height: 16px;
vertical-align: top;
}
// do not resize button icons inside headers
.button {
img {
width: initial;
height: initial;
vertical-align: initial;
}
}
th {
padding: $pad-medium $pad-large;
white-space: nowrap;
border-left: 1px solid $ui-fleet-black-10;
font-weight: $bold;
&:first-child {
border-top-left-radius: 6px;
border-left: none;
}
&.selection__header {
width: 22px;
padding: $pad-medium;
}
&:last-child {
border-top-right-radius: 6px;
}
&.actions__header,
&.id__header, // Same as actions__header on some pages
{
border-left: none;
width: 99px;
}
&.linkToFilteredHosts__header,
&.view-all-hosts__header // Same as linkToFilteredHosts__header on some pages
{
border-left: none;
width: 120px;
}
.column-header {
span {
display: flex;
align-items: center;
gap: 3px;
}
}
}
&.active-selection {
background: none;
z-index: 1;
th {
border: 0;
}
.fleet-checkbox {
opacity: 0;
}
.active-selection__container {
background-color: $ui-off-white;
width: 100% !important; // Too much specificity currently at page-level styling. Revisit after data table CSS update to remove !important.
.active-selection__inner {
justify-content: flex-start;
}
}
}
}
.active-selection {
position: absolute;
top: 0px;
width: 100%;
border: 0;
border-radius: 6px;
&__checkbox {
padding: 16px;
width: 20px;
}
&__container {
padding: 0 24px;
}
&__inner {
display: flex;
justify-content: space-between;
align-items: center;
p {
margin: 0 $pad-medium 0 0;
font-weight: $regular;
span {
font-weight: $bold;
}
}
button {
margin-right: $pad-medium;
}
}
&__inner-left,
&__inner-right {
display: flex;
align-items: center;
}
}
tbody {
.component__tooltip-wrapper {
margin: 10px 0; // vertical padding multiline text with tooltip
}
.component__tooltip-wrapper__element {
white-space: initial; // wraps long text with tooltip
}
tr,
.single-row {
transition: background-color 150ms ease-out;
&:hover {
background-color: $ui-off-white-opaque; // opaque needed for horizontal scroll shadow
}
&:focus-visible {
outline: 2px solid $ui-vibrant-blue-25;
background: $ui-off-white;
}
}
.single-row {
&:hover {
cursor: pointer;
}
&:active {
background-color: $ui-vibrant-blue-10-opaque; // opaque needed for horizontal scroll shadow
}
}
.clickable-row {
&:hover {
cursor: pointer;
}
}
td {
height: 40px;
padding: 0 $pad-large;
max-width: 500px;
word-wrap: break-word;
&.actions__cell,
&.id__cell // Same as actions__cell on some pages
{
display: flex;
justify-content: end; // Aligns actions dropdown to right of table
max-width: 99px;
}
&.linkToFilteredHosts__cell,
&.view-all-hosts__cell // Same as linkToFilteredHosts__cell on some pages
{
text-align: right;
max-width: 140px;
}
&.selection__cell {
width: 0px;
padding: 0 $pad-medium;
}
.link-cell,
.text-cell {
display: block; // inline-block is not vertically centered
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin: 0;
.__react_component_tooltip {
white-space: normal;
}
}
.link-cell {
padding: $pad-small 0; // larger clickable area
&:hover {
// Underlines only the text and not the suffix like badges
.tooltip-truncated-cell {
text-decoration: none;
}
.data-table__tooltip-truncated-text {
text-decoration: underline;
}
}
> div {
display: flex;
align-items: center;
gap: $pad-small;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.truncated-tooltip {
font-weight: $regular;
}
}
// css to properly style link-cell with tooltip
.link-cell-tooltip-wrapper {
overflow: visible; // fixes tooltip overflow cut off by cell
white-space: nowrap; // single line
margin: 0; // padding applied to .link-cell for larger clickable area
.component__tooltip-wrapper {
&__element {
display: block;
white-space: nowrap; // single line
text-overflow: ellipsis; // truncates text
overflow: hidden;
// TODO this naming is now confusing, as this .link-cell is not the outermost layer of
// the cell it's a NameCell
.link-cell {
padding: 0;
}
}
&__tip-text {
cursor: auto;
}
}
}
.w400 {
max-width: 352px; // 400px - 48px padding
min-width: 100%;
text-align: left;
}
.w250 {
max-width: 202px; // 250px - 48px padding
min-width: 100%;
text-align: left;
}
.w150 {
max-width: 102px; // 250px - 48px padding
min-width: 100%;
text-align: left;
}
.italic-cell {
font-style: italic;
.__react_component_tooltip {
font-style: normal;
}
}
.grey-cell {
color: $ui-fleet-black-50;
}
}
.disable-highlight:hover {
background-color: initial;
}
}
}
.loading-overlay {
display: flex;
flex-grow: 1;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(255, 255, 255, 0.8);
z-index: 1;
}
&__footer {
display: flex;
align-items: center;
height: 50px; // Match pagination height as pagination is optionally rendered
}
&__table-help-text {
font-size: $x-small;
display: flex;
align-items: center;
}
}