// Top toolbar: compact, with a popover for background settings const { useState: useStateTB, useRef: useRefTB, useEffect: useEffectTB } = React; function Toolbar({ title, setTitle, subtitle, setSubtitle, showTitleOnCanvas, setShowTitleOnCanvas, bgPattern, setBgPattern, bgColor, setBgColor, canUndo, canRedo, onUndo, onRedo, onAddNode, onAddWriting, onShotMode, onSaveProject, onLoadProject, onLoadDemo, onClear, }){ const [bgOpen, setBgOpen] = useStateTB(false); const [moreOpen, setMoreOpen] = useStateTB(false); const [fileOpen, setFileOpen] = useStateTB(false); const bgRef = useRefTB(null); const moreRef = useRefTB(null); const fileRef = useRefTB(null); useEffectTB(()=>{ const onDoc = (e)=>{ if (bgRef.current && !bgRef.current.contains(e.target)) setBgOpen(false); if (moreRef.current && !moreRef.current.contains(e.target)) setMoreOpen(false); if (fileRef.current && !fileRef.current.contains(e.target)) setFileOpen(false); }; document.addEventListener('mousedown', onDoc); return ()=>document.removeEventListener('mousedown', onDoc); },[]); return (
setTitle(e.target.value)} placeholder="相関図のタイトル"/>
{bgOpen && (
パターン
{BG_PATTERNS.map(p=>(
背景色
{BG_COLORS.map(c=>(
サブタイトル
setSubtitle(e.target.value)} style={{border:'2px solid #fff', background:'#fff', borderRadius:10, padding:'6px 10px', fontSize:13, fontFamily:'inherit', outline:'none', color:'inherit'}}/>
)}
{moreOpen && (
)}
{fileOpen && (
)}
); } window.Toolbar = Toolbar;