@buun_group/brutalist-ui
Version:
A brutalist-styled component library
224 lines (188 loc) • 4.53 kB
CSS
/* Command Component - Brutalist Styling */
.command {
--brutal-command-bg: var(--brutal-white, #ffffff);
--brutal-command-border: var(--brutal-black, #000000);
--brutal-command-text: var(--brutal-black, #000000);
--brutal-command-accent: var(--brutal-accent, #ff0000);
--brutal-command-muted: var(--brutal-gray-600, #666666);
--brutal-command-radius: var(--brutal-radius, 4px);
--brutal-command-shadow: var(--brutal-shadow, 4px 4px 0px var(--brutal-black, #000000));
display: flex;
flex-direction: column;
background-color: var(--brutal-command-bg);
border: 2px solid var(--brutal-command-border);
border-radius: var(--brutal-command-radius);
box-shadow: var(--brutal-command-shadow);
overflow: hidden;
max-height: 400px;
min-width: 300px;
}
.inputWrapper {
position: relative;
border-bottom: 2px solid var(--brutal-command-border);
}
.input {
width: 100%;
border: none;
background: transparent;
padding: 12px 16px;
font-size: 14px;
font-family: var(--brutal-font-mono, 'Courier New', monospace);
font-weight: 600;
color: var(--brutal-command-text);
outline: none;
}
.input::placeholder {
color: var(--brutal-command-muted);
opacity: 0.8;
}
.input:focus {
background-color: var(--brutal-gray-50, #f9fafb);
}
.list {
flex: 1;
overflow-y: auto;
padding: 4px;
min-height: 0;
}
.list::-webkit-scrollbar {
width: 8px;
}
.list::-webkit-scrollbar-track {
background: var(--brutal-gray-100, #f3f4f6);
}
.list::-webkit-scrollbar-thumb {
background: var(--brutal-command-border);
border-radius: 0;
}
.list::-webkit-scrollbar-thumb:hover {
background: var(--brutal-command-accent);
}
.empty {
padding: 32px 16px;
text-align: center;
color: var(--brutal-command-muted);
font-family: var(--brutal-font-mono, 'Courier New', monospace);
font-weight: 600;
font-size: 14px;
}
.group {
margin: 8px 0;
}
.group:first-child {
margin-top: 0;
}
.group:last-child {
margin-bottom: 0;
}
.groupHeading {
padding: 8px 12px 4px;
font-size: 12px;
font-weight: 900;
text-transform: uppercase;
color: var(--brutal-command-muted);
font-family: var(--brutal-font-mono, 'Courier New', monospace);
letter-spacing: 0.5px;
}
.groupItems {
/* Container for group items */
}
.item {
display: flex;
align-items: center;
padding: 8px 12px;
margin: 2px 4px;
border: 2px solid transparent;
border-radius: var(--brutal-command-radius);
cursor: pointer;
font-family: var(--brutal-font-mono, 'Courier New', monospace);
font-weight: 600;
font-size: 14px;
color: var(--brutal-command-text);
transition: all 0.1s ease;
user-select: none;
}
.item:hover {
background-color: var(--brutal-gray-100, #f3f4f6);
border-color: var(--brutal-command-border);
transform: translateX(2px);
}
.itemSelected {
background-color: var(--brutal-command-accent);
color: var(--brutal-white, #ffffff);
border-color: var(--brutal-command-border);
transform: translateX(4px);
box-shadow: 2px 2px 0px var(--brutal-command-border);
}
.itemSelected:hover {
transform: translateX(4px);
}
.itemDisabled {
opacity: 0.5;
cursor: not-allowed;
color: var(--brutal-command-muted);
}
.itemDisabled:hover {
background-color: transparent;
border-color: transparent;
transform: none;
}
.separator {
height: 2px;
background-color: var(--brutal-command-border);
margin: 8px 12px;
border: none;
}
/* Dark mode support */
@media (prefers-color-scheme: dark) {
.command {
--brutal-command-bg: var(--brutal-gray-900, #111827);
--brutal-command-border: var(--brutal-white, #ffffff);
--brutal-command-text: var(--brutal-white, #ffffff);
--brutal-command-muted: var(--brutal-gray-400, #9ca3af);
}
.input:focus {
background-color: var(--brutal-gray-800, #1f2937);
}
.item:hover {
background-color: var(--brutal-gray-800, #1f2937);
}
.list::-webkit-scrollbar-track {
background: var(--brutal-gray-800, #1f2937);
}
}
/* High contrast mode */
@media (prefers-contrast: high) {
.command {
border-width: 3px;
}
.item {
border-width: 2px;
}
.itemSelected {
box-shadow: 3px 3px 0px var(--brutal-command-border);
}
.separator {
height: 3px;
}
}
/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
.item {
transition: none;
}
.item:hover,
.itemSelected {
transform: none;
}
}
/* Print styles */
@media print {
.command {
box-shadow: none;
border: 1px solid black;
}
.item {
break-inside: avoid;
}
}