"use client"
import { cn } from "@/lib/utils"
import { AutomationTabMasonry } from "@/components/gmail/settings/automation/automation-tab-masonry"
import {
MAIL_SETTINGS_PAGE_MASONRY_SECTION_CLASS,
} from "@/lib/mail-chrome-classes"
import { useThemeModeControls } from "@/lib/demo/use-theme-mode-controls"
import { useMailSettingsStore } from "@/lib/stores/mail-settings-store"
import type {
InboxSortMode,
MailBackgroundId,
MailDensity,
MailThemeMode,
ReadingPaneMode,
} from "@/lib/mail-settings/types"
import {
QuickSettingsCheckbox,
QuickSettingsOption,
} from "@/components/gmail/quick-settings/quick-settings-option"
import {
DensityCompactIcon,
DensityDefaultIcon,
DensityNormalIcon,
InboxDefaultIcon,
InboxImportantIcon,
InboxStarredIcon,
InboxUnreadIcon,
ReadingPaneBelowIcon,
ReadingPaneNoneIcon,
ReadingPaneRightIcon,
ThemeModePreview,
} from "@/components/gmail/quick-settings/settings-preview-icons"
import {
MAIL_BACKGROUND_PRESETS,
normalizeMailBackgroundId,
} from "@/lib/mail-settings/constants"
const DENSITY_OPTIONS: {
id: MailDensity
label: string
icon: React.ReactNode
}[] = [
{ id: "default", label: "Par défaut", icon: },
{ id: "normal", label: "Normal", icon: },
{ id: "compact", label: "Compact", icon: },
]
const INBOX_OPTIONS: {
id: InboxSortMode
label: string
icon: React.ReactNode
}[] = [
{ id: "default", label: "Par défaut", icon: },
{
id: "important",
label: "Importants d'abord",
icon: ,
},
{ id: "unread", label: "Non lus d'abord", icon: },
{ id: "starred", label: "Suivis d'abord", icon: },
]
const READING_PANE_OPTIONS: {
id: ReadingPaneMode
label: string
icon: React.ReactNode
disabled?: boolean
}[] = [
{
id: "none",
label: "Aucune séparation",
icon: ,
},
{
id: "right",
label: "À droite de la boîte de réception",
icon: ,
},
{
id: "below",
label: "Sous la boîte de réception",
icon: ,
disabled: true,
},
]
const THEME_OPTIONS: {
id: MailThemeMode
label: string
}[] = [
{ id: "light", label: "Clair" },
{ id: "dark", label: "Sombre" },
{ id: "system", label: "Système" },
]
function ThemeModePicker({
themeMode,
onSelect,
compact = false,
}: {
themeMode: MailThemeMode
onSelect: (mode: MailThemeMode) => void
compact?: boolean
}) {
return (
{THEME_OPTIONS.map((opt) => (
))}
)
}
function SettingsSection({
title,
action,
children,
className,
variant = "panel",
}: {
title: string
action?: React.ReactNode
children: React.ReactNode
className?: string
variant?: "panel" | "page"
}) {
return (
)
}
function SectionHeader({
title,
action,
}: {
title: string
action?: React.ReactNode
}) {
return (
{title}
{action}
)
}
export function MailSettingsFields({
variant = "panel",
onOpenThemeDialog,
}: {
variant?: "panel" | "page"
onOpenThemeDialog?: () => void
}) {
const density = useMailSettingsStore((s) => s.density)
const setDensity = useMailSettingsStore((s) => s.setDensity)
const { themeMode, setThemeMode } = useThemeModeControls()
const backgroundId = useMailSettingsStore((s) => s.backgroundId)
const setBackgroundId = useMailSettingsStore((s) => s.setBackgroundId)
const inboxSort = useMailSettingsStore((s) => s.inboxSort)
const setInboxSort = useMailSettingsStore((s) => s.setInboxSort)
const readingPane = useMailSettingsStore((s) => s.readingPane)
const setReadingPane = useMailSettingsStore((s) => s.setReadingPane)
const conversationMode = useMailSettingsStore((s) => s.conversationMode)
const setConversationMode = useMailSettingsStore((s) => s.setConversationMode)
const infiniteScroll = useMailSettingsStore((s) => s.infiniteScroll)
const setInfiniteScroll = useMailSettingsStore((s) => s.setInfiniteScroll)
const activeBackgroundId = normalizeMailBackgroundId(backgroundId)
const isPage = variant === "page"
const fields = (
<>
{DENSITY_OPTIONS.map((opt) => (
setDensity(opt.id)}
icon={opt.icon}
/>
))}
Arrière-plan
) : null
}
>
{variant === "panel" && onOpenThemeDialog ? (
) : (
<>
Arrière-plan
{MAIL_BACKGROUND_PRESETS.map((preset) => (
))}
>
)}
{INBOX_OPTIONS.map((opt) => (
setInboxSort(opt.id)}
icon={opt.icon}
/>
))}
{READING_PANE_OPTIONS.map((opt) => (
{
if (!opt.disabled) setReadingPane(opt.id)
}}
icon={opt.icon}
/>
))}
>
)
if (isPage) {
return {fields}
}
return fields
}