@rolemodel/optics
Version:
Optics is a css package that provides base styles and components that can be integrated and customized in a variety of projects.
134 lines (108 loc) • 3.35 kB
CSS
.table {
/* Public API */
/* Cells (for height, the appropriate variable is used when using the density modifiers) */
--_op-table-cell-height-default: calc(11 * var(--op-size-unit)); /* 44px */
--_op-table-cell-height-comfortable: calc(16 * var(--op-size-unit)); /* 64px */
--_op-table-cell-height-compact: calc(8 * var(--op-size-unit)); /* 32px */
/* Private API */
/* These allow for overriding specific padding versions easier. */
--__op-table-cell-height: var(--_op-table-cell-height-default);
width: 100%;
border-radius: var(--op-radius-medium);
border-collapse: collapse;
box-shadow: var(--op-border-all) var(--op-color-border);
contain: paint;
table-layout: auto;
/* Elements */
thead {
background-color: var(--op-color-neutral-plus-eight);
box-shadow: inset var(--op-border-top) var(--op-color-border);
color: var(--op-color-neutral-on-plus-eight);
&:has(th input[type='checkbox']:checked) {
background-color: var(--op-color-primary-plus-seven);
color: var(--op-color-primary-on-plus-seven);
}
}
th {
font-weight: var(--op-font-weight-semi-bold);
text-align: left;
}
tbody,
tfoot {
background-color: var(--op-color-neutral-plus-max);
color: var(--op-color-neutral-on-plus-max);
}
th,
td {
height: var(--__op-table-cell-height);
font-size: var(--op-font-small);
padding-block: var(--op-space-2x-small);
padding-inline: var(--op-space-small);
}
tfoot tr {
box-shadow: var(--op-border-top) var(--op-color-border);
}
tr:not(:last-child) {
box-shadow: inset var(--op-border-top) var(--op-color-border);
}
/* Modifiers */
/* stylelint-disable no-descending-specificity */
&.table--primary {
thead {
background-color: var(--op-color-primary-plus-seven);
color: var(--op-color-primary-on-plus-seven);
}
}
&.table--danger {
thead {
background-color: var(--op-color-alerts-danger-plus-seven);
color: var(--op-color-alerts-danger-on-plus-seven);
}
}
/* stylelint-enable no-descending-specificity */
&.table--container {
overflow-y: auto;
}
/* Layout Modifiers */
&.table--auto-layout {
table-layout: auto;
}
&.table--fixed-layout {
table-layout: fixed;
}
/* Table Density Modifiers */
&.table--default-density {
--__op-table-cell-height: var(--_op-table-cell-height-default);
}
&.table--comfortable-density {
--__op-table-cell-height: var(--_op-table-cell-height-comfortable);
}
&.table--compact-density {
--__op-table-cell-height: var(--_op-table-cell-height-compact);
}
/* Striped Modifiers */
&.table--even-striped {
tbody tr:nth-child(even) {
background-color: var(--op-color-neutral-plus-seven);
color: var(--op-color-neutral-on-plus-seven);
}
}
&.table--odd-striped {
tbody tr:nth-child(odd) {
background-color: var(--op-color-neutral-plus-seven);
color: var(--op-color-neutral-on-plus-seven);
}
}
/* Sticky Header Row Modifier */
/* stylelint-disable no-descending-specificity */
&.table--sticky-header thead {
position: sticky;
inset-block-start: 0;
}
/* stylelint-enable no-descending-specificity */
/* Sticky Footer Row Modifier */
&.table--sticky-footer tfoot {
position: sticky;
inset-block-end: 0;
}
}