// Tweaks.jsx — design-system edit-mode panel const { useState: useStateT, useEffect: useEffectT } = React; function Tweaks({ state, setState, defaults }) { const [active, setActive] = useStateT(false); useEffectT(() => { const onMsg = (e) => { if (!e.data || typeof e.data !== 'object') return; if (e.data.type === '__activate_edit_mode') setActive(true); if (e.data.type === '__deactivate_edit_mode') setActive(false); }; window.addEventListener('message', onMsg); // announce only AFTER listener is registered window.parent.postMessage({ type: '__edit_mode_available' }, '*'); return () => window.removeEventListener('message', onMsg); }, []); const update = (key, val) => { const next = { ...state, [key]: val }; setState(next); window.parent.postMessage({ type: '__edit_mode_set_keys', edits: { [key]: val } }, '*'); }; const group = (label, options, key) => (
{options.map(o => ( ))}
); return (
Tweaks
{group('Hero mode', [ { val: 'dark', label: 'Dark' }, { val: 'purple', label: 'Purple' }, { val: 'light', label: 'Light' }, ], 'heroMode')} {group('Cursor', [ { val: true, label: 'Custom' }, { val: false, label: 'Default' }, ], 'customCursor')} {group('Type voice', [ { val: 'serif', label: 'Serif' }, { val: 'sans', label: 'Sans' }, ], 'typeVoice')}
update('marqueeSpeed', Number(e.target.value))} />
{group('Accent', [ { val: 'gold', label: 'Gold' }, { val: 'none', label: 'None' }, ], 'accent')}
); } window.Tweaks = Tweaks;