import React, { useRef, useState } from 'react'; import type { LayoutApi } from '../types'; import { PROFILE_EXTENSION, STANDARD_PROFILE } from '../core/profile'; /** The "Layout" part of the + palette: save, load, export and import `.profile` files, and reset. */ export function LayoutSection({ layout }: { layout: LayoutApi }) { const [name, setName] = useState(''); const [note, setNote] = useState<{ text: string; error?: boolean } | null>(null); const fileRef = useRef(null); const names = layout.list(); const attempt = (fn: () => string) => { try { setNote({ text: fn() }); } catch (err) { setNote({ text: (err as Error).message, error: true }); } }; const save = (e: React.FormEvent) => { e.preventDefault(); if (!name.trim()) return; attempt(() => { const p = layout.save(name); setName(''); return `saved "${p.name}"`; }); }; const importFile = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; e.target.value = ''; if (!file) return; const text = await file.text(); attempt(() => `imported and applied "${layout.importProfile(text, file.name)}"`); }; return (
Layout {layout.active ? `active: ${layout.active}` : 'not saved yet'}
{names.length > 0 && (
    {names.map(n => (
  • ))}
)}
setName(e.target.value)} placeholder="Save layout as…" aria-label="Layout name" className="uif-input" />
{note &&

{note.text}

}
); }