feat(dashboard): tableau de bord Second Brain configurable avec chargement progressif
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m3s
CI / Deploy production (on server) (push) Successful in 23s

Briefing granulaire, pistes rapides puis enrichissement async, layout persisté v5,
suggestions agents, intégration Gmail et navigation sidebar alignée sur /home.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-07-14 16:50:53 +00:00
parent d38a99586b
commit 30da592ba2
62 changed files with 7741 additions and 335 deletions

View File

@@ -6,6 +6,7 @@ import { NoteChartFromCode } from './note-chart'
import { useState } from 'react'
import { Code, BarChart3, AlertCircle } from 'lucide-react'
import { cn } from '@/lib/utils'
import { useLanguage } from '@/lib/i18n'
/**
* ChartExtension - TipTap Node extension for rendering chart blocks
@@ -107,6 +108,7 @@ export const ChartExtension = Node.create({
* - Error handling for invalid chart data
*/
function ChartBlockView(props: any) {
const { t } = useLanguage()
const [isEditing, setIsEditing] = useState(false)
const [parseError, setParseError] = useState(false)
@@ -120,7 +122,7 @@ function ChartBlockView(props: any) {
<NodeViewWrapper className="notion-chart-code-block my-4">
<div className="flex items-center gap-2 px-3 py-2 bg-muted/50 rounded-t-lg border-b border-border">
<Code className="w-4 h-4 text-muted-foreground" />
<span className="text-sm text-muted-foreground">Chart Code</span>
<span className="text-sm text-muted-foreground">{t('chart.code')}</span>
<button
onClick={() => setIsEditing(false)}
className="ml-auto text-xs px-2 py-1 bg-primary text-primary-foreground rounded hover:opacity-90 transition-opacity"
@@ -144,8 +146,8 @@ function ChartBlockView(props: any) {
<div className="flex items-center gap-3 text-muted-foreground">
<AlertCircle className="w-5 h-5" />
<div>
<p className="font-medium">Invalid Chart</p>
<p className="text-sm">This chart block contains invalid or empty data.</p>
<p className="font-medium">{t('chart.invalid')}</p>
<p className="text-sm">{t('chart.invalidDescription')}</p>
</div>
</div>
</div>
@@ -158,7 +160,7 @@ function ChartBlockView(props: any) {
'absolute top-2 right-2 p-2 rounded-lg bg-background/80 backdrop-blur border border-border shadow-sm opacity-0 group-hover:opacity-100 transition-opacity',
'hover:bg-background hover:shadow-md'
)}
title="Edit chart source"
title={t('chart.editSource')}
>
<Code className="w-4 h-4 text-muted-foreground" />
</button>