mirror of
https://github.com/felipegcoutinho/openmonetis.git
synced 2026-05-09 02:51:46 +00:00
feat(budgets, cards): progress bar em cor destructive quando limite excedido
Adiciona prop indicatorClassName ao componente Progress. Orçamentos estourados e cartões com 100% do limite utilizado exibem a barra com indicador e fundo na cor destructive. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -90,6 +90,7 @@ export function BudgetCard({ budget, onEdit, onRemove }: BudgetCardProps) {
|
|||||||
<Progress
|
<Progress
|
||||||
value={usagePercent}
|
value={usagePercent}
|
||||||
className={cn("h-2.5", exceeded && "bg-destructive/20!")}
|
className={cn("h-2.5", exceeded && "bg-destructive/20!")}
|
||||||
|
indicatorClassName={cn(exceeded && "bg-destructive")}
|
||||||
aria-label={`${usagePercent.toFixed(1)}% do orçamento utilizado`}
|
aria-label={`${usagePercent.toFixed(1)}% do orçamento utilizado`}
|
||||||
/>
|
/>
|
||||||
<span className="text-xs text-muted-foreground">
|
<span className="text-xs text-muted-foreground">
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ export function CardItem({
|
|||||||
|
|
||||||
const usagePercent =
|
const usagePercent =
|
||||||
limit > 0 ? Math.min(Math.max((used / limit) * 100, 0), 100) : 0;
|
limit > 0 ? Math.min(Math.max((used / limit) * 100, 0), 100) : 0;
|
||||||
|
const exceeded = usagePercent >= 100;
|
||||||
|
|
||||||
const logoPath = resolveLogoSrc(logo);
|
const logoPath = resolveLogoSrc(logo);
|
||||||
const brandAsset = resolveCardBrandAsset(brand);
|
const brandAsset = resolveCardBrandAsset(brand);
|
||||||
@@ -194,7 +195,8 @@ export function CardItem({
|
|||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<Progress
|
<Progress
|
||||||
value={usagePercent}
|
value={usagePercent}
|
||||||
className="h-2.5"
|
className={cn("h-2.5", exceeded && "bg-destructive/20!")}
|
||||||
|
indicatorClassName={cn(exceeded && "bg-destructive")}
|
||||||
aria-label={`${usagePercent.toFixed(0)}% do limite utilizado`}
|
aria-label={`${usagePercent.toFixed(0)}% do limite utilizado`}
|
||||||
/>
|
/>
|
||||||
<span className="text-xs text-muted-foreground">
|
<span className="text-xs text-muted-foreground">
|
||||||
|
|||||||
@@ -7,9 +7,12 @@ import { cn } from "@/shared/utils/ui";
|
|||||||
|
|
||||||
function Progress({
|
function Progress({
|
||||||
className,
|
className,
|
||||||
|
indicatorClassName,
|
||||||
value,
|
value,
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof ProgressPrimitive.Root>) {
|
}: React.ComponentProps<typeof ProgressPrimitive.Root> & {
|
||||||
|
indicatorClassName?: string;
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<ProgressPrimitive.Root
|
<ProgressPrimitive.Root
|
||||||
data-slot="progress"
|
data-slot="progress"
|
||||||
@@ -21,7 +24,10 @@ function Progress({
|
|||||||
>
|
>
|
||||||
<ProgressPrimitive.Indicator
|
<ProgressPrimitive.Indicator
|
||||||
data-slot="progress-indicator"
|
data-slot="progress-indicator"
|
||||||
className="bg-primary h-full w-full flex-1 transition-all"
|
className={cn(
|
||||||
|
"bg-primary h-full w-full flex-1 transition-all",
|
||||||
|
indicatorClassName,
|
||||||
|
)}
|
||||||
style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
|
style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
|
||||||
/>
|
/>
|
||||||
</ProgressPrimitive.Root>
|
</ProgressPrimitive.Root>
|
||||||
|
|||||||
Reference in New Issue
Block a user