/// import { Cell, Default, handler, recipe, str } from "commontools"; interface RichLabelArgs { value: Default; prefix: Default; step: Default; unit: Default; } const adjustWithStep = handler( ( event: { amount?: number } | undefined, context: { value: Cell; step: Cell }, ) => { const step = context.step.get() ?? 1; const amount = typeof event?.amount === "number" ? event.amount : step; const next = (context.value.get() ?? 0) + amount; context.value.set(next); }, ); export const counterWithRichLabel = recipe( "Counter With Rich Label", ({ value, prefix, step, unit }) => { const detail = str`step ${step} ${unit}`; const label = str`${prefix}: ${value} (${detail})`; return { value, prefix, settings: { step, unit }, settingsView: { step, unit }, current: value, heading: prefix, detail, label, increment: adjustWithStep({ value, step }), }; }, );