mirror of
https://github.com/bitwarden/browser
synced 2025-12-17 00:33:44 +00:00
* [CL-254] Rename 500 colors to 600 to prep for UI redesign --------- Co-authored-by: Will Martin <contact@willmartian.com>
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import { Directive, ElementRef, HostBinding, Input } from "@angular/core";
|
|
|
|
export type BadgeVariant = "primary" | "secondary" | "success" | "danger" | "warning" | "info";
|
|
|
|
const styles: Record<BadgeVariant, string[]> = {
|
|
primary: ["tw-bg-primary-600"],
|
|
secondary: ["tw-bg-text-muted"],
|
|
success: ["tw-bg-success-600"],
|
|
danger: ["tw-bg-danger-600"],
|
|
warning: ["tw-bg-warning-600"],
|
|
info: ["tw-bg-info-600"],
|
|
};
|
|
|
|
const hoverStyles: Record<BadgeVariant, string[]> = {
|
|
primary: ["hover:tw-bg-primary-700"],
|
|
secondary: ["hover:tw-bg-secondary-700"],
|
|
success: ["hover:tw-bg-success-700"],
|
|
danger: ["hover:tw-bg-danger-700"],
|
|
warning: ["hover:tw-bg-warning-700"],
|
|
info: ["hover:tw-bg-info-700"],
|
|
};
|
|
|
|
@Directive({
|
|
selector: "span[bitBadge], a[bitBadge], button[bitBadge]",
|
|
})
|
|
export class BadgeDirective {
|
|
@HostBinding("class") get classList() {
|
|
return [
|
|
"tw-inline-block",
|
|
"tw-py-0.5",
|
|
"tw-px-1.5",
|
|
"tw-font-bold",
|
|
"tw-text-center",
|
|
"tw-align-text-top",
|
|
"!tw-text-contrast",
|
|
"tw-rounded",
|
|
"tw-border-none",
|
|
"tw-box-border",
|
|
"tw-whitespace-nowrap",
|
|
"tw-text-xs",
|
|
"hover:tw-no-underline",
|
|
"focus:tw-outline-none",
|
|
"focus:tw-ring",
|
|
"focus:tw-ring-offset-2",
|
|
"focus:tw-ring-primary-700",
|
|
]
|
|
.concat(styles[this.variant])
|
|
.concat(this.hasHoverEffects ? hoverStyles[this.variant] : [])
|
|
.concat(this.truncate ? ["tw-truncate", "tw-max-w-40"] : []);
|
|
}
|
|
@HostBinding("attr.title") get title() {
|
|
return this.truncate ? this.el.nativeElement.textContent.trim() : null;
|
|
}
|
|
|
|
/**
|
|
* Variant, sets the background color of the badge.
|
|
*/
|
|
@Input() variant: BadgeVariant = "primary";
|
|
|
|
/**
|
|
* Truncate long text
|
|
*/
|
|
@Input() truncate = true;
|
|
|
|
private hasHoverEffects = false;
|
|
|
|
constructor(private el: ElementRef<HTMLElement>) {
|
|
this.hasHoverEffects = el?.nativeElement?.nodeName != "SPAN";
|
|
}
|
|
}
|