blob: dd0bce94f0bd3f92b8186e865bab00f291e4be56 [file] [edit]
@use "functions" as *;
@use "mixins/border-radius" as *;
@use "mixins/focus-ring" as *;
@use "mixins/tokens" as *;
$chip-tokens: () !default;
// stylelint-disable custom-property-no-missing-var-function
// scss-docs-start chip-tokens
// stylelint-disable-next-line scss/dollar-variable-default
$chip-tokens: defaults(
(
--chip-height: 1.75rem,
--chip-padding-x: .625rem,
--chip-gap: .3125rem,
--chip-border-radius: var(--radius-pill),
--chip-img-size: 1.25rem,
--chip-icon-size: 1rem,
--chip-dismiss-size: 1rem,
--chip-dismiss-opacity: .65,
--chip-dismiss-hover-opacity: 1,
--chip-color: var(--theme-fg, var(--fg-body)),
--chip-bg: var(--theme-bg-subtle, var(--bg-2)),
--chip-border-color: transparent,
--chip-selected-color: var(--theme-contrast, var(--primary-contrast)),
--chip-selected-bg: var(--theme-bg, var(--primary-bg)),
--chip-selected-border-color: var(--theme-bg, var(--primary-bg)),
),
$chip-tokens
);
// scss-docs-end chip-tokens
// stylelint-enable custom-property-no-missing-var-function
@layer components {
.chip {
@include tokens($chip-tokens);
display: inline-flex;
gap: var(--chip-gap);
align-items: center;
height: var(--chip-height);
padding-inline: var(--chip-padding-x);
font-size: var(--chip-font-size, var(--font-size-sm));
font-weight: var(--chip-font-weight, var(--font-weight-base));
line-height: var(--chip-line-height, 1.25rem);
color: var(--chip-color);
text-decoration: none;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
background-color: var(--chip-bg);
border: var(--border-width) solid var(--chip-border-color);
@include border-radius(var(--chip-border-radius));
&:hover {
--chip-bg: var(--theme-bg-muted, var(--bg-3));
}
&:focus-visible {
outline: 0;
}
&.active {
--chip-color: var(--chip-selected-color);
--chip-bg: var(--chip-selected-bg);
--chip-border-color: var(--chip-selected-border-color);
&:hover {
--chip-bg: var(--chip-selected-bg);
opacity: .9;
}
}
&.disabled,
&:disabled {
pointer-events: none;
opacity: .65;
}
}
.chip-img {
width: var(--chip-img-size);
height: var(--chip-img-size);
@include border-radius(50%);
&:first-child {
margin-inline-start: -.375rem;
}
}
// Chip icon (left side)
.chip-icon {
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: center;
margin-inline-start: calc(var(--chip-gap) * -.25);
> svg {
display: block; // Prevents baseline alignment issues
width: var(--chip-icon-size);
height: var(--chip-icon-size);
}
> img {
width: var(--chip-icon-size);
height: var(--chip-icon-size);
object-fit: cover;
@include border-radius(50%);
}
}
// Dismiss button (right side)
.chip-dismiss {
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: center;
width: var(--chip-dismiss-size);
height: var(--chip-dismiss-size);
padding: 0;
margin-inline-end: calc(var(--chip-padding-x) * -.25);
color: inherit;
cursor: pointer;
background: transparent;
border: 0;
opacity: var(--chip-dismiss-opacity);
&:hover {
opacity: var(--chip-dismiss-hover-opacity);
}
&:focus-visible {
outline: 0;
opacity: 1;
@include focus-ring();
}
> svg {
display: block; // Prevents baseline alignment issues
width: var(--chip-dismiss-size);
height: var(--chip-dismiss-size);
}
}
}