diff --git a/src/app/(dashboard)/accounts/[accountId]/statement/loading.tsx b/src/app/(dashboard)/accounts/[accountId]/statement/loading.tsx index 9fe7bd7..3ae0af4 100644 --- a/src/app/(dashboard)/accounts/[accountId]/statement/loading.tsx +++ b/src/app/(dashboard)/accounts/[accountId]/statement/loading.tsx @@ -13,7 +13,7 @@ export default function ExtratoLoading() { return (
{/* Month Picker placeholder */} -
+
{/* Account Statement Card */} @@ -23,7 +23,7 @@ export default function ExtratoLoading() {
{/* Header */}
- +
{/* Filtros */} diff --git a/src/app/(dashboard)/accounts/loading.tsx b/src/app/(dashboard)/accounts/loading.tsx index 8d41920..21b8a65 100644 --- a/src/app/(dashboard)/accounts/loading.tsx +++ b/src/app/(dashboard)/accounts/loading.tsx @@ -6,23 +6,23 @@ export default function ContasLoading() {
{/* Header */}
- - + +
{/* Grid de contas */}
{Array.from({ length: 6 }).map((_, i) => ( -
+
- - + +
- - + +
- - + +
))} diff --git a/src/app/(dashboard)/budgets/loading.tsx b/src/app/(dashboard)/budgets/loading.tsx index e44ea8c..7edeb8f 100644 --- a/src/app/(dashboard)/budgets/loading.tsx +++ b/src/app/(dashboard)/budgets/loading.tsx @@ -8,53 +8,53 @@ export default function OrcamentosLoading() { return (
{/* Month Picker placeholder */} -
+
{/* Header */}
- - + +
- +
{/* Grid de cards de orçamentos */}
{Array.from({ length: 6 }).map((_, i) => ( -
+
{/* Category com ícone */}
- +
- - + +
{/* Valor orçado */}
- - + +
{/* Valor gasto */}
- - + +
{/* Barra de progresso */}
- +
{/* Botões de ação */}
- - + +
))} diff --git a/src/app/(dashboard)/calendar/loading.tsx b/src/app/(dashboard)/calendar/loading.tsx index 1234798..36536ed 100644 --- a/src/app/(dashboard)/calendar/loading.tsx +++ b/src/app/(dashboard)/calendar/loading.tsx @@ -8,15 +8,15 @@ export default function CalendarioLoading() { return (
{/* Month Picker placeholder */} -
+
{/* Calendar Container */} -
+
{/* Cabeçalho com dias da semana */}
{["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"].map((day) => (
- +
))}
@@ -26,17 +26,17 @@ export default function CalendarioLoading() { {Array.from({ length: 42 }).map((_, i) => (
{/* Número do dia */} - + {/* Indicadores de eventos (aleatório entre 0-3) */} {i % 3 === 0 && (
- + {i % 5 === 0 && ( - + )}
)} @@ -49,7 +49,7 @@ export default function CalendarioLoading() { {Array.from({ length: 4 }).map((_, i) => (
- +
))}
diff --git a/src/app/(dashboard)/cards/[cardId]/invoice/loading.tsx b/src/app/(dashboard)/cards/[cardId]/invoice/loading.tsx index 5aed886..8cf0463 100644 --- a/src/app/(dashboard)/cards/[cardId]/invoice/loading.tsx +++ b/src/app/(dashboard)/cards/[cardId]/invoice/loading.tsx @@ -13,7 +13,7 @@ export default function FaturaLoading() { return (
{/* Month Picker placeholder */} -
+
{/* Invoice Summary Card */}
@@ -25,8 +25,8 @@ export default function FaturaLoading() {
{/* Header */}
- - + +
{/* Filtros */} diff --git a/src/app/(dashboard)/cards/loading.tsx b/src/app/(dashboard)/cards/loading.tsx index f914020..8616cc1 100644 --- a/src/app/(dashboard)/cards/loading.tsx +++ b/src/app/(dashboard)/cards/loading.tsx @@ -6,21 +6,21 @@ export default function CartoesLoading() {
{/* Header */}
- - + +
{/* Grid de cartões */}
{Array.from({ length: 6 }).map((_, i) => ( -
+
- - + +
- - - + + +
))}
diff --git a/src/app/(dashboard)/categories/history/loading.tsx b/src/app/(dashboard)/categories/history/loading.tsx index d04b11d..d4933e2 100644 --- a/src/app/(dashboard)/categories/history/loading.tsx +++ b/src/app/(dashboard)/categories/history/loading.tsx @@ -25,7 +25,7 @@ export default function Loading() {
{/* Chart */} - +
diff --git a/src/app/(dashboard)/categories/loading.tsx b/src/app/(dashboard)/categories/loading.tsx index 4da52eb..0086417 100644 --- a/src/app/(dashboard)/categories/loading.tsx +++ b/src/app/(dashboard)/categories/loading.tsx @@ -7,8 +7,8 @@ export default function CategoriasLoading() {
{/* Header */}
- - + +
{/* Tabs */} @@ -17,7 +17,7 @@ export default function CategoriasLoading() { {Array.from({ length: 3 }).map((_, i) => ( ))}
@@ -40,7 +40,7 @@ export default function CategoriasLoading() { key={i} className="flex items-center gap-4 border-b border-dashed px-2 py-3 last:border-b-0" > - + -
- - +
+ +
- {/* Month Picker skeleton */} - +
+
+
+ + + +
+ +
+
- {/* Dashboard content skeleton (Section Cards + Widget Grid) */} +
); diff --git a/src/app/(dashboard)/insights/loading.tsx b/src/app/(dashboard)/insights/loading.tsx index 98d3014..183fdb9 100644 --- a/src/app/(dashboard)/insights/loading.tsx +++ b/src/app/(dashboard)/insights/loading.tsx @@ -9,26 +9,26 @@ export default function InsightsLoading() {
{/* Header */}
- - + +
{/* Grid de insights */}
{Array.from({ length: 4 }).map((_, i) => ( -
+
- - - + + +
- - - + + +
))} diff --git a/src/app/(dashboard)/notes/loading.tsx b/src/app/(dashboard)/notes/loading.tsx index ddafb51..528d82c 100644 --- a/src/app/(dashboard)/notes/loading.tsx +++ b/src/app/(dashboard)/notes/loading.tsx @@ -10,33 +10,33 @@ export default function AnotacoesLoading() {
{/* Header */}
- - + +
{/* Grid de cards de notas */}
{Array.from({ length: 6 }).map((_, i) => ( -
+
{/* Título */} - + {/* Conteúdo (3-4 linhas) */}
- - - + + + {i % 2 === 0 && ( - + )}
{/* Footer com data e ações */}
- +
- - + +
diff --git a/src/app/(dashboard)/payers/[payerId]/loading.tsx b/src/app/(dashboard)/payers/[payerId]/loading.tsx index d13108e..1bb7800 100644 --- a/src/app/(dashboard)/payers/[payerId]/loading.tsx +++ b/src/app/(dashboard)/payers/[payerId]/loading.tsx @@ -7,63 +7,63 @@ import { Skeleton } from "@/shared/components/ui/skeleton"; export default function PagadorDetailsLoading() { return (
-
+
- - - + + +
-
+
- - + +
- +
- +
- - + +
-
- +
+
{Array.from({ length: 3 }).map((_, i) => (
- - + +
))}
{Array.from({ length: 4 }).map((_, i) => ( -
+
- - + +
- - - + + +
))} diff --git a/src/app/(dashboard)/payers/loading.tsx b/src/app/(dashboard)/payers/loading.tsx index 944cf9e..694a434 100644 --- a/src/app/(dashboard)/payers/loading.tsx +++ b/src/app/(dashboard)/payers/loading.tsx @@ -9,44 +9,44 @@ export default function PagadoresLoading() {
{/* Input de código de compartilhamento */} -
- +
+
- - + +
{/* Grid de cards de pagadores */}
{Array.from({ length: 6 }).map((_, i) => ( -
+
{/* Avatar + Nome + Badge */}
- - + +
{i === 0 && ( - + )}
{/* Email */} - + {/* Status */}
- +
{/* Botões de ação */}
- - - + + +
))} diff --git a/src/app/(dashboard)/reports/card-usage/loading.tsx b/src/app/(dashboard)/reports/card-usage/loading.tsx index 300a5be..04b874f 100644 --- a/src/app/(dashboard)/reports/card-usage/loading.tsx +++ b/src/app/(dashboard)/reports/card-usage/loading.tsx @@ -22,7 +22,7 @@ export default function Loading() { {/* Cards grid */}
{[1, 2, 3, 4].map((i) => ( - + ))}
diff --git a/src/app/(dashboard)/transactions/loading.tsx b/src/app/(dashboard)/transactions/loading.tsx index 8fae457..4b51712 100644 --- a/src/app/(dashboard)/transactions/loading.tsx +++ b/src/app/(dashboard)/transactions/loading.tsx @@ -12,13 +12,13 @@ export default function LancamentosLoading() { return (
{/* Month Picker placeholder */} -
+
{/* Header com título e botão */}
- - + +
{/* Filtros */} diff --git a/src/shared/components/skeletons/account-statement-card-skeleton.tsx b/src/shared/components/skeletons/account-statement-card-skeleton.tsx index 45b7712..717902f 100644 --- a/src/shared/components/skeletons/account-statement-card-skeleton.tsx +++ b/src/shared/components/skeletons/account-statement-card-skeleton.tsx @@ -1,43 +1,44 @@ import { Skeleton } from "@/shared/components/ui/skeleton"; -/** - * Skeleton para o card de resumo da conta (AccountStatementCard) - * Reflete fielmente o layout: logo + nome + tipo + badge + métricas - */ export function AccountStatementCardSkeleton() { return ( -
- {/* Header com logo, nome, tipo e badge */} -
-
- {/* Logo */} - +
+
+ {/* Linha 1 — identidade */} +
+
+ +
+ + +
+
+ +
-
- {/* Nome da conta */} - - {/* Tipo de conta */} - + {/* Linha 2 — saldo hero */} +
+ + +
+ +
-
- {/* Badge de status */} - - {/* Botão de editar */} - + {/* Linha 3 — breakdown */} +
+ {Array.from({ length: 4 }).map((_, i) => ( +
+ + +
+ ))}
- - {/* Métricas em grid */} -
- {Array.from({ length: 4 }).map((_, i) => ( -
- - -
- ))} -
); } diff --git a/src/shared/components/skeletons/category-report-skeleton.tsx b/src/shared/components/skeletons/category-report-skeleton.tsx index 8dd013d..e808981 100644 --- a/src/shared/components/skeletons/category-report-skeleton.tsx +++ b/src/shared/components/skeletons/category-report-skeleton.tsx @@ -23,16 +23,16 @@ export function CategoryReportSkeleton() {
{/* Category MultiSelect */} - + {/* Start Period */} - + {/* End Period */} - + {/* Clear Button */} - +
{/* Export Button */} - +
@@ -40,8 +40,8 @@ export function CategoryReportSkeleton() {
- - + +
@@ -58,11 +58,11 @@ export function CategoryReportSkeleton() {
{/* Category name with icon */}
- - + +
{/* Type badge */} - + {/* Values */}
{Array.from({ length: 3 }).map((_, j) => ( @@ -70,8 +70,8 @@ export function CategoryReportSkeleton() { key={j} className="flex items-center justify-between" > - - + +
))}
@@ -87,17 +87,17 @@ export function CategoryReportSkeleton() {
{/* Chart title area */}
- - + +
{/* Chart area */} - + {/* Legend */}
{Array.from({ length: 6 }).map((_, i) => (
- +
))}
@@ -124,17 +124,17 @@ function CategoryReportTableSkeleton() { {/* Category */} - + {/* Period columns */} {Array.from({ length: periodColumns }).map((_, i) => ( - + ))} {/* Total */} - + @@ -146,24 +146,24 @@ function CategoryReportTableSkeleton() {
- - + +
{/* Period values */} {Array.from({ length: periodColumns }).map((_, colIndex) => (
- + {colIndex > 0 && ( - + )}
))} {/* Total */} - + ))} @@ -173,17 +173,17 @@ function CategoryReportTableSkeleton() { {/* Total label */} - + {/* Period totals */} {Array.from({ length: periodColumns }).map((_, i) => ( - + ))} {/* Grand total */} - + diff --git a/src/shared/components/skeletons/dashboard-grid-skeleton.tsx b/src/shared/components/skeletons/dashboard-grid-skeleton.tsx index 549bcec..919a404 100644 --- a/src/shared/components/skeletons/dashboard-grid-skeleton.tsx +++ b/src/shared/components/skeletons/dashboard-grid-skeleton.tsx @@ -1,17 +1,21 @@ -import { DashboardMetricsCardsSkeleton } from "./dashboard-metrics-cards-skeleton"; +import { Skeleton } from "@/shared/components/ui/skeleton"; import { WidgetSkeleton } from "./widget-skeleton"; -/** - * Skeleton completo para o dashboard grid - * Mantém a mesma estrutura de layout do dashboard real - */ export function DashboardGridSkeleton() { return (
- {/* Cards de métricas no topo */} - +
+
+ + + +
+
+ + +
+
- {/* Grid de widgets - mesmos breakpoints do dashboard real */}
{Array.from({ length: 9 }).map((_, i) => ( diff --git a/src/shared/components/skeletons/dashboard-metrics-cards-skeleton.tsx b/src/shared/components/skeletons/dashboard-metrics-cards-skeleton.tsx index 49e5e60..c2d01c7 100644 --- a/src/shared/components/skeletons/dashboard-metrics-cards-skeleton.tsx +++ b/src/shared/components/skeletons/dashboard-metrics-cards-skeleton.tsx @@ -1,34 +1,35 @@ -import { Card, CardFooter, CardHeader } from "@/shared/components/ui/card"; +import { + Card, + CardFooter, + CardHeader, + CardTitle, +} from "@/shared/components/ui/card"; import { Skeleton } from "@/shared/components/ui/skeleton"; -/** - * Skeleton fiel aos cards de métricas do dashboard (DashboardMetricsCards) - * Mantém o mesmo layout de 4 colunas responsivo - */ export function DashboardMetricsCardsSkeleton() { return ( -
+
{Array.from({ length: 4 }).map((_, index) => ( - + -
- {/* Título com ícone */} -
- - -
- - {/* Valor principal */} - - - {/* Badge de tendência */} - + + + + +
+ +
- - - + +
+ + +
))} diff --git a/src/shared/components/skeletons/filter-skeleton.tsx b/src/shared/components/skeletons/filter-skeleton.tsx index 9324e9e..ec815ca 100644 --- a/src/shared/components/skeletons/filter-skeleton.tsx +++ b/src/shared/components/skeletons/filter-skeleton.tsx @@ -10,11 +10,11 @@ export function FilterSkeleton() { {Array.from({ length: 6 }).map((_, i) => ( ))} - - + +
); } diff --git a/src/shared/components/skeletons/invoice-summary-card-skeleton.tsx b/src/shared/components/skeletons/invoice-summary-card-skeleton.tsx index acc137f..8a19d93 100644 --- a/src/shared/components/skeletons/invoice-summary-card-skeleton.tsx +++ b/src/shared/components/skeletons/invoice-summary-card-skeleton.tsx @@ -6,58 +6,54 @@ import { Skeleton } from "@/shared/components/ui/skeleton"; */ export function InvoiceSummaryCardSkeleton() { return ( -
- {/* Header com logo, nome, bandeira e badges */} -
-
- {/* Logo do cartão */} - - -
- {/* Nome do cartão */} - - -
- {/* Bandeira */} - - {/* Badge de status */} - -
+
+
+
+ +
+ +
- - {/* Botão de editar */} - +
- {/* Informações da fatura */} -
- {/* Período e status */} -
- - -
- - {/* Total da fatura */} +
- - -
- - {/* Limite e utilização */} -
-
- - -
-
- - + + +
+ +
- {/* Botão de ação */} - +
+ + +
+
+ +
+ {Array.from({ length: 4 }).map((_, i) => ( + + ))} +
+ +
+
+
+ + +
+
+ + +
+
); diff --git a/src/shared/components/skeletons/transactions-table-skeleton.tsx b/src/shared/components/skeletons/transactions-table-skeleton.tsx index 0ab958d..fd66394 100644 --- a/src/shared/components/skeletons/transactions-table-skeleton.tsx +++ b/src/shared/components/skeletons/transactions-table-skeleton.tsx @@ -14,7 +14,7 @@ import { */ export function TransactionsTableSkeleton() { return ( -
+
@@ -24,8 +24,8 @@ export function TransactionsTableSkeleton() { Valor Condição Pagamento - Payer - Category + Pagador + Categoria Conta/Cartão Ações @@ -34,45 +34,45 @@ export function TransactionsTableSkeleton() { {Array.from({ length: 8 }).map((_, i) => ( - + - + - + - + - + - +
- +
- - + +
- - + +
- - + +
diff --git a/src/shared/components/skeletons/widget-skeleton.tsx b/src/shared/components/skeletons/widget-skeleton.tsx index 443bd56..8532f79 100644 --- a/src/shared/components/skeletons/widget-skeleton.tsx +++ b/src/shared/components/skeletons/widget-skeleton.tsx @@ -1,40 +1,40 @@ import { Card, CardContent, CardHeader } from "@/shared/components/ui/card"; import { Skeleton } from "@/shared/components/ui/skeleton"; -/** - * Skeleton fiel ao WidgetCard - * Usado enquanto widgets do dashboard estão carregando - */ +const LINE_WIDTHS = ["w-full", "w-5/6", "w-4/5", "w-full", "w-3/4"] as const; +const SUBLABEL_WIDTHS = ["w-24", "w-16", "w-20", "w-28", "w-16"] as const; + export function WidgetSkeleton() { return (
- {/* Title com ícone */}
- - + +
- {/* Subtitle */} - +
- {/* Simula 5 linhas de conteúdo */} {Array.from({ length: 5 }).map((_, i) => (
- +
- - + +
- +
))}