/* IMPORT */ import {$, render} from 'voby'; import type {Observable} from 'voby'; /* HELPERS */ const EMOJIS = ['👌', '☝️', '✌️', '🤘', '🖖', '🖐️']; const PLUS = '➕'; const MINUS = '➖'; /* MAIN */ const Button = ({ onClick, children }: { onClick: () => void, children: JSX.Children }): JSX.Element => { return ( ); }; const Container = ({ children }: { children: JSX.Children }): JSX.Element => { return (
{children}
); }; const HStack = ({ children }: { children: JSX.Children }): JSX.Element => { return (
{children}
); }; const VStack = ({ children }: { children: JSX.Children }): JSX.Element => { return (
{children}
); }; const Emojis = ({ value }: { value: Observable }): JSX.Element => { const value2sign = ( value: number ) => Math.sign ( value ) < 0 ? MINUS : ''; const value2chunks = ( value: number ) => ( value <= 5 ) ? [value] : [...value2chunks ( value - 5), 5]; const chunk2emoji = ( chunk: number ) => EMOJIS[chunk]; const sign = () => value2sign ( value () ); const emojis = () => value2chunks ( Math.abs ( value () ) ).map ( chunk2emoji ).join ( '' ); return (
{sign}{emojis}
); }; const EmojiCounter = (): JSX.Element => { const value = $(2); const increment = () => value ( prev => prev + 1 ); const decrement = () => value ( prev => prev - 1 ); return ( ); }; /* RENDER */ render ( , document.getElementById ( 'app' ) );