fix(brainstorm): dialog sélection carnet sur Create Note depuis canvas
Some checks failed
CI / Lint, Unit Tests & Build (push) Failing after 1m29s
CI / Deploy production (on server) (push) Has been skipped

Vrai fix UX: quand l'utilisateur clique 'Create Note' dans le canvas brainstorm,
il voit maintenant un dialog (ConvertNotebookDialog) qui demande dans
quel carnet sauvegarder la note — au lieu d'aller silencieusement dans
le carnet source ou un carnet auto-créé.

- convert-notebook-dialog.tsx (162 lignes): dialog de sélection carnet
  - design system respecté: emerald, memento-paper, font-memento-serif
  - preview de l'idée en card
  - dropdown carnet avec animation d'expansion
  - bouton 'Create note' avec loader
  - role=dialog, aria-modal, aria-label
- brainstorm-page.tsx: convertConfirm state + bouton 'Create Note' ouvre le dialog
- 3 nouvelles clés i18n (EN/FR): convertTitle, convertSubtitle, ideaLabel
This commit is contained in:
Antigravity
2026-07-05 20:11:47 +00:00
parent a99d1dafb2
commit f44a0f9c68
4 changed files with 27 additions and 5 deletions

View File

@@ -1,8 +1,8 @@
{
"version": 1,
"lastRunAtMs": 1783196565768,
"turnsSinceLastRun": 5,
"turnsSinceLastRun": 6,
"lastTranscriptMtimeMs": 1783196565691.0437,
"lastProcessedGenerationId": "7ac52bd5-5714-460a-9c3b-e4b21907d6d7",
"lastProcessedGenerationId": "6ccc52d1-8073-4386-b4d0-84c60a305da2",
"trialStartedAtMs": null
}

View File

@@ -54,6 +54,7 @@ import {
import { useBrainstormSocket } from '@/hooks/use-brainstorm-socket'
import { LiveCursors, PresenceAvatars, useCursorTracking } from '@/components/brainstorm/live-cursors'
import { ActivityFeed } from '@/components/brainstorm/activity-feed'
import { ConvertNotebookDialog } from './convert-notebook-dialog'
import { BrainstormShareDialog } from '@/components/brainstorm/brainstorm-share-dialog'
import { GhostCursor } from '@/components/brainstorm/ghost-cursor'
import { PlaybackBar } from '@/components/brainstorm/playback-bar'
@@ -129,6 +130,7 @@ export function BrainstormPage() {
const expandIdea = useExpandIdea(activeSessionId || '')
const dismissIdea = useDismissIdea(activeSessionId || '')
const convertIdea = useConvertIdea(activeSessionId || '')
const [convertConfirm, setConvertConfirm] = useState<BrainstormIdea | null>(null)
const exportBrainstorm = useExportBrainstorm(activeSessionId || '')
const finalizeBrainstorm = useFinalizeBrainstorm(activeSessionId || '')
const deleteBrainstorm = useDeleteBrainstorm()
@@ -896,7 +898,7 @@ export function BrainstormPage() {
</span>
</button>
<button
onClick={() => handleConvert(selectedIdea)}
onClick={() => setConvertConfirm(selectedIdea)}
disabled={selectedIdea.status === 'converted' || convertIdea.isPending}
className="flex flex-col items-center justify-center p-6 border-2 border-dashed border-border rounded-2xl hover:border-emerald-400/40 hover:bg-emerald-500/5 transition-all group disabled:opacity-50"
>
@@ -1156,6 +1158,20 @@ export function BrainstormPage() {
onClose={peek.close}
onOpenFully={(n) => { router.push(`/home?openNote=${n.id}`); peek.close() }}
/>
{/* Dialog de sélection de carnet pour la conversion */}
<ConvertNotebookDialog
open={convertConfirm !== null}
idea={convertConfirm}
notebooks={notebooks}
defaultNotebookId={urlNotebookId}
onClose={() => setConvertConfirm(null)}
onConfirm={(notebookId) => {
if (!convertConfirm) return
handleConvert(convertConfirm, notebookId)
setConvertConfirm(null)
}}
/>
</div>
)
}

View File

@@ -3077,7 +3077,10 @@
"launching": "Launching…",
"launch": "Brainstorm",
"noteCreatedIn": "Note created in",
"openNotebook": "Open notebook"
"openNotebook": "Open notebook",
"convertTitle": "Create note from idea",
"convertSubtitle": "Choose where to save this note",
"ideaLabel": "Idea"
},
"byokSettings": {
"title": "Your API keys (BYOK)",

View File

@@ -3081,7 +3081,10 @@
"launching": "Lancement…",
"launch": "Brainstormer",
"noteCreatedIn": "Note créée dans",
"openNotebook": "Ouvrir le carnet"
"openNotebook": "Ouvrir le carnet",
"convertTitle": "Créer une note depuis cette idée",
"convertSubtitle": "Choisir où sauvegarder cette note",
"ideaLabel": "Idée"
},
"byokSettings": {
"title": "Vos clés API (BYOK)",