UNPKG

@c8y/style

Version:

Styles for Cumulocity IoT applications

190 lines (178 loc) 6.19 kB
// Base grid + column span utilities .responsive-grid-table { display: grid; grid-template-columns: repeat(12, 1fr); background: inherit; &-wrapper--striped{ .responsive-grid-table:nth-child(even) { background: @component-background-odd; } } &__header{ box-shadow: inset 0 -1px 0 var(--c8y-component-border-color, var(--c8y-root-component-border-color)); > [class^="col-"], > [class*=" col-"] { padding: calc(@size-base + @size-10) @component-padding; color: var(--c8y-component-form-label-color, var(--c8y-form-label-color)); vertical-align: bottom; text-transform: uppercase; font-size: var(--c8y-font-size-small); font-weight: bold; line-height: calc(var(--c8y-unit-base) * 2.5); } .inner-scroll &{ position: sticky; top: 0; z-index: 1; background: var(--c8y-page-sticky-header-background-default); } } &__body{ > [class^="col-"], > [class*=" col-"] { display: flex; align-items: center; padding-top: calc(@size-base + @size-10); padding-bottom: calc(@size-base + @size-10); &.align-right { justify-content: flex-end; text-align: right; } } } &--separator{ box-shadow: inset 0 -1px 0 var(--c8y-component-border-color, var(--c8y-root-component-border-color)); &:last-child { box-shadow: none; } } // Padding modifiers — -x (horizontal), -y (vertical), shorthand (both) &--padded-x { &.responsive-grid-table__header > [class^="col-"], &.responsive-grid-table__header > [class*=" col-"], &.responsive-grid-table__body > [class^="col-"], &.responsive-grid-table__body > [class*=" col-"] { padding-left: @component-padding; padding-right: @component-padding; } } &--padded-y { &.responsive-grid-table__header > [class^="col-"], &.responsive-grid-table__header > [class*=" col-"], &.responsive-grid-table__body > [class^="col-"], &.responsive-grid-table__body > [class*=" col-"] { padding-top: @component-padding; padding-bottom: @component-padding; } } &--padded { &.responsive-grid-table__header > [class^="col-"], &.responsive-grid-table__header > [class*=" col-"], &.responsive-grid-table__body > [class^="col-"], &.responsive-grid-table__body > [class*=" col-"] { padding-left: @component-padding; padding-right: @component-padding; padding-top: @component-padding; padding-bottom: @component-padding; } } // Condensed modifiers — -x (horizontal), -y (vertical + font-size), shorthand (both) &--condensed-x { &.responsive-grid-table__header > [class^="col-"], &.responsive-grid-table__header > [class*=" col-"], &.responsive-grid-table__body > [class^="col-"], &.responsive-grid-table__body > [class*=" col-"] { padding-left: var(--c8y-table-cell-padding-condensed); padding-right: var(--c8y-table-cell-padding-condensed); } } &--condensed-y { &.responsive-grid-table__header > [class^="col-"], &.responsive-grid-table__header > [class*=" col-"] { padding-top: var(--c8y-table-cell-padding-condensed); padding-bottom: var(--c8y-table-cell-padding-condensed); font-size: calc(var(--c8y-unit-base) * 1.25); } &.responsive-grid-table__body > [class^="col-"], &.responsive-grid-table__body > [class*=" col-"] { padding-top: calc(var(--c8y-table-cell-padding-condensed) - 1px); padding-bottom: calc(var(--c8y-table-cell-padding-condensed) - 1px); font-size: var(--c8y-font-size-small); } } &--condensed { &.responsive-grid-table__header > [class^="col-"], &.responsive-grid-table__header > [class*=" col-"] { padding-top: var(--c8y-table-cell-padding-condensed); padding-bottom: var(--c8y-table-cell-padding-condensed); padding-left: var(--c8y-table-cell-padding-condensed); padding-right: var(--c8y-table-cell-padding-condensed); font-size: calc(var(--c8y-unit-base) * 1.25); } &.responsive-grid-table__body > [class^="col-"], &.responsive-grid-table__body > [class*=" col-"] { padding-top: calc(var(--c8y-table-cell-padding-condensed) - 1px); padding-bottom: calc(var(--c8y-table-cell-padding-condensed) - 1px); padding-left: var(--c8y-table-cell-padding-condensed); padding-right: var(--c8y-table-cell-padding-condensed); font-size: var(--c8y-font-size-small); } } .col-actions{ display: flex; align-items: center; justify-content: flex-end; } } // Replaces SCSS: @for $i from 1 through 12 .generate-col-spans(@i) when (@i > 0) { .col-@{i} { grid-column: span @i; } .generate-col-spans((@i - 1)); } .generate-col-spans(12); // Mixin to create a wrapper + container query pair // @name -> suffix for class/container name and width .responsive-grid-table-wrapper(@name) { @cq-name: ~"responsive-grid-table-wrapper--@{name}"; .responsive-grid-table-wrapper--@{name} { container-type: inline-size; container-name: @cq-name; width: 100%; // When a header is present, inline labels are redundant — hide them &:has(.responsive-grid-table__header) .text-label-small { display: none; } } @container @cq-name (max-width: unit(@name, px)) { .responsive-grid-table { grid-template-columns: 1fr; // stack &__header { display: none; } .col-actions { justify-content: flex-start; } } // Header is hidden when stacked — show inline labels so values stay identifiable .text-label-small { display: block !important; } // hover-only element that becomes visible when stacked .showOnHover { opacity: 1 !important; } // Any class that contains "col-" becomes full-width when stacked .responsive-grid-table > [class^="col-"], .responsive-grid-table > [class*=" col-"] { grid-column: span 1; } } } // Replaces SCSS: @for $w from 600 through 200 (step -50) .generate-wrappers(@w) when (@w >= 200) { .responsive-grid-table-wrapper(@w); .generate-wrappers((@w - 50)); } .generate-wrappers(600);