feat: changelog como página própria, versão 1.7.1
- Remove aba Changelog de Ajustes; cria página em /changelog - Adiciona link para /changelog no menu do usuário com versão ao lado - Data do changelog formatada como dd/mm/aaaa - Limpa formatação ** do CHANGELOG.md - Bump de versão para 1.7.1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
24
CHANGELOG.md
24
CHANGELOG.md
@@ -5,26 +5,28 @@ Todas as mudanças notáveis deste projeto serão documentadas neste arquivo.
|
||||
O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/),
|
||||
e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR/).
|
||||
|
||||
## [1.7.0] - 2026-02-24
|
||||
## [1.7.1] - 2026-02-24
|
||||
|
||||
### Adicionado
|
||||
|
||||
- **Topbar de navegação** como experimento: substitui o header fixo por uma topbar com backdrop blur (`bg-card/80`), agrupando os links de navegação em 5 grupos lógicos (Dashboard, Lançamentos, Cartões, Relatórios, Ferramentas)
|
||||
- **Dropdown "Ferramentas"** na topbar: consolida calculadora e modo privacidade em um único menu (`components/topbar/ferramentas-dropdown.tsx`)
|
||||
- **NotificationBell expandida**: passa a exibir notificações de orçamentos estourados e pré-lançamentos pendentes além das notificações gerais, com seções separadas por tipo e contagem agregada
|
||||
- Topbar de navegação substituindo o header fixo: backdrop blur, links agrupados em 5 seções (Dashboard, Lançamentos, Cartões, Relatórios, Ferramentas)
|
||||
- Dropdown Ferramentas na topbar consolidando calculadora e modo privacidade
|
||||
- Sino de notificações expandido: exibe orçamentos estourados e pré-lançamentos pendentes com seções separadas e contagem agregada
|
||||
- Página dedicada de changelog em `/changelog`
|
||||
- Link para o changelog no menu do usuário com versão exibida ao lado
|
||||
|
||||
### Alterado
|
||||
|
||||
- **Logo** refatorado com variante `compact` usada na topbar
|
||||
- **TopbarUser**: incorpora o botão de logout (antes em `logout-button.tsx` separado)
|
||||
- **Topbar**: links em lowercase; layout centralizado em `max-w-8xl`; `radix-ui ^1.4.3` adicionado como dependência
|
||||
- **Gráfico de relatório de categorias** (`category-report-chart`): refatoração interna
|
||||
- Logo refatorado com variante compacta para uso na topbar
|
||||
- Menu do usuário incorpora o botão de logout e link para ajustes
|
||||
- Links da topbar em lowercase; layout centralizado em max-w-8xl
|
||||
- Data no changelog exibida no formato dd/mm/aaaa
|
||||
|
||||
### Removido
|
||||
|
||||
- `components/header-dashboard.tsx` — substituído pela topbar
|
||||
- `components/auth/logout-button.tsx` — lógica incorporada ao `TopbarUser`
|
||||
- `components/privacy-mode-toggle.tsx` — movido para o `FerramentasDropdown`
|
||||
- Header lateral substituído pela topbar
|
||||
- Aba Changelog removida de Ajustes (agora é página própria)
|
||||
- Componentes separados de logout e modo privacidade (incorporados à topbar)
|
||||
|
||||
## [1.6.3] - 2026-02-19
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ import { RiArrowRightSLine } from "@remixicon/react";
|
||||
import { headers } from "next/headers";
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
import { ChangelogTab } from "@/components/ajustes/changelog-tab";
|
||||
import { CompanionTab } from "@/components/ajustes/companion-tab";
|
||||
import { DeleteAccountForm } from "@/components/ajustes/delete-account-form";
|
||||
import { PreferencesForm } from "@/components/ajustes/preferences-form";
|
||||
@@ -12,8 +11,6 @@ import { UpdatePasswordForm } from "@/components/ajustes/update-password-form";
|
||||
import { Card } from "@/components/ui/card";
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
||||
import { auth } from "@/lib/auth/config";
|
||||
import { parseChangelog } from "@/lib/changelog/parse-changelog";
|
||||
|
||||
import { fetchAjustesPageData } from "./data";
|
||||
|
||||
export default async function Page() {
|
||||
@@ -31,8 +28,6 @@ export default async function Page() {
|
||||
const { authProvider, userPreferences, userApiTokens } =
|
||||
await fetchAjustesPageData(session.user.id);
|
||||
|
||||
const changelogVersions = parseChangelog();
|
||||
|
||||
return (
|
||||
<div className="w-full">
|
||||
<Tabs defaultValue="preferencias" className="w-full">
|
||||
@@ -45,14 +40,13 @@ export default async function Page() {
|
||||
<TabsTrigger value="nome">Alterar nome</TabsTrigger>
|
||||
<TabsTrigger value="senha">Alterar senha</TabsTrigger>
|
||||
<TabsTrigger value="email">Alterar e-mail</TabsTrigger>
|
||||
<TabsTrigger value="changelog">Changelog</TabsTrigger>
|
||||
<TabsTrigger value="deletar" className="text-destructive">
|
||||
Deletar conta
|
||||
</TabsTrigger>
|
||||
</TabsList>
|
||||
</div>
|
||||
<div
|
||||
className="pointer-events-none absolute right-0 top-0 hidden h-9 w-10 items-center justify-end bg-gradient-to-l from-background to-transparent md:hidden"
|
||||
className="pointer-events-none absolute right-0 top-0 hidden h-9 w-10 items-center justify-end bg-linear-to-l from-background to-transparent md:hidden"
|
||||
aria-hidden
|
||||
>
|
||||
<RiArrowRightSLine className="size-5 shrink-0 text-muted-foreground" />
|
||||
@@ -139,10 +133,6 @@ export default async function Page() {
|
||||
</Card>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="changelog" className="mt-4">
|
||||
<ChangelogTab versions={changelogVersions} />
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="deletar" className="mt-4">
|
||||
<Card className="p-6">
|
||||
<div className="space-y-4">
|
||||
|
||||
23
app/(dashboard)/changelog/layout.tsx
Normal file
23
app/(dashboard)/changelog/layout.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
import { RiHistoryLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Cartões | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<section className="space-y-6 pt-4">
|
||||
<PageDescription
|
||||
icon={<RiHistoryLine />}
|
||||
title="Changelog"
|
||||
subtitle="Acompanhe todas as alterações feitas na plataforma."
|
||||
/>
|
||||
{children}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
12
app/(dashboard)/changelog/page.tsx
Normal file
12
app/(dashboard)/changelog/page.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import { ChangelogTab } from "@/components/ajustes/changelog-tab";
|
||||
import { parseChangelog } from "@/lib/changelog/parse-changelog";
|
||||
|
||||
export default function ChangelogPage() {
|
||||
const versions = parseChangelog();
|
||||
|
||||
return (
|
||||
<div className="w-full">
|
||||
<ChangelogTab versions={versions} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
RiHistoryLine,
|
||||
RiLogoutCircleLine,
|
||||
RiMessageLine,
|
||||
RiSettings2Line,
|
||||
@@ -23,6 +24,7 @@ import { authClient } from "@/lib/auth/client";
|
||||
import { getAvatarSrc } from "@/lib/pagadores/utils";
|
||||
import { cn } from "@/lib/utils/ui";
|
||||
import { version } from "@/package.json";
|
||||
import { Badge } from "../ui/badge";
|
||||
|
||||
const itemClass =
|
||||
"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors hover:bg-accent";
|
||||
@@ -100,6 +102,15 @@ export function TopbarUser({ user, pagadorAvatarUrl }: TopbarUserProps) {
|
||||
Ajustes
|
||||
</Link>
|
||||
|
||||
<Link
|
||||
href="/changelog"
|
||||
className={cn(itemClass, "text-foreground")}
|
||||
>
|
||||
<RiHistoryLine className="size-4 text-muted-foreground shrink-0" />
|
||||
<span className="flex-1">Changelog</span>
|
||||
<Badge variant="secondary">v{version}</Badge>
|
||||
</Link>
|
||||
|
||||
<DialogTrigger asChild>
|
||||
<button
|
||||
type="button"
|
||||
@@ -132,12 +143,6 @@ export function TopbarUser({ user, pagadorAvatarUrl }: TopbarUserProps) {
|
||||
{logoutLoading ? "Saindo..." : "Sair"}
|
||||
</button>
|
||||
</div>
|
||||
<DropdownMenuSeparator />
|
||||
<div className="px-3 py-1.5">
|
||||
<span className="text-[10px] font-mono text-muted-foreground/40 select-none">
|
||||
Versão {version}
|
||||
</span>
|
||||
</div>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<FeedbackDialogBody onClose={() => setFeedbackOpen(false)} />
|
||||
|
||||
@@ -29,9 +29,10 @@ export function parseChangelog(): ChangelogVersion[] {
|
||||
if (currentSection && currentVersion) {
|
||||
currentVersion.sections.push(currentSection);
|
||||
}
|
||||
const [y, m, d] = versionMatch[2].split("-");
|
||||
currentVersion = {
|
||||
version: versionMatch[1],
|
||||
date: versionMatch[2],
|
||||
date: d && m && y ? `${d}/${m}/${y}` : versionMatch[2],
|
||||
sections: [],
|
||||
};
|
||||
versions.push(currentVersion);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "openmonetis",
|
||||
"version": "1.6.3",
|
||||
"version": "1.7.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev --turbopack",
|
||||
|
||||
Reference in New Issue
Block a user