UNPKG

@buun_group/brutalist-ui

Version:
392 lines (327 loc) 9.54 kB
/* Base Select Styles */ .select { font-family: var(--brutal-font-mono); font-weight: var(--brutal-font-medium); background-color: var(--brutal-white); color: var(--brutal-black); border: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-black); outline: none; transition: var(--brutal-transition-base); width: 100%; display: block; cursor: pointer; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: none; /* Ensure dropdown renders properly */ position: relative; /* Create a new stacking context */ isolation: isolate; } /* Remove default arrow in IE */ .select::-ms-expand { display: none; } /* Sizes */ .sm { padding: var(--brutal-space-2) calc(var(--brutal-space-8) + var(--brutal-space-2)) var(--brutal-space-2) var(--brutal-space-3); font-size: var(--brutal-text-sm); line-height: var(--brutal-leading-tight); min-height: calc(var(--brutal-text-sm) + (var(--brutal-space-2) * 2) + (var(--brutal-border-width) * 2)); } .md { padding: var(--brutal-space-3) calc(var(--brutal-space-10) + var(--brutal-space-2)) var(--brutal-space-3) var(--brutal-space-4); font-size: var(--brutal-text-base); line-height: var(--brutal-leading-normal); min-height: calc(var(--brutal-text-base) + (var(--brutal-space-3) * 2) + (var(--brutal-border-width) * 2)); } .lg { padding: var(--brutal-space-4) calc(var(--brutal-space-12) + var(--brutal-space-2)) var(--brutal-space-4) var(--brutal-space-5); font-size: var(--brutal-text-lg); line-height: var(--brutal-leading-normal); min-height: calc(var(--brutal-text-lg) + (var(--brutal-space-4) * 2) + (var(--brutal-border-width) * 2)); } /* Full width */ .fullWidth { width: 100%; } /* Variants */ .default { border-color: var(--brutal-black); } .error { border-color: var(--brutal-error); background-color: rgba(255, 0, 0, 0.05); } .success { border-color: var(--brutal-success); background-color: rgba(0, 255, 0, 0.05); } /* Focus states */ .select:focus { border-color: var(--brutal-black); outline: 3px solid var(--brutal-black); outline-offset: 2px; } .select.withShadow:focus { transform: translate(-2px, -2px); box-shadow: 6px 6px 0px var(--brutal-black); } .select.error:focus { border-color: var(--brutal-error); } .select.error.withShadow:focus { box-shadow: 6px 6px 0px var(--brutal-error); } .select.success:focus { border-color: var(--brutal-success); } .select.success.withShadow:focus { box-shadow: 6px 6px 0px var(--brutal-success); } /* Hover states */ .select:hover:not(:disabled) { border-color: var(--brutal-gray-700); } .select.error:hover:not(:disabled) { border-color: var(--brutal-accent-dark); } .select.success:hover:not(:disabled) { border-color: var(--brutal-success); } /* Shadow effect */ .withShadow { box-shadow: var(--brutal-shadow-sm); } /* Disabled state */ .disabled, .select:disabled { opacity: 0.6; cursor: not-allowed; background-color: var(--brutal-gray-100); } /* Placeholder styling */ .select.hasPlaceholder { color: var(--brutal-gray-500); } /* Open state styling */ .select:focus-visible { border-color: var(--brutal-black); border-width: var(--brutal-border-width); } /* Dropdown styling - Enhanced brutalist design */ .select option { color: var(--brutal-black); background-color: var(--brutal-white); font-family: var(--brutal-font-mono); font-weight: var(--brutal-font-medium); padding: var(--brutal-space-3) var(--brutal-space-4); min-height: 2.5rem; border-bottom: var(--brutal-border-width) solid var(--brutal-gray-200); } /* Option hover state (works in some browsers) */ .select option:hover:not(:disabled) { background-color: var(--brutal-gray-100); color: var(--brutal-black); font-weight: var(--brutal-font-bold); } /* Selected option */ .select option:checked { background-color: var(--brutal-black); color: var(--brutal-white); font-weight: var(--brutal-font-bold); } .select option:disabled { color: var(--brutal-gray-400); background-color: var(--brutal-gray-50); font-style: italic; cursor: not-allowed; } .select optgroup { font-family: var(--brutal-font-mono); font-weight: var(--brutal-font-bold); color: var(--brutal-black); background-color: var(--brutal-gray-200); padding: var(--brutal-space-2) var(--brutal-space-3); font-size: 0.875em; text-transform: uppercase; letter-spacing: 0.05em; border-top: var(--brutal-border-width) solid var(--brutal-black); border-bottom: var(--brutal-border-width) solid var(--brutal-black); } /* When focused/open, elevate z-index to ensure dropdown appears above other elements */ .select:focus { z-index: var(--brutal-z-tooltip); } /* Additional dropdown styling for webkit browsers */ .select::-webkit-scrollbar { width: 12px; background-color: var(--brutal-white); border-left: var(--brutal-border-width) solid var(--brutal-black); } .select::-webkit-scrollbar-thumb { background-color: var(--brutal-black); border: var(--brutal-border-width) solid var(--brutal-black); } .select::-webkit-scrollbar-track { background-color: var(--brutal-gray-100); border-left: var(--brutal-border-width) solid var(--brutal-black); } /* Select wrapper for custom arrow */ .selectWrapper { position: relative; display: inline-block; width: 100%; /* Create a new stacking context */ isolation: isolate; } /* When select is focused, elevate wrapper */ .selectWrapper:focus-within { z-index: var(--brutal-z-tooltip); } .selectWrapper.fullWidth { width: 100%; } .selectWrapper .select { width: 100%; padding-right: calc(var(--brutal-space-8) + var(--brutal-space-4)); border: none; box-shadow: none; transform: none; } .selectWrapper .select:focus { transform: none; box-shadow: none; } /* Wrapper takes the border and shadow */ .selectWrapper.default { border: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-black); background-color: var(--brutal-white); } .selectWrapper.error { border: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-error); background-color: rgba(255, 0, 0, 0.05); } .selectWrapper.success { border: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-success); background-color: rgba(0, 255, 0, 0.05); } .selectWrapper.withShadow { box-shadow: var(--brutal-shadow-sm); transition: var(--brutal-transition-base); } .selectWrapper.withShadow:focus-within { transform: translate(-2px, -2px); box-shadow: 6px 6px 0px var(--brutal-black); } .selectWrapper.error.withShadow:focus-within { box-shadow: 6px 6px 0px var(--brutal-error); } .selectWrapper.success.withShadow:focus-within { box-shadow: 6px 6px 0px var(--brutal-success); } .selectWrapper.disabled { opacity: 0.6; cursor: not-allowed; } /* Custom arrow styles */ .arrow { position: absolute; top: 50%; right: var(--brutal-space-3); transform: translateY(-50%); pointer-events: none; display: flex; align-items: center; justify-content: center; color: var(--brutal-black); background-color: var(--brutal-white); width: calc(var(--brutal-space-6) + var(--brutal-space-1)); height: calc(var(--brutal-space-6) + var(--brutal-space-1)); border-left: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-black); } .selectWrapper.error .arrow { color: var(--brutal-error); border-left-color: var(--brutal-error); } .selectWrapper.success .arrow { color: var(--brutal-success); border-left-color: var(--brutal-success); } .selectWrapper.disabled .arrow { color: var(--brutal-gray-500); } /* Arrow size adjustments */ .selectWrapper.sm .arrow { width: var(--brutal-space-6); height: var(--brutal-space-6); right: var(--brutal-space-2); } .selectWrapper.sm .arrow svg { width: 10px; height: 6px; } .selectWrapper.md .arrow svg { width: 12px; height: 8px; } .selectWrapper.lg .arrow { width: var(--brutal-space-8); height: var(--brutal-space-8); right: var(--brutal-space-4); } .selectWrapper.lg .arrow svg { width: 14px; height: 10px; } /* Select wrapper size adjustments */ .selectWrapper.sm .select { padding-right: calc(var(--brutal-space-8) + var(--brutal-space-2)); } .selectWrapper.md .select { padding-right: calc(var(--brutal-space-10) + var(--brutal-space-2)); } .selectWrapper.lg .select { padding-right: calc(var(--brutal-space-12) + var(--brutal-space-2)); } /* Enhanced dropdown styling for Firefox */ @-moz-document url-prefix() { .select { background-image: none; } .select option { background-color: var(--brutal-white); color: var(--brutal-black); } .select option:hover { background-color: var(--brutal-gray-100); } .select option:checked { background: var(--brutal-black) !important; color: var(--brutal-white) !important; } } /* Multiple select styling */ .select[multiple] { padding: var(--brutal-space-2); height: auto; overflow-y: auto; border: var(--brutal-border-width) solid var(--brutal-black); } .select[multiple] option { padding: var(--brutal-space-2) var(--brutal-space-3); border-bottom: var(--brutal-border-width-thin) solid var(--brutal-gray-200); } .select[multiple] option:last-child { border-bottom: none; } .select[multiple] option:hover { background-color: var(--brutal-gray-100); font-weight: var(--brutal-font-bold); } .select[multiple] option:checked { background-color: var(--brutal-black); color: var(--brutal-white); font-weight: var(--brutal-font-bold); }