///
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 }),
};
},
);