import { logger } from '@strudel/core'; import useEvent from '@src/useEvent.mjs'; import cx from '@src/cx.mjs'; import { nanoid } from 'nanoid'; import { useCallback, useState } from 'react'; import { setPanelPinned, setActiveFooter as setTab, useSettings } from '../../../settings.mjs'; import { ConsoleTab } from './ConsoleTab'; import { FilesTab } from './FilesTab'; import { Reference } from './Reference'; import { SettingsTab } from './SettingsTab'; import { SoundsTab } from './SoundsTab'; import { WelcomeTab } from './WelcomeTab'; import { PatternsTab } from './PatternsTab'; import { ChevronLeftIcon } from '@heroicons/react/16/solid'; const TAURI = typeof window !== 'undefined' && window.__TAURI__; export function HorizontalPanel({ context }) { const settings = useSettings(); const { isPanelPinned: pinned, activeFooter: tab } = settings; return (
); } export function VerticalPanel({ context }) { const settings = useSettings(); const { isPanelPinned: pinned, activeFooter: tab } = settings; return ( setIsHovered(true)} onMouseLeave={(x) => setIsHovered(false)} className={cx( 'hover:min-w-[min(600px,80vw)] hover:max-w-[min(600px,80vw)]', pinned ? `min-w-[min(600px,80vw)] max-w-[min(600px,80vw)]` : 'min-w-8', )} >
); } const tabNames = { welcome: 'intro', patterns: 'patterns', sounds: 'sounds', reference: 'reference', console: 'console', settings: 'settings', }; if (TAURI) { tabNames.files = 'files'; } function PanelNav({ children, className, ...props }) { return ( ); } function PanelContent({ context, tab }) { const [log, setLog] = useState([]); useLogger( useCallback((e) => { const { message, type, data } = e.detail; setLog((l) => { const lastLog = l.length ? l[l.length - 1] : undefined; const id = nanoid(12); // if (type === 'loaded-sample' && lastLog.type === 'load-sample' && lastLog.url === data.url) { if (type === 'loaded-sample') { // const loadIndex = l.length - 1; const loadIndex = l.findIndex(({ data: { url }, type }) => type === 'load-sample' && url === data.url); l[loadIndex] = { message, type, id, data }; } else if (lastLog && lastLog.message === message) { l = l.slice(0, -1).concat([{ message, type, count: (lastLog.count ?? 1) + 1, id, data }]); } else { l = l.concat([{ message, type, id, data }]); } return l.slice(-20); }); }, []), ); switch (tab) { case tabNames.patterns: return ; case tabNames.console: return ; case tabNames.sounds: return ; case tabNames.reference: return ; case tabNames.settings: return ; case tabNames.files: return ; default: return ; } } function PanelTab({ label, isSelected, onClick }) { return ( <>
{label}
); } function Tabs({ setTab, tab }) { return (
{Object.keys(tabNames).map((key) => { const val = tabNames[key]; return setTab(val)} />; })}
); } function PinButton({ pinned, setPinned }) { return ( ); } function useLogger(onTrigger) { useEvent(logger.key, onTrigger); }