///
import { derive, handler, NAME, recipe, schema, str, UI } from "commontools";
// Different way to define the same schema, using 'schema' helper function,
// let's as leave off `as const satisfies JSONSchema`.
const model = schema({
type: "object",
properties: {
value: { type: "number", default: 0, asCell: true },
},
default: { value: 0 },
});
const increment = handler({}, model, (_, state) => {
state.value.set(state.value.get() + 1);
});
const decrement = handler({}, model, (_, state) => {
state.value.set(state.value.get() - 1);
});
export default recipe(model, model, (cell) => {
return {
[NAME]: str`Simple counter: ${derive(cell.value, String)}`,
[UI]: (
{/* use html fragment to test that it works */}
<>
{cell.value}
>
),
value: cell.value,
};
});