feat(notes): liens internes, onglet Réseau, living blocks et consentement IA
Some checks failed
CI / Lint, Test & Build (push) Failing after 1m19s
CI / Deploy production (on server) (push) Has been skipped

Rend les liens entre notes visibles et persistants (sync NoteLink au save, auto-save, graphe réseau rafraîchi), ajoute living blocks, Memory Echo, recherche globale, consentement IA explicite et consolide les prototypes design en architectural-grid.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-05-24 14:27:29 +00:00
parent 077e665dfc
commit e2672cd2c2
323 changed files with 20670 additions and 42431 deletions

View File

@@ -7,6 +7,11 @@ import { useLanguage } from '@/lib/i18n'
import { toast } from 'sonner'
import { Palette, Type, LayoutGrid, Maximize } from 'lucide-react'
import { applyDocumentTheme, normalizeThemeId, type ThemeId } from '@/lib/apply-document-theme'
import {
NOTES_LAYOUT_STORAGE_KEY,
parseNotesLayoutMode,
setNotesLayoutPreference,
} from '@/lib/notes-view-preference'
import { motion } from 'motion/react'
const PRESET_COLORS = [
@@ -38,6 +43,11 @@ export function AppearanceSettingsClient({
const [fontSize, setFontSize] = useState(initialFontSize || 'medium')
const [fontFamily, setFontFamily] = useState(initialFontFamily)
const [accentColor, setAccentColor] = useState(initialAccentColor)
const [notesLayout, setNotesLayout] = useState<'grid' | 'list' | 'table'>('list')
useEffect(() => {
setNotesLayout(parseNotesLayoutMode(localStorage.getItem(NOTES_LAYOUT_STORAGE_KEY)))
}, [])
useEffect(() => {
document.documentElement.style.setProperty('--color-brand-accent', accentColor)
@@ -83,6 +93,14 @@ export function AppearanceSettingsClient({
toast.success(t('settings.settingsSaved'))
}
const handleNotesLayoutChange = (value: string) => {
const layout = value === 'grid' ? 'grid' : value === 'table' ? 'table' : 'list'
setNotesLayout(layout)
setNotesLayoutPreference(layout)
window.dispatchEvent(new CustomEvent('memento-notes-layout-change', { detail: { layout } }))
toast.success(t('settings.settingsSaved'))
}
const SelectCard = ({
icon: Icon,
title,
@@ -275,6 +293,19 @@ export function AppearanceSettingsClient({
]}
onChange={handleFontFamilyChange}
/>
<SelectCard
icon={LayoutGrid}
title={t('settings.notesViewLabel')}
description={t('settings.notesViewDescription')}
value={notesLayout === 'grid' ? 'masonry' : notesLayout === 'table' ? 'table' : 'list'}
options={[
{ value: 'masonry', label: t('settings.notesViewMasonry') },
{ value: 'list', label: t('settings.notesViewList') },
{ value: 'table', label: t('settings.notesViewTable') },
]}
onChange={(v) => handleNotesLayoutChange(v === 'masonry' ? 'grid' : v === 'table' ? 'table' : 'list')}
/>
</div>
</div>
</motion.div>