diff --git a/memento-note/components/home-client.tsx b/memento-note/components/home-client.tsx
index 8560891..c3a9061 100644
--- a/memento-note/components/home-client.tsx
+++ b/memento-note/components/home-client.tsx
@@ -20,7 +20,7 @@ import {
import { NotebookSuggestionToast } from '@/components/notebook-suggestion-toast'
import { Button } from '@/components/ui/button'
-import { Plus, ArrowUpDown, Search, Sparkles, FileText, FolderOpen, ChevronRight, Tag as TagIcon, X, Menu, LayoutGrid, List, Table, Columns3, CalendarDays, Wand2, Download, Upload } from 'lucide-react'
+import { Plus, ArrowUpDown, Search, Sparkles, FileText, FolderOpen, ChevronRight, Tag as TagIcon, X, Menu, LayoutGrid, List, Table, Columns3, CalendarDays, Wand2, Download, Upload, MoreHorizontal } from 'lucide-react'
import { emitNoteChange } from '@/lib/note-change-sync'
import { useReminderCheck } from '@/hooks/use-reminder-check'
import { useAutoLabelSuggestion } from '@/hooks/use-auto-label-suggestion'
@@ -34,6 +34,7 @@ import { StudyPlannerDialog } from '@/components/wizard/study-planner-dialog'
import { NotebookOrganizerDialog } from '@/components/wizard/notebook-organizer-dialog'
import { toast } from 'sonner'
import { AnimatePresence, motion } from 'motion/react'
+import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'
type SortOrder = 'newest' | 'oldest' | 'alpha' | 'manual'
@@ -849,7 +850,7 @@ export function HomeClient({
-
+
-
+
+
+ {/* Layout mode */}
-
selectLayoutMode('grid')}
- className={cn(
- 'p-1.5 rounded-full transition-all',
- layoutMode === 'grid'
- ? 'bg-foreground text-background shadow-sm'
- : 'text-muted-foreground hover:text-foreground',
- )}
- title={t('notes.layoutGridTitle')}
- >
-
-
-
selectLayoutMode('list')}
- className={cn(
- 'p-1.5 rounded-full transition-all',
- layoutMode === 'list'
- ? 'bg-foreground text-background shadow-sm'
- : 'text-muted-foreground hover:text-foreground',
- )}
- title={t('notes.layoutListTitle')}
- >
-
-
- {!notebookFilter && (
-
selectLayoutMode('table')}
- className={cn(
- 'p-1.5 rounded-full transition-all',
- layoutMode === 'table'
- ? 'bg-foreground text-background shadow-sm'
- : 'text-muted-foreground hover:text-foreground',
- )}
- title={t('notes.layoutTableTitle')}
- >
+ selectLayoutMode('grid')} className={cn('p-1.5 rounded-full transition-all', layoutMode === 'grid' ? 'bg-foreground text-background shadow-sm' : 'text-muted-foreground hover:text-foreground')} title={t('notes.layoutGridTitle')}>
+
+
+ selectLayoutMode('list')} className={cn('p-1.5 rounded-full transition-all', layoutMode === 'list' ? 'bg-foreground text-background shadow-sm' : 'text-muted-foreground hover:text-foreground')} title={t('notes.layoutListTitle')}>
+
+
+ {notebookFilter && (
+ <>
+
+ selectLayoutMode('table')} className={cn('p-1.5 rounded-full transition-all', layoutMode === 'table' ? 'bg-foreground text-background shadow-sm' : 'text-muted-foreground hover:text-foreground')} title={t('structuredViews.viewTableHint')}>
- )}
- {notebookFilter && (
- <>
-
- selectLayoutMode('table')}
- className={cn(
- 'p-1.5 rounded-full transition-all',
- layoutMode === 'table'
- ? 'bg-foreground text-background shadow-sm'
- : 'text-muted-foreground hover:text-foreground',
- )}
- title={t('structuredViews.viewTableHint')}
- >
-
-
- selectLayoutMode('kanban')}
- className={cn(
- 'p-1.5 rounded-full transition-all',
- layoutMode === 'kanban'
- ? 'bg-foreground text-background shadow-sm'
- : 'text-muted-foreground hover:text-foreground',
- )}
- title={t('structuredViews.viewKanbanHint')}
- >
-
-
- >
- )}
-
+
selectLayoutMode('kanban')} className={cn('p-1.5 rounded-full transition-all', layoutMode === 'kanban' ? 'bg-foreground text-background shadow-sm' : 'text-muted-foreground hover:text-foreground')} title={t('structuredViews.viewKanbanHint')}>
+
+
+ >
+ )}
+
{currentNotebook && structuredModeActive && (
-
setAddPropertyOpen(true)}
- className="p-1.5 rounded-full text-muted-foreground hover:text-brand-accent transition-colors"
- title={t('structuredViews.addProperty')}
- >
+ setAddPropertyOpen(true)} className="p-1.5 rounded-full text-muted-foreground hover:text-brand-accent transition-colors" title={t('structuredViews.addProperty')}>
)}
- {searchParams.get('notebook') && initialSettings.aiAssistantEnabled && (
-
- setSummaryDialogOpen(true)}
- className="flex items-center gap-1.5 text-[12px] text-muted-foreground hover:text-foreground transition-colors"
- >
-
- {t('notebook.summary')}
-
-
- setShowStudyPlanner(true)}
- className="flex items-center gap-1.5 text-[12px] text-muted-foreground hover:text-brand-accent transition-colors"
- >
-
- {t('wizard.studyPlanner') || 'Planning'}
-
-
- setOrganizeNotebookOpen(true)}
- className="flex items-center gap-1.5 text-[12px] text-muted-foreground hover:text-brand-accent transition-colors"
- title={t('notebook.organizeNotebookWithAITooltip')}
- >
-
- {t('batch.organize')}
-
-
- )}
- {searchParams.get('notebook') && (
-
-
-
-
-
-
-
-
- )}
+ {/* Sort */}
setSortOrder(s => s === 'newest' ? 'oldest' : s === 'oldest' ? 'alpha' : s === 'alpha' ? 'manual' : 'newest')}
- className="flex items-center gap-2 text-[13px] text-foreground font-medium hover:opacity-70 transition-opacity"
+ className="flex items-center gap-1.5 text-[13px] text-muted-foreground hover:text-foreground transition-colors"
>
-
- {sortLabels[sortOrder]}
+
+ {sortLabels[sortOrder]}
+
+ {/* AI + utils dropdown */}
+ {searchParams.get('notebook') && (
+
+
+
+
+
+
+
+ {initialSettings.aiAssistantEnabled && (
+ <>
+ setSummaryDialogOpen(true)}>
+
+ {t('notebook.summary')}
+
+ setShowStudyPlanner(true)}>
+
+ {t('wizard.studyPlanner') || 'Planning'}
+
+ setOrganizeNotebookOpen(true)}>
+
+ {t('batch.organize')}
+
+
+ >
+ )}
+
+
+ {t('structuredViews.importCsv') || 'Importer CSV'}
+
+
+
+ {t('structuredViews.exportCsv') || 'Exporter CSV'}
+
+
+
+ )}