diff --git a/src/app/(dashboard)/configuracoes/fontes/page.tsx b/src/app/(dashboard)/configuracoes/fontes/page.tsx
new file mode 100644
index 0000000..61cb28a
--- /dev/null
+++ b/src/app/(dashboard)/configuracoes/fontes/page.tsx
@@ -0,0 +1,17 @@
+import type { Metadata } from 'next'
+
+import { SettingsContainer } from '@/modules/settings/layout/settings-container'
+
+import { FontSizeCards } from '../../../../modules/settings/cards/fontsize/fontsize-cards'
+
+export const metadata: Metadata = {
+ title: 'Tamanho da fonte',
+}
+
+export default function Page() {
+ return (
+
+
+
+ )
+}
diff --git a/src/app/(dashboard)/configuracoes/layout.tsx b/src/app/(dashboard)/configuracoes/layout.tsx
new file mode 100644
index 0000000..76276c3
--- /dev/null
+++ b/src/app/(dashboard)/configuracoes/layout.tsx
@@ -0,0 +1,14 @@
+import { SettingsSidebar } from '@/modules/settings/layout'
+
+import { SettingsContent } from '../../../modules/settings/layout/settings-content'
+
+export default async function Layout({
+ children,
+}: Readonly<{ children: React.ReactNode }>) {
+ return (
+
+
+ {children}
+
+ )
+}
diff --git a/src/app/(dashboard)/configuracoes/page.tsx b/src/app/(dashboard)/configuracoes/page.tsx
index 0bdd6fd..d8833cc 100644
--- a/src/app/(dashboard)/configuracoes/page.tsx
+++ b/src/app/(dashboard)/configuracoes/page.tsx
@@ -1,15 +1,16 @@
import type { Metadata } from 'next'
+import { NotificationPreferences } from '@/modules/settings/cards/notifications/notifications-cards'
+import { SettingsContainer } from '@/modules/settings/layout/settings-container'
+
export const metadata: Metadata = {
title: 'Configurações',
}
-import { DashboardContainer } from '@/components/dashboard/container'
-
export default function Page() {
return (
-
- Configurações
-
+
+
+
)
}
diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx
new file mode 100644
index 0000000..260a559
--- /dev/null
+++ b/src/components/ui/switch.tsx
@@ -0,0 +1,13 @@
+'use client'
+import { Switch as BaseSwitch } from '@base-ui-components/react/switch'
+
+export function Switch() {
+ return (
+
+
+
+ )
+}
diff --git a/src/constants/routes.ts b/src/constants/routes.ts
index 5a405f5..5ea7ae7 100644
--- a/src/constants/routes.ts
+++ b/src/constants/routes.ts
@@ -43,6 +43,7 @@ export const ROUTES = {
},
settings: {
main: '/configuracoes',
+ fontSize: '/configuracoes/fontes',
},
support: {
main: '/suporte',
diff --git a/src/modules/settings/cards/fontsize/fontsize-cards.tsx b/src/modules/settings/cards/fontsize/fontsize-cards.tsx
new file mode 100644
index 0000000..5e614dc
--- /dev/null
+++ b/src/modules/settings/cards/fontsize/fontsize-cards.tsx
@@ -0,0 +1,33 @@
+'use client'
+
+import { useState } from 'react'
+
+import { FontSizeCard } from '@/modules/settings/cards/fontsize'
+
+type FontSize = 'small' | 'medium' | 'large'
+
+export function FontSizeCards() {
+ const [selectedSize, setSelectedSize] = useState('medium')
+
+ return (
+
+ setSelectedSize('small')}
+ />
+ setSelectedSize('medium')}
+ />
+ setSelectedSize('large')}
+ />
+
+ )
+}
diff --git a/src/modules/settings/cards/fontsize/index.tsx b/src/modules/settings/cards/fontsize/index.tsx
new file mode 100644
index 0000000..2e4a97c
--- /dev/null
+++ b/src/modules/settings/cards/fontsize/index.tsx
@@ -0,0 +1,58 @@
+'use client'
+import { twMerge } from 'tailwind-merge'
+
+import { Button } from '@/components/ui/button'
+import { Card } from '@/components/ui/card'
+
+interface FontSizeCardProps {
+ sizeLabel: string
+ textDisplayClass?: string
+ isSelected?: boolean
+ onClick?: () => void
+ className?: string
+}
+
+export function FontSizeCard({
+ sizeLabel,
+ textDisplayClass,
+ isSelected = false,
+ onClick,
+ className,
+}: FontSizeCardProps) {
+ return (
+
+ )
+}
diff --git a/src/modules/settings/cards/notifications/index.tsx b/src/modules/settings/cards/notifications/index.tsx
new file mode 100644
index 0000000..9cb7d17
--- /dev/null
+++ b/src/modules/settings/cards/notifications/index.tsx
@@ -0,0 +1,15 @@
+import { Card } from '@/components/ui/card'
+import { Switch } from '@/components/ui/switch'
+
+interface NotificationCardProps {
+ label: string
+}
+
+export function NotificationCard({ label }: NotificationCardProps) {
+ return (
+
+ {label}
+
+
+ )
+}
diff --git a/src/modules/settings/cards/notifications/notifications-cards.tsx b/src/modules/settings/cards/notifications/notifications-cards.tsx
new file mode 100644
index 0000000..091b435
--- /dev/null
+++ b/src/modules/settings/cards/notifications/notifications-cards.tsx
@@ -0,0 +1,12 @@
+import { NotificationCard } from './index'
+
+export function NotificationPreferences() {
+ return (
+
+
+
+
+
+
+ )
+}
diff --git a/src/modules/settings/layout/index.tsx b/src/modules/settings/layout/index.tsx
new file mode 100644
index 0000000..6f684a3
--- /dev/null
+++ b/src/modules/settings/layout/index.tsx
@@ -0,0 +1,32 @@
+import { ALargeSmall, BellDot } from 'lucide-react'
+
+import { ROUTES } from '@/constants/routes'
+
+import { SettingsMenuSection } from './settings-menu-section'
+import { SettingsSidebarContainer } from './settings-sidebar-container'
+
+export function SettingsSidebar() {
+ return (
+
+
+
+ )
+}
+
+const SETTINGS_SIDEBAR_SECTIONS = [
+ {
+ id: 'common',
+ links: [
+ {
+ label: 'Notificações',
+ icon: ,
+ path: ROUTES.dashboard.settings.main,
+ },
+ {
+ label: 'Tamanho da fonte',
+ icon: ,
+ path: ROUTES.dashboard.settings.fontSize,
+ },
+ ],
+ },
+]
diff --git a/src/modules/settings/layout/settings-container.tsx b/src/modules/settings/layout/settings-container.tsx
new file mode 100644
index 0000000..fc6e6a5
--- /dev/null
+++ b/src/modules/settings/layout/settings-container.tsx
@@ -0,0 +1,8 @@
+import { cn } from '@/utils/class-name-merge'
+
+export function SettingsContainer({
+ className,
+ ...props
+}: Readonly>) {
+ return
+}
diff --git a/src/modules/settings/layout/settings-content.tsx b/src/modules/settings/layout/settings-content.tsx
new file mode 100644
index 0000000..6173afe
--- /dev/null
+++ b/src/modules/settings/layout/settings-content.tsx
@@ -0,0 +1,39 @@
+'use client'
+
+import { usePathname } from 'next/navigation'
+import { type ReactNode } from 'react'
+
+import { SettingsHeader } from '@/modules/settings/layout/settings-header'
+
+const HEADERS_TEXT = {
+ notificacoes: {
+ title: 'Notificações',
+ description: 'Gerencie quais notificações deseja receber.',
+ },
+ fontes: {
+ title: 'Tamanho da fonte',
+ description: 'Selecione o tamanho da fonte',
+ },
+ policies: {
+ title: 'Políticas de privacidade e termos de uso',
+ description: 'Revise nossas políticas de privacidade e termos de uso.',
+ },
+}
+
+export function SettingsContent({ children }: { children: ReactNode }) {
+ const pathname = usePathname()
+ const pathSegments = pathname.split('/')
+ const lastSegment = pathSegments[pathSegments.length - 1]
+
+ const pageKey = lastSegment === 'configuracoes' ? 'notificacoes' : lastSegment
+
+ const { title, description } =
+ HEADERS_TEXT[pageKey as keyof typeof HEADERS_TEXT]
+
+ return (
+
+
+ {children}
+
+ )
+}
diff --git a/src/modules/settings/layout/settings-header.tsx b/src/modules/settings/layout/settings-header.tsx
new file mode 100644
index 0000000..6ea2385
--- /dev/null
+++ b/src/modules/settings/layout/settings-header.tsx
@@ -0,0 +1,18 @@
+import { Divider } from '@/components/ui/divider'
+
+interface SettingsHeaderProps {
+ title: string
+ description: string
+}
+
+export function SettingsHeader({ title, description }: SettingsHeaderProps) {
+ return (
+ <>
+
+ {title}
+ {description}
+
+
+ >
+ )
+}
diff --git a/src/modules/settings/layout/settings-menu-section.tsx b/src/modules/settings/layout/settings-menu-section.tsx
new file mode 100644
index 0000000..2a92966
--- /dev/null
+++ b/src/modules/settings/layout/settings-menu-section.tsx
@@ -0,0 +1,51 @@
+'use client'
+import { usePathname } from 'next/navigation'
+
+import { NavButton } from '@/components/ui/nav-button'
+import { cn } from '@/utils/class-name-merge'
+
+interface SettingsMenuSectionProps {
+ sections: {
+ id: string
+ links: {
+ label: string
+ icon: React.ReactNode
+ path: string
+ }[]
+ }[]
+}
+
+export function SettingsMenuSection({
+ sections,
+}: Readonly) {
+ const pathname = usePathname()
+
+ return (
+
+ {sections.map((section) => (
+
+
+
+ ))}
+
+ )
+}
diff --git a/src/modules/settings/layout/settings-sidebar-container.tsx b/src/modules/settings/layout/settings-sidebar-container.tsx
new file mode 100644
index 0000000..1fbc5f1
--- /dev/null
+++ b/src/modules/settings/layout/settings-sidebar-container.tsx
@@ -0,0 +1,14 @@
+export function SettingsSidebarContainer({
+ ...props
+}: Readonly>) {
+ return (
+
+ )
+}