UNPKG

@buun_group/brutalist-ui

Version:
224 lines (188 loc) 4.53 kB
/* 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; } }