import * as __ctHelpers from "commontools"; import { recipe, UI } from "commontools"; interface User { name: string; age: number; active: boolean; profile: { bio: string; location: string; settings: { theme: string; notifications: boolean; }; }; } interface Config { theme: { primaryColor: string; secondaryColor: string; fontSize: number; }; features: { darkMode: boolean; beta: boolean; }; } interface State { user: User; config: Config; items: string[]; index: number; numbers: number[]; } export default recipe({ type: "object", properties: { user: { $ref: "#/$defs/User" }, config: { $ref: "#/$defs/Config" }, items: { type: "array", items: { type: "string" } }, index: { type: "number" }, numbers: { type: "array", items: { type: "number" } } }, required: ["user", "config", "items", "index", "numbers"], $defs: { Config: { type: "object", properties: { theme: { type: "object", properties: { primaryColor: { type: "string" }, secondaryColor: { type: "string" }, fontSize: { type: "number" } }, required: ["primaryColor", "secondaryColor", "fontSize"] }, features: { type: "object", properties: { darkMode: { type: "boolean" }, beta: { type: "boolean" } }, required: ["darkMode", "beta"] } }, required: ["theme", "features"] }, User: { type: "object", properties: { name: { type: "string" }, age: { type: "number" }, active: { type: "boolean" }, profile: { type: "object", properties: { bio: { type: "string" }, location: { type: "string" }, settings: { type: "object", properties: { theme: { type: "string" }, notifications: { type: "boolean" } }, required: ["theme", "notifications"] } }, required: ["bio", "location", "settings"] } }, required: ["name", "age", "active", "profile"] } } } as const satisfies __ctHelpers.JSONSchema, { type: "object", properties: { $UI: { $ref: "#/$defs/Element" } }, required: ["$UI"], $defs: { Element: { type: "object", properties: { type: { type: "string", "enum": ["vnode"] }, name: { type: "string" }, props: { $ref: "#/$defs/Props" }, children: { $ref: "#/$defs/RenderNode" }, $UI: { $ref: "#/$defs/VNode" } }, required: ["type", "name", "props"] }, VNode: { type: "object", properties: { type: { type: "string", "enum": ["vnode"] }, name: { type: "string" }, props: { $ref: "#/$defs/Props" }, children: { $ref: "#/$defs/RenderNode" }, $UI: { $ref: "#/$defs/VNode" } }, required: ["type", "name", "props"] }, RenderNode: { anyOf: [{ type: "string" }, { type: "number" }, { type: "boolean", "enum": [false] }, { type: "boolean", "enum": [true] }, { $ref: "#/$defs/VNode" }, { type: "object", properties: {} }, { type: "array", items: { $ref: "#/$defs/RenderNode" } }] }, Props: { type: "object", properties: {}, additionalProperties: { anyOf: [{ type: "string" }, { type: "number" }, { type: "boolean", "enum": [false] }, { type: "boolean", "enum": [true] }, { type: "object", additionalProperties: true }, { type: "array", items: true }, { asCell: true }, { asStream: true }, { type: "null" }] } } } } as const satisfies __ctHelpers.JSONSchema, (state) => { return { [UI]: (
Age: {state.user.age}
Active: {__ctHelpers.ifElse({ type: "boolean", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { "enum": ["Yes", "No"] } as const satisfies __ctHelpers.JSONSchema, state.user.active, "Yes", "No")}
Bio: {state.user.profile.bio}
Location: {state.user.profile.location}
Theme: {state.user.profile.settings.theme}
Notifications:{" "} {__ctHelpers.ifElse({ type: "boolean", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { "enum": ["On", "Off"] } as const satisfies __ctHelpers.JSONSchema, state.user.profile.settings.notifications, "On", "Off")}
Age + 1: {__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { user: { type: "object", properties: { age: { type: "number", asOpaque: true } }, required: ["age"] } }, required: ["user"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "number" } as const satisfies __ctHelpers.JSONSchema, { state: { user: { age: state.user.age } } }, ({ state }) => state.user.age + 1)}
Name length: {state.user.name.length}
Uppercase name: {__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { user: { type: "object", properties: { name: { type: "string", asOpaque: true } }, required: ["name"] } }, required: ["user"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { state: { user: { name: state.user.name } } }, ({ state }) => state.user.name.toUpperCase())}
Location includes city:{" "} {__ctHelpers.ifElse({ type: "boolean" } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { "enum": ["Yes", "No"] } as const satisfies __ctHelpers.JSONSchema, __ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { user: { type: "object", properties: { profile: { type: "object", properties: { location: { type: "string", asOpaque: true } }, required: ["location"] } }, required: ["profile"] } }, required: ["user"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "boolean" } as const satisfies __ctHelpers.JSONSchema, { state: { user: { profile: { location: state.user.profile.location } } } }, ({ state }) => state.user.profile.location.includes("City")), "Yes", "No")}
Item at index: {__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { items: { type: "array", items: { type: "string" }, asOpaque: true }, index: { type: "number", asOpaque: true } }, required: ["items", "index"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "string", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { state: { items: state.items, index: state.index } }, ({ state }) => state.items[state.index])}
First item: {state.items[0]}
Last item: {__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { items: { type: "array", items: { type: "string" }, asOpaque: true } }, required: ["items"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "string", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { state: { items: state.items } }, ({ state }) => state.items[state.items.length - 1])}
Number at index: {__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { numbers: { type: "array", items: { type: "number" }, asOpaque: true }, index: { type: "number", asOpaque: true } }, required: ["numbers", "index"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "number", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { state: { numbers: state.numbers, index: state.index } }, ({ state }) => state.numbers[state.index])}
state.config.theme.fontSize + "px"), }}> Styled text
{__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { user: { type: "object", properties: { name: { type: "string", asOpaque: true }, profile: { type: "object", properties: { location: { type: "string", asOpaque: true } }, required: ["location"] } }, required: ["name", "profile"] } }, required: ["user"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { state: { user: { name: state.user.name, profile: { location: state.user.profile.location } } } }, ({ state }) => state.user.name + " from " + state.user.profile.location)}
Font size + 2: {__ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { config: { type: "object", properties: { theme: { type: "object", properties: { fontSize: { type: "number", asOpaque: true } }, required: ["fontSize"] } }, required: ["theme"] } }, required: ["config"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "number" } as const satisfies __ctHelpers.JSONSchema, { state: { config: { theme: { fontSize: state.config.theme.fontSize } } } }, ({ state }) => state.config.theme.fontSize + 2)}px
Has beta and dark mode:{" "} {__ctHelpers.ifElse({ type: "boolean", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { type: "string" } as const satisfies __ctHelpers.JSONSchema, { "enum": ["Yes", "No"] } as const satisfies __ctHelpers.JSONSchema, __ctHelpers.derive({ type: "object", properties: { state: { type: "object", properties: { config: { type: "object", properties: { features: { type: "object", properties: { beta: { type: "boolean", asOpaque: true }, darkMode: { type: "boolean", asOpaque: true } }, required: ["beta", "darkMode"] } }, required: ["features"] } }, required: ["config"] } }, required: ["state"] } as const satisfies __ctHelpers.JSONSchema, { type: "boolean", asOpaque: true } as const satisfies __ctHelpers.JSONSchema, { state: { config: { features: { beta: state.config.features.beta, darkMode: state.config.features.darkMode } } } }, ({ state }) => state.config.features.beta && state.config.features.darkMode), "Yes", "No")}