@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! ⚡
139 lines (119 loc) • 3.16 kB
CSS
.button {
box-sizing: border-box;
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--ac-space-2);
white-space: nowrap;
border-radius: var(--ac-radius-md);
font-size: var(--ac-text-xs);
line-height: 1.6;
font-weight: 500;
transition: background-color var(--ac-transition-fast), color var(--ac-transition-fast),
border-color var(--ac-transition-fast), box-shadow var(--ac-transition-fast);
cursor: pointer;
user-select: none;
outline: none;
border: none;
&:focus-visible {
outline: 2px solid var(--ac-ring);
outline-offset: -1px;
}
&[data-disabled],
&:disabled {
pointer-events: none;
opacity: 0.5;
}
/* Icon children */
& svg {
pointer-events: none;
width: 1rem;
height: 1rem;
flex-shrink: 0;
}
}
/* Variants */
.default {
background-color: var(--ac-primary);
color: var(--ac-primary-foreground);
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
@media (hover: hover) {
&:hover:not([data-disabled]) {
background-color: color-mix(in oklch, var(--ac-primary), transparent 10%);
}
}
}
.destructive {
background-color: var(--ac-destructive);
color: var(--ac-background);
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
@media (hover: hover) {
&:hover:not([data-disabled]) {
background-color: color-mix(in oklch, var(--ac-destructive), transparent 10%);
}
}
}
.outline {
border: 1px solid var(--ac-border);
background-color: var(--ac-background);
color: var(--ac-foreground);
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
@media (hover: hover) {
&:hover:not([data-disabled]) {
background-color: var(--ac-accent);
color: var(--ac-accent-foreground);
}
}
}
.secondary {
background-color: var(--ac-secondary);
color: var(--ac-secondary-foreground);
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
@media (hover: hover) {
&:hover:not([data-disabled]) {
background-color: color-mix(in oklch, var(--ac-secondary), transparent 20%);
}
}
}
.ghost {
background-color: transparent;
color: var(--ac-foreground);
@media (hover: hover) {
&:hover:not([data-disabled]) {
background-color: var(--ac-accent);
color: var(--ac-accent-foreground);
}
}
}
.link {
background-color: transparent;
color: var(--ac-foreground);
text-underline-offset: 4px;
@media (hover: hover) {
&:hover:not([data-disabled]) {
text-decoration: underline;
}
}
}
/* Sizes — Mira compact */
.sizeDefault {
height: var(--ac-size-default);
padding: var(--ac-space-1) var(--ac-space-3);
}
.sizeSm {
height: var(--ac-size-md);
padding: var(--ac-space-1) var(--ac-space-2);
font-size: var(--ac-text-xs);
border-radius: var(--ac-radius-sm);
}
.sizeLg {
height: var(--ac-size-lg);
padding: var(--ac-space-1) var(--ac-space-4);
font-size: var(--ac-text-sm);
border-radius: var(--ac-radius-md);
}
.sizeIcon {
width: var(--ac-size-default);
height: var(--ac-size-default);
padding: 0;
}