@buun_group/brutalist-ui
Version:
A brutalist-styled component library
233 lines (198 loc) • 5.08 kB
CSS
.wrapper {
position: relative;
display: inline-block;
width: auto;
min-width: 200px; /* Default minimum width */
}
.wrapper.fullWidth {
display: block;
width: 100%;
}
.textarea {
display: block;
width: 100%;
padding: var(--brutal-space-3);
font-family: var(--brutal-font-mono);
font-weight: var(--brutal-font-medium);
line-height: var(--brutal-leading-normal);
color: var(--brutal-black);
background-color: var(--brutal-white);
border: var(--brutal-border-width) var(--brutal-border-style) var(--brutal-border-color);
outline: none;
transition: all var(--brutal-transition-base);
resize: vertical;
min-height: 4rem;
}
/* Remove resize handle for auto-resize textareas */
.textarea.autoResize {
resize: none;
overflow: hidden;
}
/* Brutalist shadow */
.textarea.withShadow {
box-shadow: var(--brutal-shadow-sm);
}
.textarea.withShadow:hover {
transform: translate(-2px, -2px);
box-shadow: 6px 6px 0px var(--brutal-black);
}
.textarea.withShadow:focus {
transform: translate(-4px, -4px);
box-shadow: var(--brutal-shadow);
}
/* Size variants */
.textarea.sm {
padding: var(--brutal-space-2);
font-size: var(--brutal-text-sm);
min-height: 3rem;
}
.textarea.md {
padding: var(--brutal-space-3);
font-size: var(--brutal-text-base);
min-height: 4rem;
}
.textarea.lg {
padding: var(--brutal-space-4);
font-size: var(--brutal-text-lg);
min-height: 5rem;
}
/* Variant styles */
.textarea.default {
border-color: var(--brutal-black);
}
.textarea.default:focus {
border-color: var(--brutal-black);
background-color: var(--brutal-gray-100);
}
.textarea.error {
border-color: var(--brutal-error);
background-color: var(--brutal-white);
}
.textarea.error:focus {
border-color: var(--brutal-error);
background-color: #FFF0F0;
box-shadow: var(--brutal-shadow-sm) var(--brutal-error);
}
.textarea.error.withShadow:focus {
box-shadow: var(--brutal-shadow) var(--brutal-error);
}
.textarea.success {
border-color: var(--brutal-success);
background-color: var(--brutal-white);
}
.textarea.success:focus {
border-color: var(--brutal-success);
background-color: #F0FFF0;
box-shadow: var(--brutal-shadow-sm) var(--brutal-success);
}
.textarea.success.withShadow:focus {
box-shadow: var(--brutal-shadow) var(--brutal-success);
}
/* Disabled state */
.textarea.disabled {
cursor: not-allowed;
opacity: 0.6;
background-color: var(--brutal-gray-100);
}
.textarea.disabled:hover {
transform: none;
box-shadow: var(--brutal-shadow-sm);
}
/* Read-only state */
.textarea.readOnly {
cursor: default;
background-color: var(--brutal-gray-100);
}
.textarea.readOnly:hover {
transform: none;
box-shadow: var(--brutal-shadow-sm);
}
.textarea.readOnly:focus {
transform: none;
box-shadow: var(--brutal-shadow-sm);
background-color: var(--brutal-gray-100);
}
/* Over character limit */
.textarea.overLimit {
border-color: var(--brutal-error);
}
/* Character count */
.characterCount {
position: absolute;
bottom: calc(-1 * var(--brutal-space-6));
right: 0;
font-family: var(--brutal-font-mono);
font-size: var(--brutal-text-sm);
font-weight: var(--brutal-font-bold);
color: var(--brutal-gray-700);
background-color: var(--brutal-white);
padding: var(--brutal-space-1) var(--brutal-space-2);
border: var(--brutal-border-width-thin) var(--brutal-border-style) var(--brutal-black);
}
.characterCount.error {
color: var(--brutal-error);
border-color: var(--brutal-error);
}
.characterCount.success {
color: var(--brutal-success);
border-color: var(--brutal-success);
}
/* Scrollbar styling for textareas */
.textarea::-webkit-scrollbar {
width: 12px;
}
.textarea::-webkit-scrollbar-track {
background: var(--brutal-gray-100);
border-left: var(--brutal-border-width-thin) var(--brutal-border-style) var(--brutal-black);
}
.textarea::-webkit-scrollbar-thumb {
background: var(--brutal-black);
border: none;
}
.textarea::-webkit-scrollbar-thumb:hover {
background: var(--brutal-gray-700);
}
/* Firefox scrollbar */
.textarea {
scrollbar-width: thin;
scrollbar-color: var(--brutal-black) var(--brutal-gray-100);
}
/* Placeholder styling */
.textarea::placeholder {
color: var(--brutal-gray-500);
opacity: 1;
}
/* Selection styling */
.textarea::selection {
background-color: var(--brutal-accent);
color: var(--brutal-white);
}
/* Resize handle styling */
.textarea::-webkit-resizer {
background-color: transparent;
background-image: linear-gradient(
135deg,
transparent 0%,
transparent 40%,
var(--brutal-black) 40%,
var(--brutal-black) 60%,
transparent 60%,
transparent 100%
),
linear-gradient(
135deg,
transparent 0%,
transparent 20%,
var(--brutal-black) 20%,
var(--brutal-black) 40%,
transparent 40%,
transparent 60%,
var(--brutal-black) 60%,
var(--brutal-black) 80%,
transparent 80%,
transparent 100%
);
background-size: 8px 8px, 8px 8px;
background-position: bottom right, bottom right;
background-repeat: no-repeat;
}