@arolariu/components
Version:
🎨 70+ beautiful, accessible React components built on Base UI. TypeScript-first, CSS Modules styling, tree-shakeable, SSR-ready. Perfect for modern web apps, design systems & rapid prototyping. Zero config, maximum flexibility! ⚡
127 lines (109 loc) • 2.82 kB
CSS
.root {
display: grid;
gap: var(--ac-space-2);
}
.group {
display: flex;
width: 100%;
min-height: var(--ac-size-default);
align-items: stretch;
overflow: hidden;
border: 1px solid var(--ac-input);
border-radius: var(--ac-radius-md);
background-color: var(--ac-background);
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.04);
transition: border-color var(--ac-transition-fast), box-shadow var(--ac-transition-fast);
&:focus-within {
border-color: var(--ac-ring);
box-shadow: 0 0 0 1px var(--ac-ring);
}
&:has([aria-invalid="true"]),
&:has([data-invalid]) {
border-color: var(--ac-destructive);
box-shadow: 0 0 0 1px color-mix(in oklch, var(--ac-destructive), transparent 65%);
}
}
.group > * + * {
border-inline-start: 1px solid var(--ac-border);
}
.input {
box-sizing: border-box;
flex: 1 1 auto;
min-width: 0;
padding: 0 var(--ac-space-3);
border: 0;
background-color: transparent;
color: var(--ac-foreground);
font-size: var(--ac-text-sm);
line-height: 1.5;
outline: none;
&::placeholder {
color: var(--ac-muted-foreground);
}
&:focus-visible {
box-shadow: none;
}
&:disabled {
cursor: not-allowed;
}
}
.stepper,
.scrubArea {
display: inline-flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
min-width: var(--ac-size-default);
padding: 0 var(--ac-space-2);
border: 0;
background-color: color-mix(in oklch, var(--ac-secondary), var(--ac-background) 30%);
color: var(--ac-foreground);
font-size: var(--ac-text-xs);
font-weight: 600;
line-height: 1;
cursor: pointer;
user-select: none;
outline: none;
transition: background-color var(--ac-transition-fast), color var(--ac-transition-fast);
&:focus-visible {
position: relative;
z-index: 1;
background-color: var(--ac-accent);
box-shadow: inset 0 0 0 1px var(--ac-ring);
}
&[data-disabled] {
cursor: not-allowed;
opacity: 0.5;
}
@media (hover: hover) {
&:hover:not([data-disabled]) {
background-color: var(--ac-accent);
color: var(--ac-accent-foreground);
}
}
}
.increment,
.decrement {
width: var(--ac-size-default);
}
.increment[data-pressed],
.decrement[data-pressed],
.scrubArea[data-scrubbing] {
background-color: color-mix(in oklch, var(--ac-primary), var(--ac-background) 78%);
color: var(--ac-primary);
}
.stepperSymbol {
display: inline-flex;
align-items: center;
justify-content: center;
width: 1rem;
line-height: 1;
}
.scrubArea {
min-width: calc(var(--ac-size-default) - var(--ac-space-1));
color: var(--ac-muted-foreground);
}
.scrubHandle {
letter-spacing: -0.15em;
font-size: var(--ac-text-sm);
}