UNPKG

@buun_group/brutalist-ui

Version:
382 lines (327 loc) 7.26 kB
/* Base progress styles */ .progress { font-family: var(--brutal-font-mono); font-weight: var(--brutal-font-bold); color: var(--brutal-black); position: relative; } /* Linear progress */ .progress.linear { width: 100%; } .progress.linear .track { background-color: var(--brutal-gray-200); border: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-black); position: relative; overflow: hidden; } .progress.linear .bar { height: 100%; background-color: var(--brutal-accent); border-right: var(--brutal-border-width-thin) var(--brutal-border-style) var(--brutal-black); transition: width var(--brutal-transition-base); position: relative; } /* Circular progress */ .progress.circular { display: inline-flex; align-items: center; justify-content: center; } .circularContainer { position: relative; display: flex; align-items: center; justify-content: center; } .circularSvg { transform: rotate(0deg); } .circularTrack { stroke: var(--brutal-gray-200); stroke-width: 3; fill: var(--brutal-white); } .circularBar { stroke: var(--brutal-accent); stroke-width: 3; transition: stroke-dashoffset var(--brutal-transition-base); fill: none; } .circularLabel { position: absolute; font-size: var(--brutal-text-sm); font-weight: var(--brutal-font-bold); color: var(--brutal-black); text-align: center; line-height: 1; } /* Sizes */ .sm.linear .track { height: 8px; } .md.linear .track { height: 12px; } .lg.linear .track { height: 16px; } .sm.circular .circularLabel { font-size: var(--brutal-text-xs); } .lg.circular .circularLabel { font-size: var(--brutal-text-base); } /* Variants */ .striped .bar { background-image: repeating-linear-gradient( 45deg, transparent, transparent 4px, rgba(0, 0, 0, 0.1) 4px, rgba(0, 0, 0, 0.1) 8px ); } .animated .bar { background-size: 20px 20px; animation: progressSlide 1s linear infinite; } .animated.striped .bar { background-image: repeating-linear-gradient( 45deg, transparent, transparent 4px, rgba(0, 0, 0, 0.1) 4px, rgba(0, 0, 0, 0.1) 8px ); } @keyframes progressSlide { 0% { background-position: 0 0; } 100% { background-position: 20px 0; } } /* Indeterminate states */ .indeterminate.linear .bar { width: 30% !important; animation: indeterminateLinear 2s linear infinite; } .indeterminate.circular .circularBar { animation: indeterminateCircular 1.5s linear infinite; } @keyframes indeterminateLinear { 0% { transform: translateX(-100%); } 50% { transform: translateX(400%); } 100% { transform: translateX(-100%); } } @keyframes indeterminateCircular { 0% { stroke-dasharray: 1, 200; stroke-dashoffset: 0; } 50% { stroke-dasharray: 90, 200; stroke-dashoffset: -35; } 100% { stroke-dasharray: 90, 200; stroke-dashoffset: -125; } } /* Labels */ .label { margin-top: var(--brutal-space-2); font-size: var(--brutal-text-sm); font-weight: var(--brutal-font-bold); text-align: center; color: var(--brutal-black); } .withLabel.linear { margin-bottom: var(--brutal-space-6); } /* Color variants with unique brutalist patterns */ .accent .bar { background-color: var(--brutal-accent); background-image: repeating-linear-gradient( 90deg, var(--brutal-accent), var(--brutal-accent) 8px, rgba(0, 0, 0, 0.2) 8px, rgba(0, 0, 0, 0.2) 10px ); } .accent .circularBar { stroke: var(--brutal-accent); filter: drop-shadow(2px 2px 0px rgba(0, 0, 0, 0.3)); } .accent .circularTrack { stroke: color-mix(in srgb, var(--brutal-accent) 20%, var(--brutal-gray-200)); } .success .bar { background-color: var(--brutal-success); background-image: repeating-linear-gradient( -45deg, var(--brutal-success), var(--brutal-success) 10px, color-mix(in srgb, var(--brutal-success) 80%, black) 10px, color-mix(in srgb, var(--brutal-success) 80%, black) 12px ); } .success .circularBar { stroke: var(--brutal-success); stroke-dasharray: 8 2 !important; animation: successDash 20s linear infinite; } .success .circularTrack { stroke: color-mix(in srgb, var(--brutal-success) 20%, var(--brutal-gray-200)); } @keyframes successDash { to { stroke-dashoffset: -100; } } .warning .bar { background-color: var(--brutal-warning); background-image: repeating-linear-gradient( 45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.4) 5px, rgba(0, 0, 0, 0.4) 10px ), repeating-linear-gradient( -45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.2) 5px, rgba(255, 255, 255, 0.2) 10px ); } .warning .circularBar { stroke: var(--brutal-warning); stroke-width: calc(var(--strokeWidth) + 2px); } .warning .circularTrack { stroke: color-mix(in srgb, var(--brutal-warning) 20%, var(--brutal-gray-200)); stroke-dasharray: 4 4; } .error .bar { background-color: var(--brutal-error); position: relative; overflow: visible; } .error .bar::before { content: ''; position: absolute; top: -2px; left: 0; right: 0; bottom: -2px; background: repeating-linear-gradient( 90deg, var(--brutal-error), var(--brutal-error) 4px, transparent 4px, transparent 8px ); animation: errorPulse 1s ease-in-out infinite; } @keyframes errorPulse { 0%, 100% { opacity: 0.8; } 50% { opacity: 1; } } .error .circularBar { stroke: var(--brutal-error); filter: drop-shadow(0 0 4px var(--brutal-error)); } .error .circularTrack { stroke: color-mix(in srgb, var(--brutal-error) 20%, var(--brutal-gray-200)); } .info .bar { background: linear-gradient( 90deg, var(--brutal-info) 0%, color-mix(in srgb, var(--brutal-info) 85%, white) 50%, var(--brutal-info) 100% ); background-size: 200% 100%; animation: infoGradient 3s ease infinite; } @keyframes infoGradient { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .info .circularBar { stroke: var(--brutal-info); stroke-linecap: square; } .info .circularTrack { stroke: color-mix(in srgb, var(--brutal-info) 20%, var(--brutal-gray-200)); } /* Brutal design enhancements */ .linear .track { box-shadow: inset 2px 2px 0px rgba(0, 0, 0, 0.2), 3px 3px 0px var(--brutal-black); transform: translateY(-1px); } .linear .bar { box-shadow: inset -2px -2px 0px rgba(0, 0, 0, 0.2); } .linear .bar::after { content: ''; position: absolute; top: 0; right: 0; width: 4px; height: 100%; background-color: var(--brutal-black); } /* Additional linear styling for each color */ .accent.linear .track { border-color: var(--brutal-accent); } .success.linear .track { border-color: var(--brutal-success); } .warning.linear .track { border-color: var(--brutal-warning); } .error.linear .track { border-color: var(--brutal-error); } .info.linear .track { border-color: var(--brutal-info); } /* Responsive adjustments */ @media (max-width: 768px) { .progress { font-size: var(--brutal-text-sm); } .lg.linear .track { height: 14px; } .md.linear .track { height: 10px; } }