@hummingbirdui/hummingbird
Version:
An open-source system designed for rapid development, without sacrificing the granular control of utility-first CSS.
470 lines (451 loc) • 12.7 kB
CSS
@utility btn {
@layer base {
--btn-font-size: var(--input-btn-font-size);
--btn-radius: var(--input-btn-radius);
--btn-padding-x: var(--input-btn-padding-x);
--btn-padding-y: var(--input-btn-padding-y);
--btn-line-height: var(--input-btn-line-height);
--btn-border-width: var(--input-btn-border-width);
--btn-bg: var(--background-color-highlight);
--btn-color: var(--text-color-default);
--btn-font-weight: var(--font-weight-semibold);
--btn-hover-bg: var(--color-hover);
--btn-hover-color: var(--btn-color);
--btn-border-color: transparent;
--btn-disabled-border-color: transparent;
--btn-disabled-bg: var(--color-disabled);
--btn-disabled-color: var(--color-disabled-color);
--btn-active-bg: var(--btn-hover-bg);
--btn-active-color: var(--btn-color);
--btn-width: unset;
--btn-height: unset;
@apply inline-flex items-center justify-center gap-1.5
transition-[background] duration-200
cursor-pointer
no-underline
bg-[var(--btn-bg)]
text-[length:var(--btn-font-size)]
font-[weight:var(--btn-font-weight)]
rounded-[var(--btn-radius)]
px-[var(--btn-padding-x)]
py-[var(--btn-padding-y)]
text-[var(--btn-color)]
leading-[var(--btn-line-height)]
min-w-4
w-[var(--btn-width)]
h-[var(--btn-height)]
border-[length:var(--btn-border-width)]
border-[var(--btn-border-color)]
hover:bg-[var(--btn-hover-bg)]
hover:text-[var(--btn-hover-color)];
.btn-check + &:hover {
@apply bg-[var(--btn-bg)];
}
@variant focus-visible {
@apply outline-0
text-[var(--btn-hover-color)]
bg-[var(--btn-hover-bg)]
ring-4 ring-[--alpha(var(--btn-hover-bg)/50%)];
}
.btn-check:focus-visible + & {
@apply outline-0
ring-4 ring-[--alpha(var(--btn-hover-bg)/50%)];
}
.btn-check:checked + &,
:not(.btn-check) + &:active,
&:active,
&.active,
&.show {
@apply bg-[var(--btn-active-bg)] text-[var(--btn-active-color)];
}
&:is(:disabled, [disabled], .disabled) {
@apply pointer-events-none
bg-[var(--btn-disabled-bg)]
text-[var(--btn-disabled-color)]
border-[var(--btn-disabled-border-color)];
}
+ input[type='file'] {
@apply hidden;
}
.input-group & {
+ input[type='file'] {
@apply block;
}
}
}
}
/* variant filled */
@utility btn-primary {
@layer base {
--btn-bg: var(--color-primary);
--btn-color: var(--color-contrast);
--btn-hover-bg: var(--color-primary-dark);
}
}
@utility btn-secondary {
@layer base {
--btn-bg: var(--color-secondary);
--btn-color: var(--color-contrast);
--btn-hover-bg: var(--color-secondary-dark);
}
}
@utility btn-info {
@layer base {
--btn-bg: var(--color-info);
--btn-color: var(--color-contrast);
--btn-hover-bg: var(--color-info-dark);
}
}
@utility btn-success {
@layer base {
--btn-bg: var(--color-success);
--btn-color: var(--color-contrast);
--btn-hover-bg: var(--color-success-dark);
}
}
@utility btn-warning {
@layer base {
--btn-bg: var(--color-warning);
--btn-color: var(--color-contrast);
--btn-hover-bg: var(--color-warning-dark);
}
}
@utility btn-danger {
@layer base {
--btn-bg: var(--color-danger);
--btn-color: var(--color-contrast);
--btn-hover-bg: var(--color-danger-dark);
}
}
@utility btn-neutral {
@layer base {
--btn-bg: var(--color-dark);
--btn-color: var(--color-white);
--btn-hover-bg: --alpha(var(--color-dark) / 80%);
}
}
/* variant subtle */
@utility btn-subtle-primary {
@layer base {
--btn-bg: --alpha(var(--color-primary) / 15%);
--btn-color: var(--color-primary-dark);
--btn-hover-bg: --alpha(var(--color-primary) / 20%);
--btn-disabled-bg: --alpha(var(--color-primary) / 15%);
}
}
@utility btn-subtle-secondary {
@layer base {
--btn-bg: --alpha(var(--color-secondary) / 15%);
--btn-color: var(--color-secondary-dark);
--btn-hover-bg: --alpha(var(--color-secondary) / 20%);
--btn-disabled-bg: --alpha(var(--color-secondary) / 15%);
}
}
@utility btn-subtle-info {
@layer base {
--btn-bg: --alpha(var(--color-info) / 15%);
--btn-color: var(--color-info-dark);
--btn-hover-bg: --alpha(var(--color-info) / 20%);
--btn-disabled-bg: --alpha(var(--color-info) / 15%);
}
}
@utility btn-subtle-success {
@layer base {
--btn-bg: --alpha(var(--color-success) / 15%);
--btn-color: var(--color-success-dark);
--btn-hover-bg: --alpha(var(--color-success) / 20%);
--btn-disabled-bg: --alpha(var(--color-success) / 15%);
}
}
@utility btn-subtle-warning {
@layer base {
--btn-bg: --alpha(var(--color-warning) / 15%);
--btn-color: var(--color-warning-dark);
--btn-hover-bg: --alpha(var(--color-warning) / 20%);
--btn-disabled-bg: --alpha(var(--color-warning) / 15%);
}
}
@utility btn-subtle-danger {
@layer base {
--btn-bg: --alpha(var(--color-danger) / 15%);
--btn-color: var(--color-danger-dark);
--btn-hover-bg: --alpha(var(--color-danger) / 20%);
--btn-disabled-bg: --alpha(var(--color-danger) / 15%);
}
}
@utility btn-subtle-neutral {
@layer base {
--btn-bg: var(--background-color-muted);
--btn-color: var(--text-color-emphasis);
--btn-hover-bg: var(--background-color-highlight);
--btn-disabled-bg: var(--background-color-muted);
}
}
/* variant outline */
@utility btn-outline-primary {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-primary);
--btn-hover-bg: --alpha(var(--color-primary) / 12%);
--btn-border-width: 1px;
--btn-border-color: --alpha(var(--color-primary) / 50%);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
@utility btn-outline-secondary {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-secondary);
--btn-hover-bg: --alpha(var(--color-secondary) / 12%);
--btn-border-width: 1px;
--btn-border-color: --alpha(var(--color-secondary) / 50%);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
@utility btn-outline-info {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-info);
--btn-hover-bg: --alpha(var(--color-info) / 12%);
--btn-border-width: 1px;
--btn-border-color: --alpha(var(--color-info) / 50%);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
@utility btn-outline-success {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-success);
--btn-hover-bg: --alpha(var(--color-success) / 12%);
--btn-border-width: 1px;
--btn-border-color: --alpha(var(--color-success) / 50%);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
@utility btn-outline-warning {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-warning);
--btn-hover-bg: --alpha(var(--color-warning) / 12%);
--btn-border-width: 1px;
--btn-border-color: --alpha(var(--color-warning) / 50%);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
@utility btn-outline-danger {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-danger);
--btn-hover-bg: --alpha(var(--color-danger) / 12%);
--btn-border-width: 1px;
--btn-border-color: --alpha(var(--color-danger) / 50%);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
@utility btn-outline-neutral {
@layer base {
--btn-bg: transparent;
--btn-color: var(--text-color-default);
--btn-hover-bg: var(--color-hover);
--btn-border-width: 1px;
--btn-border-color: var(--background-color-emphasis);
--btn-disabled-bg: transparent;
--btn-disabled-border-color: var(--color-disabled);
}
}
/* variant text */
@utility btn-text-primary {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-primary);
--btn-hover-bg: --alpha(var(--color-primary) / 12%);
--btn-disabled-bg: transparent;
}
}
@utility btn-text-secondary {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-secondary);
--btn-hover-bg: --alpha(var(--color-secondary) / 12%);
--btn-disabled-bg: transparent;
}
}
@utility btn-text-info {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-info);
--btn-hover-bg: --alpha(var(--color-info) / 12%);
--btn-disabled-bg: transparent;
}
}
@utility btn-text-success {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-success);
--btn-hover-bg: --alpha(var(--color-success) / 12%);
--btn-disabled-bg: transparent;
}
}
@utility btn-text-warning {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-warning);
--btn-hover-bg: --alpha(var(--color-warning) / 12%);
--btn-disabled-bg: transparent;
}
}
@utility btn-text-danger {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-danger);
--btn-hover-bg: --alpha(var(--color-danger) / 12%);
--btn-disabled-bg: transparent;
}
}
@utility btn-text-neutral {
@layer base {
--btn-bg: transparent;
--btn-color: var(--text-color-default);
--btn-hover-bg: var(--color-hover);
--btn-disabled-bg: transparent;
}
}
/* square button */
@utility btn-square {
@layer base {
--btn-width: 2.3125rem;
--btn-height: 2.3125rem;
--btn-padding-y: 0;
--btn-padding-x: 0;
&.btn-sm {
--btn-width: 1.84375rem;
--btn-height: 1.84375rem;
--btn-padding-y: 0;
--btn-padding-x: 0;
}
&.btn-lg {
--btn-width: 2.75rem;
--btn-height: 2.75rem;
--btn-padding-y: 0;
--btn-padding-x: 0;
}
}
}
/* circle button */
@utility btn-circle {
@layer base {
--btn-width: 2.3125rem;
--btn-height: 2.3125rem;
--btn-padding-y: 0;
--btn-padding-x: 0;
--btn-radius: calc(infinity * 1px);
&.btn-sm {
--btn-width: 1.84375rem;
--btn-height: 1.84375rem;
--btn-padding-y: 0;
--btn-padding-x: 0;
--btn-radius: calc(infinity * 1px);
}
&.btn-lg {
--btn-width: 2.75rem;
--btn-height: 2.75rem;
--btn-padding-y: 0;
--btn-padding-x: 0;
}
}
}
/* icon button */
@utility btn-icon {
@layer base {
--btn-bg: transparent;
--btn-color: var(--color-active);
--btn-hover-bg: --alpha(var(--color-active) / 4%);
--btn-disabled-bg: transparent;
--btn-padding-y: --spacing(2);
--btn-padding-x: --spacing(2);
--btn-radius: calc(infinity * 1px);
&.btn-sm {
--btn-padding-y: --spacing(1.25);
--btn-padding-x: --spacing(1.25);
--btn-radius: calc(infinity * 1px);
}
&.btn-lg {
--btn-padding-y: --spacing(3);
--btn-padding-x: --spacing(3);
}
}
}
@utility btn-icon-primary {
@layer base {
--btn-color: var(--color-primary);
--btn-hover-bg: --alpha(var(--color-primary) / 4%);
}
}
@utility btn-icon-secondary {
@layer base {
--btn-color: var(--color-secondary);
--btn-hover-bg: --alpha(var(--color-secondary) / 4%);
}
}
@utility btn-icon-info {
@layer base {
--btn-color: var(--color-info);
--btn-hover-bg: --alpha(var(--color-info) / 4%);
}
}
@utility btn-icon-success {
@layer base {
--btn-color: var(--color-success);
--btn-hover-bg: --alpha(var(--color-success) / 4%);
}
}
@utility btn-icon-warning {
@layer base {
--btn-color: var(--color-warning);
--btn-hover-bg: --alpha(var(--color-warning) / 4%);
}
}
@utility btn-icon-danger {
@layer base {
--btn-color: var(--color-danger);
--btn-hover-bg: --alpha(var(--color-danger) / 4%);
}
}
@utility btn-link {
@layer base {
--btn-font-weight: var(--font-weight-normal);
--btn-color: var(--color-primary);
--btn-bg: transparent;
--btn-border-color: transparent;
--btn-hover-color: var(--color-primary-dark);
--btn-active-color: var(--color-primary-dark);
--btn-disabled-color: var(--color-disabled);
--btn-disabled-border-color: transparent;
--btn-hover-bg: transparent;
@apply underline;
@variant focus-visible {
@apply ring-[--alpha(var(--btn-color)/50%)];
}
}
}
@utility btn-sm {
@layer base {
--btn-padding-y: --spacing(1.25);
--btn-padding-x: --spacing(2.5);
--btn-radius: var(--radius-sm);
--btn-line-height: 1.25;
}
}
@utility btn-lg {
@layer base {
--btn-font-size: var(--text-base);
--btn-padding-y: --spacing(2.25);
--btn-padding-x: --spacing(5.5);
}
}