/// import { Cell, Default, handler, lift, recipe, str } from "commontools"; interface DoubleCounterArgs { left: Default; right: Default; } const incrementBoth = handler( ( event: { amount?: number } | undefined, context: { left: Cell; right: Cell }, ) => { const amount = typeof event?.amount === "number" ? event.amount : 1; const nextLeft = (context.left.get() ?? 0) + amount; const nextRight = (context.right.get() ?? 0) + amount; context.left.set(nextLeft); context.right.set(nextRight); }, ); export const doubleCounterWithSharedIncrement = recipe( "Double Counter With Shared Increment", ({ left, right }) => { const status = str`left ${left} • right ${right}`; const total = lift((values: { left: number; right: number }) => values.left + values.right )({ left, right }); return { left, right, status, total, controls: { increment: incrementBoth({ left, right }), }, }; }, );