feat: dashboard Second Brain, essai 7 jours et vérification e-mail
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m14s
CI / Deploy production (on server) (push) Successful in 1m25s

Rendre le dashboard actionnable (inbox, peek, carte mentale), aligner la facturation sur l’essai 7 jours, et bloquer le login e-mail tant que l’adresse n’est pas confirmée.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-08-30 07:19:36 +00:00
parent 69c99e4f4f
commit 80ccc1f6de
95 changed files with 4158 additions and 618 deletions

View File

@@ -40,6 +40,7 @@ import { toast } from 'sonner'
interface DashboardWidgetGridProps {
renderWidget: (id: DashboardWidgetId) => React.ReactNode
isWidgetEmpty?: (id: DashboardWidgetId) => boolean
}
function SortableWidget({
@@ -139,7 +140,7 @@ function ZoneColumn({
)
}
export function DashboardWidgetGrid({ renderWidget }: DashboardWidgetGridProps) {
export function DashboardWidgetGrid({ renderWidget, isWidgetEmpty }: DashboardWidgetGridProps) {
const { t } = useLanguage()
const [layout, setLayout] = useState<DashboardLayout>(() => getDefaultDashboardLayout())
const [editMode, setEditMode] = useState(false)
@@ -228,8 +229,11 @@ export function DashboardWidgetGrid({ renderWidget }: DashboardWidgetGridProps)
}, [persistLayout, t])
const fullWidgets = visibleWidgetsInZone(layout, 'full')
.filter(w => editMode || !isWidgetEmpty?.(w.id))
const mainWidgets = visibleWidgetsInZone(layout, 'main')
.filter(w => editMode || !isWidgetEmpty?.(w.id))
const sideWidgets = visibleWidgetsInZone(layout, 'side')
.filter(w => editMode || !isWidgetEmpty?.(w.id))
const hidden = hiddenWidgetIds(layout)
const catalog = catalogByCategory(layout)
const hasVisibleWidgets = fullWidgets.length + mainWidgets.length + sideWidgets.length > 0