import * as __ctHelpers from "commontools"; import { pattern, 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 pattern((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, { anyOf: [{ type: "undefined" }, { 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, { anyOf: [{ type: "undefined" }, { 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, { anyOf: [{ type: "undefined" }, { 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")}