UNPKG

@c8y/style

Version:

Styles for Cumulocity IoT applications

165 lines (140 loc) 2.94 kB
@import "../mixins/_vendor-prefixes.less"; /** * Spinner - Rectangle bar spinner/loader animation * * Note: Uses color tokens (@text-muted; @spinner-color) and @size-* tokens where applicable. * * Intentionally hardcoded values: * - Spinner dimensions (50px, 40px, 30px, 60px, 45px): Component-specific sizes * - Padding values (45px, 35px, 11px): Component-specific positioning offsets * - Negative margins (-25px, -15px, -28px): Centering calculations (half of width/height) * - Bar width (6px): Spinner bar width (off-grid) * - Animation duration (1.2s) and delays (-1.1s to -0.8s): Animation timing * - Transform scale (0.5): Size reduction for button variant * - RGBA background: Semi-transparent overlay * - Percentages and unitless scale values: Animation and transform values */ c8y-rectangle-spinner, .c8y-rectangle-spinner { position: relative; display: block; padding-top: 45px; min-width: 50px; min-height: 40px; color: @text-muted; text-align: center; font-size: @font-size-base; .spinner { left: 50%; margin-left: -25px; } &.spinner-xs { padding-top: 35px; min-width: 30px; min-height: 30px; .spinner { margin-left: -15px; } } &.spinner-inline { display: inline-block; padding-top: 11px; padding-left: 50px; vertical-align: middle; text-align: left; .spinner { left: 0; margin-left: 0; } &.spinner-xs { padding-top: @size-5; padding-left: 35px; } } } .spinner { position: absolute; top: 0; left: 0; margin: 0 auto; width: 50px; height: 40px; text-align: center; font-size: @size-10; opacity: 0.5; &.spinner-xs, .spinner-xs & { width: 30px; height: 30px; > div { margin: 0; width: @size-4; } } } .spinner > div { display: inline-block; margin-right: 1px; width: 6px; height: 100%; background-color: @spinner-color; animation: stretchdelay 1.2s infinite ease-in-out; } .spinner .rect2 { animation-delay: -1.1s; } .spinner .rect3 { animation-delay: -1s; } .spinner .rect4 { animation-delay: -0.9s; } .spinner .rect5 { animation-delay: -0.8s; } @keyframes stretchdelay { 0%, 40%, 100% { transform: scaleY(0.4); } 20% { transform: scaleY(1); } } .spinner-panel-wrapper { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 100; display: flex; align-items: center; height: 100%; background-color: rgba(255, 255, 255, 0.7); .grid-stack-item & { right: @size-10; left: @size-10; } .spinner { top: 0; left: 50%; margin-left: -25px; } } .spinner-inline-wrapper { position: relative; display: inline-block; width: 60px; vertical-align: middle; .spinner { transform: translateY(-50%); } } .spinner-btn { position: relative; display: inline-block; width: 45px; transform: scale(0.5) translateY(-28px); }