/* IMPORT */ import {render, store, tick, For, Switch, Ternary} from 'voby'; /* TYPES */ type AnimItem = { id: number, time: number }; type AnimState = { items: AnimItem[] }; type TableItem = { id: number, active: boolean, props: string[] }; type TableState = { items: TableItem[] }; type TreeItem = { id: number, container: boolean, children: TreeItem[] }; type TreeState = { root: TreeItem }; type State = { location: 'anim' | 'table' | 'tree' | 'unknown', anim: AnimState, table: TableState, tree: TreeState }; type Results = Record; /* STATE */ const state = store({ location: 'unknown', anim: { items: [] }, table: { items: [] }, tree: { root: { id: 0, container: true, children: [] } } }); /* MAIN */ const Anim = ({ state }: { state: AnimState }): JSX.Element => { return (
{item => { const id = () => item ().id; const borderRadius = () => item ().time % 10; const background = () => `rgba(0,0,0,${0.5 + ( ( item ().time % 10 ) / 10 )})`; return
; }}
); }; const Table = ({ state }: { state: TableState }): JSX.Element => { const onClick = ( event: MouseEvent ): void => { console.log ( 'Clicked' + event.target?.textContent ); event.stopPropagation (); }; return ( {item => { const id = () => item ().id; const className = () => item ().active ? 'TableRow active' : 'TableRow'; const content = () => `#${item ().id}`; return ( item ().props} unkeyed> {text => ( )} ); }}
{content} {text}
); }; const TreeNode = ({ item }: { item: () => TreeItem }): JSX.Element => { return (
    item ().children} unkeyed> {item => ( item ().container}> )}
); }; const TreeLeaf = ({ item }: { item: () => TreeItem }): JSX.Element => { return (
  • {() => item ().id}
  • ); }; const Tree = ({ state }: { state: TreeState }): JSX.Element => { return (
    state.root} />
    ); }; const App = ({ state }: { state: State }): JSX.Element => { return (
    state.location}> ); }; const Results = ({ results }: { results: Results }): JSX.Element => { const elapsed = Object.values ( results ).flat ().reduce ( ( acc, elapsed ) => acc + elapsed, 0 ); console.log ( elapsed ); return (
          {JSON.stringify ( results, undefined, 2 )}
        
    ); }; /* RENDER */ render ( , document.body ); /* UI BENCH */ const normalize = value => ({ // Removing major custom classes, which won't be reconciled properly location: value.location, anim: { items: value.anim.items }, table: { items: value.table.items }, tree: { root: value.tree.root } }); const onUpdate = stateNext => { store.reconcile ( state, normalize ( stateNext ) ); tick (); }; const onFinish = results => { render ( , document.body ); }; globalThis.uibench.init ( 'Voby', '*' ); globalThis.uibench.run ( onUpdate, onFinish );