import { CstNode } from 'chevrotain'; import { default as default_2 } from 'react'; import { ForwardRefExoticComponent } from 'react'; import { ILexingError } from 'chevrotain'; import { IRecognitionException } from 'chevrotain'; import { IToken } from 'chevrotain'; import { RefAttributes } from 'react'; import { z } from 'zod'; /** * AST Node Types * * These are the internal AST representation types used during parsing. */ export declare const AST_TYPES: { /** Regular text without special formatting */ readonly FREE_TEXT: "FreeText"; /** Explicit spacing element */ readonly SPACE: "Space"; /** Text with optional character-range highlighting */ readonly HIGHLIGHTED_TEXT: "HighlightedText"; /** Text with color and optional character-range coloring */ readonly COLOR_TEXT: "ColorText"; /** Bold text with optional character-range bolding */ readonly BOLD_TEXT: "BoldText"; /** Inline input widget (string or numeric) */ readonly INLINE_INPUT: "InlineInput"; /** Single inline draggable option (appears in-flow with text) */ readonly INLINE_DRAG_OPTION: "InlineDragOption"; /** Inline fraction widget (numerator/denominator with optional inputs) */ readonly FRACTION: "Fraction"; /** Inline image element */ readonly IMAGE: "Image"; /** Clock widget — analog/digital, display or interactive */ readonly CLOCK: "Clock"; /** Question/instruction text block */ readonly TEXT_BLOCK: "TextBlock"; /** Line containing inline elements */ readonly LINE_BLOCK: "LineBlock"; /** Table layout block */ readonly TABLE_BLOCK: "TableBlock"; /** Row within a table */ readonly TABLE_ROW: "TableRow"; /** Cell within a table row */ readonly TABLE_CELL: "TableCell"; /** Vertical operation (column arithmetic) block */ readonly VERTICAL_OPERATION_BLOCK: "VerticalOperationBlock"; /** Row within a vertical operation */ readonly VOP_ROW: "VopRow"; /** Cell within a vertical-operation row */ readonly VOP_CELL: "VopCell"; /** Separator line within a vertical operation */ readonly VOP_SEPARATOR: "VopSeparator"; /** Carry row within a vertical operation */ readonly VOP_CARRY_ROW: "VopCarryRow"; /** Number line layout block */ readonly NUMBER_LINE_BLOCK: "NumberLineBlock"; /** A position marker on the number line */ readonly NUMBER_LINE_POSITION: "NumberLinePosition"; /** A draggable cursor on the number line */ readonly NUMBER_LINE_CURSOR: "NumberLineCursor"; /** A dynamic subdivision counter embedded in a number line */ readonly NUMBER_LINE_COUNTER: "NumberLineCounter"; /** A highlighted range on the number line axis */ readonly NUMBER_LINE_HIGHLIGHT: "NumberLineHighlight"; /** An arrow annotation spanning a number line interval */ readonly NUMBER_LINE_ARROW: "NumberLineArrow"; /** Matcher layout block */ readonly MATCHER_BLOCK: "MatcherBlock"; /** Row within a matcher */ readonly MATCHER_ROW: "MatcherRow"; /** Item within a matcher row */ readonly MATCHER_ITEM: "MatcherItem"; /** Pair-matcher layout block (top-row ↔ bottom-row pairing) */ readonly PAIR_MATCHER_BLOCK: "PairMatcherBlock"; /** Visual fraction inline widget */ readonly VISUAL_FRACTION: "VisualFraction"; /** Drag-and-drop options tool */ readonly DRAG_OPTIONS: "DragOptions"; /** Radio button options tool */ readonly RADIO_OPTIONS: "RadioOptions"; /** Numeric keypad input tool */ readonly NUMERIC_KEYPAD: "NumericKeypad"; /** Geometry ruler tool */ readonly GEOMETRY_RULER: "GeometryRuler"; /** Geometry protractor tool */ readonly GEOMETRY_PROTRACTOR: "GeometryProtractor"; /** Geometry set square tool */ readonly GEOMETRY_SET_SQUARE: "GeometrySetSquare"; /** Simple answer matching validation */ readonly SIMPLE_VALIDATION: "SimpleValidation"; /** Expression-based validation */ readonly EXPRESSION_VALIDATION: "ExpressionValidation"; /** Mixed validation: per-widget simple answers + expression over free variables */ readonly MIXED_VALIDATION: "MixedValidation"; /** Root exercise document */ readonly EXERCISE_DOCUMENT: "ExerciseDocument"; }; /** * Type helper to get all AST type values as a union type */ export declare type ASTType = typeof AST_TYPES[keyof typeof AST_TYPES]; export declare type BoldText = z.infer; export declare type BoldTextInline = z.infer; /** * Bold text inline schema - text with optional range bolding * * highlight: [start, end] character positions for bold range * * @example * { * type: "BoldText", * value: "123456", * highlight: [0, 3] // Bolds "123" * } */ export declare const BoldTextInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>; export declare const BoldTextSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"bold-text">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "bold-text"; id: string; highlight?: [number, number] | undefined; }, { value: string; type: "bold-text"; id: string; highlight?: [number, number] | undefined; }>; export declare const CLOCK_FORMATS: readonly ["12h", "24h"]; export declare const CLOCK_MODES: readonly ["display", "interactive"]; export declare const CLOCK_TIME_REGEX: RegExp; export declare const CLOCK_TYPES: readonly ["analog", "digital"]; export declare type ClockFormat = typeof CLOCK_FORMATS[number]; export declare type ClockInline = z.infer; export declare const ClockInlineSchema: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>; export declare type ClockItem = z.infer; export declare const ClockItemSchema: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "clock"; mode: "display"; clockType: "analog" | "digital"; id: string; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "clock"; mode: "display"; clockType: "analog" | "digital"; id: string; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "clock"; name: string; mode: "interactive"; clockType: "analog"; id: string; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "clock"; name: string; mode: "interactive"; clockType: "analog"; id: string; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>; export declare type ClockMode = typeof CLOCK_MODES[number]; export declare type ClockType = typeof CLOCK_TYPES[number]; export declare type ColorText = z.infer; export declare type ColorTextInline = z.infer; /** * Color text inline schema - text with color and optional range coloring * * highlight: [start, end] character positions for colored range * color: CSS color value (e.g., "red", "#ff0000") * * @example * { * type: "ColorText", * value: "123456", * color: "red", * highlight: [0, 3] // Colors "123" in red * } */ export declare const ColorTextInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>; export declare const ColorTextSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"color-text">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "color-text"; color: string; id: string; highlight?: [number, number] | undefined; }, { value: string; type: "color-text"; color: string; id: string; highlight?: [number, number] | undefined; }>; /** * Compile DSL text directly to JSON (convenience function) * * This combines tokenize → parse → toAST → toJSON in one call. * * @param dsl - The DSL text to compile * @returns The exercise JSON * @throws LexerError if tokenization fails * @throws ParseError if parsing fails * * @example * ```typescript * const json = compile(` * QUESTION_TEXT["Solve"] * 25 + W_S_I[name="x", length=2, answer="5"] = 30 * WIDGET_ANSWER[type="simple"] * `); * ``` */ export declare function compile(dsl: string): ExerciseJSON; /** * Compile DSL and return both AST and JSON * * Useful when you need access to both representations. * * @param dsl - The DSL text to compile * @returns Object containing both ast and json */ export declare function compileWithAST(dsl: string): { ast: { type: "ExerciseDocument"; lines: ({ type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; } | { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; } | { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; } | { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "RadioOptions"; options: string[]; name: string; answer: string; } | { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; } | { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; })[]; question?: { value: string; type: "TextBlock"; } | undefined; validation?: { type: "SimpleValidation"; } | { expression: string; type: "ExpressionValidation"; } | { expression: string; type: "MixedValidation"; } | undefined; tools?: ({ type: "DragOptions"; options: string[]; } | { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "GeometryRuler"; size: number; } | { type: "GeometryProtractor"; size: number; } | { type: "GeometrySetSquare"; size: number; })[] | undefined; }; json: { version: "2.0"; layout: any[]; widgets: Record; validation?: { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; } | undefined; id?: string | undefined; meta?: { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; } | undefined; }; }; export declare type ContentBlock = z.infer; export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{ type: z.ZodLiteral<"LineBlock">; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>, z.ZodObject<{ type: z.ZodLiteral<"TableBlock">; cols: z.ZodNumber; rows: z.ZodArray; cells: z.ZodArray; colspan: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; }, { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; }>, z.ZodObject<{ type: z.ZodLiteral<"RadioOptions">; name: z.ZodString; options: z.ZodArray; answer: z.ZodString; }, "strip", z.ZodTypeAny, { type: "RadioOptions"; options: string[]; name: string; answer: string; }, { type: "RadioOptions"; options: string[]; name: string; answer: string; }>, z.ZodEffects; min: z.ZodNumber; max: z.ZodNumber; step: z.ZodDefault; minorTicks: z.ZodOptional; style: z.ZodOptional>; labelVisibility: z.ZodOptional>; counter: z.ZodOptional; min: z.ZodNumber; max: z.ZodNumber; default: z.ZodOptional; name: z.ZodOptional; answer: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>>; highlights: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional>; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, "many">>; cursors: z.ZodOptional; value: z.ZodDefault; answer: z.ZodNumber; color: z.ZodOptional; fillRange: z.ZodDefault; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }, { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }>, "many">>; arrows: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, "many">>; dragMode: z.ZodOptional>; positions: z.ZodArray; value: z.ZodNumber; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, z.ZodEffects; name: z.ZodString; colors: z.ZodOptional>; rows: z.ZodArray; items: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }>, "many">; answers: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }>, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }>, z.ZodEffects; name: z.ZodString; topItems: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; bottomItems: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; answers: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }>, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }>, z.ZodObject<{ type: z.ZodLiteral<"VerticalOperationBlock">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }>, z.ZodObject<{ type: z.ZodLiteral<"VopSeparator">; }, "strip", z.ZodTypeAny, { type: "VopSeparator"; }, { type: "VopSeparator"; }>]>, "many">; }, "strip", z.ZodTypeAny, { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }, { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }>]>; /** * Create a bold text inline element */ export declare function createBoldText(value: string, highlight?: [number, number]): BoldTextInline; /** * Create a color text inline element */ export declare function createColorText(value: string, color: string, highlight?: [number, number]): ColorTextInline; /** * Create a display-mode clock inline widget */ export declare function createDisplayClock(params: { clockType: ClockType; value: string; format?: ClockFormat; name?: string; }): ClockInline; /** * Create a drag options tool */ export declare function createDragOptions(options: string[]): DragOptionsTool; /** * Create an exercise document */ export declare function createExerciseDocument(question: z.infer | undefined, lines: ContentBlock[], validation?: z.infer, tools?: z.infer[]): ExerciseDocument; /** * Create an expression validation node */ export declare function createExpressionValidation(expression: string): ExpressionValidation; /** * Create a fraction inline widget */ export declare function createFraction(name: string, options?: { numerator?: number; denominator?: number; answer?: string; simplified?: boolean; placeholder?: string; }): FractionInline; /** * Create a free text inline element */ export declare function createFreeText(value: string): FreeTextInline; /** * Create a highlighted text inline element */ export declare function createHighlightedText(value: string, highlight?: [number, number]): HighlightedTextInline; /** * Create an image inline element */ export declare function createImage(name: string, src: string, alt: string, options?: { width?: number; height?: number; }): ImageInline; /** * Create a single inline draggable option */ export declare function createInlineDragOption(value: string): InlineDragOption; /** * Create an interactive-mode clock inline widget (analog only) */ export declare function createInteractiveClock(params: { name: string; value: string; answer: string; format?: ClockFormat; snap?: number; }): ClockInline; /** * Create a line block */ export declare function createLineBlock(inlines: InlineNode[]): LineBlock; export declare function createMatcherBlock(name: string, rows: MatcherRow[], answers: string[][], colors?: string[]): MatcherBlock; export declare function createMatcherItem(itemId: string, inlines: DisplayInlineNode[]): MatcherItem; export declare function createMatcherRow(items: MatcherItem[]): MatcherRow; /** * Create a mixed validation node */ export declare function createMixedValidation(expression: string): MixedValidation; /** * Create a numeric inline input widget (W_N_I) */ export declare function createNumericInput(name: string, digits: number, answer?: string | number, placeholder?: string): InlineInputWidget; /** * Create a numeric keypad tool */ export declare function createNumericKeypad(includeOperators?: boolean, includeDecimal?: boolean, style?: 'diamond' | 'classic'): NumericKeypadTool; export declare function createPairMatcherBlock(name: string, topItems: MatcherItem[], bottomItems: MatcherItem[], answers: [string, string][]): PairMatcherBlock; export declare function createProtractorTool(size?: number): ProtractorTool; export declare function createRulerTool(size?: number): RulerTool; export declare function createSetSquareTool(size?: number): SetSquareTool; /** * Create a simple validation node */ export declare function createSimpleValidation(): SimpleValidation; /** * Create a space inline element */ export declare function createSpace(): SpaceInline; /** * Create a string inline input widget (W_S_I) */ export declare function createStringInput(name: string, length: number, answer?: string | number, placeholder?: string): InlineInputWidget; /** * Create a text block (question) */ export declare function createTextBlock(value: string): TextBlock; export declare function createVerticalOperationBlock(op: VopOperator | undefined, items: VopBlockItem[]): VerticalOperationBlock; /** * Create a visual fraction inline widget */ export declare function createVisualFraction(name: string, divisions: number, options?: { shape?: VisualFractionShape; filled?: number[]; answer?: number[]; orientation?: 'horizontal' | 'vertical'; label?: string; /** Unified author size. */ size?: number; }): VisualFractionInline; export declare function createVopBoldCell(value: string): VopBoldCell; export declare function createVopCarryRow(cells: VopCell[]): VopCarryRow; export declare function createVopColorCell(value: string, color: string): VopColorCell; export declare function createVopDigitCell(value: string): VopDigitCell; export declare function createVopEmptyCell(): VopEmptyCell; export declare function createVopHighlightCell(value: string): VopHighlightCell; export declare function createVopInputCell(name: string, digits?: number, answer?: string | number): VopInputCell; export declare function createVopLabelCell(value: string): VopLabelCell; export declare function createVopRow(cells: VopCell[], op?: VopOperator): VopRow; export declare function createVopSeparator(): VopSeparator; export declare type DisplayInlineNode = z.infer; export declare const DisplayInlineNodeSchema: z.ZodUnion<[z.ZodObject<{ type: z.ZodLiteral<"FreeText">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>; export declare type DragOptionsJSON = z.infer; export declare const DragOptionsJSONSchema: z.ZodObject<{ type: z.ZodLiteral<"drag-options">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "drag-options"; options: string[]; }, { type: "drag-options"; options: string[]; }>; export declare type DragOptionsTool = z.infer; /** * Drag options tool schema - draggable buttons/options * * Common use cases: * - Comparison symbols: ["<", ">", "="] * - Yes/No: ["نعم", "لا"] * - Multiple choice: ["A", "B", "C", "D"] * * @example * { * type: "DragOptions", * options: ["<", ">", "="] * } */ export declare const DragOptionsToolSchema: z.ZodObject<{ type: z.ZodLiteral<"DragOptions">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "DragOptions"; options: string[]; }, { type: "DragOptions"; options: string[]; }>; /** * Base error class for all engine errors */ export declare class EngineError extends Error { constructor(message: string); } /** * Evaluate a mathematical expression with the given variable scope * * @param expression - The expression to evaluate (e.g., "(a * b) + (c * d) == 1200") * @param scope - Variable bindings (e.g., { a: 10, b: 5, c: 20, d: 30 }) * @returns The boolean result of the expression * @throws Error if evaluation fails */ export declare function evaluate(expression: string, scope: Record): boolean; export declare type ExerciseDocument = z.infer; /** * Exercise document schema - the complete exercise structure * * Structure: * 1. Question: What the student should do * 2. Lines: Visual rows with inline elements * 3. Tools: Standalone interactive elements (optional) * 4. Validation: How to check answers * * @example * { * type: "ExerciseDocument", * question: { * type: "TextBlock", * value: "أقارن كل عددين باستعمال الرمر المناسب" * }, * lines: [ * { * type: "LineBlock", * inlines: [ * { type: "HighlightedText", value: "151 000", highlight: [0, 3] }, * { type: "InlineInput", name: "x", length: 1 }, * { type: "HighlightedText", value: "54 000", highlight: [0, 3] } * ] * } * ], * tools: [ * { type: "DragOptions", options: ["<", ">", "="] } * ], * validation: { * type: "SimpleValidation" * } * } */ export declare const ExerciseDocumentSchema: z.ZodEffects; question: z.ZodOptional; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "TextBlock"; }, { value: string; type: "TextBlock"; }>>; lines: z.ZodArray; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>, z.ZodObject<{ type: z.ZodLiteral<"TableBlock">; cols: z.ZodNumber; rows: z.ZodArray; cells: z.ZodArray; colspan: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; }, { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; }>, z.ZodObject<{ type: z.ZodLiteral<"RadioOptions">; name: z.ZodString; options: z.ZodArray; answer: z.ZodString; }, "strip", z.ZodTypeAny, { type: "RadioOptions"; options: string[]; name: string; answer: string; }, { type: "RadioOptions"; options: string[]; name: string; answer: string; }>, z.ZodEffects; min: z.ZodNumber; max: z.ZodNumber; step: z.ZodDefault; minorTicks: z.ZodOptional; style: z.ZodOptional>; labelVisibility: z.ZodOptional>; counter: z.ZodOptional; min: z.ZodNumber; max: z.ZodNumber; default: z.ZodOptional; name: z.ZodOptional; answer: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>>; highlights: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional>; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, "many">>; cursors: z.ZodOptional; value: z.ZodDefault; answer: z.ZodNumber; color: z.ZodOptional; fillRange: z.ZodDefault; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }, { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }>, "many">>; arrows: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, "many">>; dragMode: z.ZodOptional>; positions: z.ZodArray; value: z.ZodNumber; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, z.ZodEffects; name: z.ZodString; colors: z.ZodOptional>; rows: z.ZodArray; items: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }>, "many">; answers: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }>, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }>, z.ZodEffects; name: z.ZodString; topItems: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; bottomItems: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; answers: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }>, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }>, z.ZodObject<{ type: z.ZodLiteral<"VerticalOperationBlock">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }>, z.ZodObject<{ type: z.ZodLiteral<"VopSeparator">; }, "strip", z.ZodTypeAny, { type: "VopSeparator"; }, { type: "VopSeparator"; }>]>, "many">; }, "strip", z.ZodTypeAny, { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }, { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }>]>, "many">; tools: z.ZodOptional; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "DragOptions"; options: string[]; }, { type: "DragOptions"; options: string[]; }>, z.ZodObject<{ type: z.ZodLiteral<"NumericKeypad">; includeOperators: z.ZodOptional; includeDecimal: z.ZodOptional; style: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }, { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"GeometryRuler">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometryRuler"; size: number; }, { type: "GeometryRuler"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"GeometryProtractor">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometryProtractor"; size: number; }, { type: "GeometryProtractor"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"GeometrySetSquare">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometrySetSquare"; size: number; }, { type: "GeometrySetSquare"; size?: number | undefined; }>]>, "many">>; validation: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "SimpleValidation"; }, { type: "SimpleValidation"; }>, z.ZodObject<{ type: z.ZodLiteral<"ExpressionValidation">; expression: z.ZodString; }, "strip", z.ZodTypeAny, { expression: string; type: "ExpressionValidation"; }, { expression: string; type: "ExpressionValidation"; }>, z.ZodObject<{ type: z.ZodLiteral<"MixedValidation">; expression: z.ZodString; }, "strip", z.ZodTypeAny, { expression: string; type: "MixedValidation"; }, { expression: string; type: "MixedValidation"; }>]>>; }, "strip", z.ZodTypeAny, { type: "ExerciseDocument"; lines: ({ type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; } | { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; } | { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; } | { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "RadioOptions"; options: string[]; name: string; answer: string; } | { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; } | { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; })[]; question?: { value: string; type: "TextBlock"; } | undefined; validation?: { type: "SimpleValidation"; } | { expression: string; type: "ExpressionValidation"; } | { expression: string; type: "MixedValidation"; } | undefined; tools?: ({ type: "DragOptions"; options: string[]; } | { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "GeometryRuler"; size: number; } | { type: "GeometryProtractor"; size: number; } | { type: "GeometrySetSquare"; size: number; })[] | undefined; }, { type: "ExerciseDocument"; lines: ({ type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; } | { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; } | { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; } | { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "RadioOptions"; options: string[]; name: string; answer: string; } | { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; } | { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; })[]; question?: { value: string; type: "TextBlock"; } | undefined; validation?: { type: "SimpleValidation"; } | { expression: string; type: "ExpressionValidation"; } | { expression: string; type: "MixedValidation"; } | undefined; tools?: ({ type: "DragOptions"; options: string[]; } | { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "GeometryRuler"; size?: number | undefined; } | { type: "GeometryProtractor"; size?: number | undefined; } | { type: "GeometrySetSquare"; size?: number | undefined; })[] | undefined; }>, { type: "ExerciseDocument"; lines: ({ type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; } | { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; } | { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; } | { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "RadioOptions"; options: string[]; name: string; answer: string; } | { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; } | { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; })[]; question?: { value: string; type: "TextBlock"; } | undefined; validation?: { type: "SimpleValidation"; } | { expression: string; type: "ExpressionValidation"; } | { expression: string; type: "MixedValidation"; } | undefined; tools?: ({ type: "DragOptions"; options: string[]; } | { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "GeometryRuler"; size: number; } | { type: "GeometryProtractor"; size: number; } | { type: "GeometrySetSquare"; size: number; })[] | undefined; }, { type: "ExerciseDocument"; lines: ({ type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; } | { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; } | { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; } | { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "RadioOptions"; options: string[]; name: string; answer: string; } | { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; } | { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; })[]; question?: { value: string; type: "TextBlock"; } | undefined; validation?: { type: "SimpleValidation"; } | { expression: string; type: "ExpressionValidation"; } | { expression: string; type: "MixedValidation"; } | undefined; tools?: ({ type: "DragOptions"; options: string[]; } | { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "GeometryRuler"; size?: number | undefined; } | { type: "GeometryProtractor"; size?: number | undefined; } | { type: "GeometrySetSquare"; size?: number | undefined; })[] | undefined; }>; export declare type ExerciseJSON = z.infer; export declare const ExerciseJSONSchema: z.ZodObject<{ version: z.ZodLiteral<"2.0">; id: z.ZodOptional; layout: z.ZodArray, "many">; widgets: z.ZodRecord; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; }, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"inline-input">; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; }, { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"drag-options">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "drag-options"; options: string[]; }, { type: "drag-options"; options: string[]; }>, z.ZodObject<{ type: z.ZodLiteral<"inline-drag-option">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "inline-drag-option"; }, { value: string; type: "inline-drag-option"; }>, z.ZodObject<{ type: z.ZodLiteral<"radio-options">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "radio-options"; options: string[]; }, { type: "radio-options"; options: string[]; }>, z.ZodObject<{ type: z.ZodLiteral<"numeric-keypad">; includeOperators: z.ZodOptional; includeDecimal: z.ZodOptional; style: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }, { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"fraction">; numerator: z.ZodNullable; denominator: z.ZodNullable; simplified: z.ZodBoolean; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; }, { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"matcher">; rows: z.ZodArray; items: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }>, "many">; /** Optional color palette for the renderer (one color per answer group) */ colors: z.ZodOptional>; /** Number of answer groups — equals answers.length, stored here to avoid prop-drilling. */ groupCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; }, { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"pair-matcher">; topItems: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; bottomItems: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; }, { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; }>, z.ZodEffects; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodArray; answer: z.ZodArray; orientation: z.ZodOptional>; /** Optional label text rendered near the shape — replaces the old showLabel boolean */ label: z.ZodOptional; /** Overall shape size in unified author units. * - bar / grid: overrides `--visual-fraction-part-size` CSS custom property (cell size in rem). * - circle / triangle: overrides `--visual-fraction-size` through the renderer scale factor. */ size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "visual-fraction"; shape: "bar" | "circle" | "triangle" | "grid"; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "visual-fraction"; answer: number[]; divisions: number; filled: number[]; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "visual-fraction"; shape: "bar" | "circle" | "triangle" | "grid"; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "visual-fraction"; answer: number[]; divisions: number; filled: number[]; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ruler">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "ruler"; size?: number | undefined; }, { type: "ruler"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"protractor">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "protractor"; size?: number | undefined; }, { type: "protractor"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"set-square">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "set-square"; size?: number | undefined; }, { type: "set-square"; size?: number | undefined; }>]>>; validation: z.ZodOptional; answers: z.ZodOptional, "many">, z.ZodArray]>>>; expression: z.ZodOptional; variables: z.ZodOptional>; }, "strip", z.ZodTypeAny, { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; }, { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; }>>; meta: z.ZodOptional; author: z.ZodOptional; tags: z.ZodOptional>; difficulty: z.ZodOptional; }, "strip", z.ZodTypeAny, { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; }, { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; }>>; }, "strip", z.ZodTypeAny, { version: "2.0"; layout: any[]; widgets: Record; validation?: { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; } | undefined; id?: string | undefined; meta?: { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; } | undefined; }, { version: "2.0"; layout: any[]; widgets: Record; validation?: { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; } | undefined; id?: string | undefined; meta?: { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; } | undefined; }>; export declare type ExerciseMeta = z.infer; export declare const ExerciseMetaSchema: z.ZodObject<{ createdAt: z.ZodOptional; author: z.ZodOptional; tags: z.ZodOptional>; difficulty: z.ZodOptional; }, "strip", z.ZodTypeAny, { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; }, { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; }>; /** * Main renderer component - the contract for rendering exercises. * * This component is DUMB - it only collects values and passes them up. * The parent decides correctness via validation. */ export declare const ExerciseRenderer: ForwardRefExoticComponent>; export declare interface ExerciseRendererProps { json: ExerciseJSON; onSubmit?: (values: Record) => void; onChange?: (values: Record) => void; showSubmitButton?: boolean; className?: string; /** Master on/off for interaction sounds (default true). */ soundEnabled?: boolean; /** Maps sound events → URL or callback. Omitted events stay silent. */ sounds?: SoundConfig; } export declare interface ExerciseRendererRef { submit: () => ValidationResult; getValues: () => Record; /** Fill status of the answerable inputs — caller decides when to block submit. */ getCompletion: () => InputCompletion; reset: () => void; focusFirstInput: () => void; } export declare type ExpressionValidation = z.infer; /** * Expression validation schema - validates using a boolean expression * * The expression can reference widget values by name. * Example: "a + b === 10" * * @example * { * type: "ExpressionValidation", * expression: "a + b === 10" * } */ export declare const ExpressionValidationSchema: z.ZodObject<{ type: z.ZodLiteral<"ExpressionValidation">; expression: z.ZodString; }, "strip", z.ZodTypeAny, { expression: string; type: "ExpressionValidation"; }, { expression: string; type: "ExpressionValidation"; }>; /** * Extract variable names from an expression * * @param expression - The expression to analyze * @param validVariables - Optional list of valid variable names to filter by (e.g., from exercise widgets) * @returns Array of variable names */ export declare function extractExpressionVariables(expression: string, validVariables?: string[]): string[]; /** * Check if any combination of values can satisfy the expression * (useful for debugging/testing exercises) * * @param expression - The expression to check * @param ranges - Value ranges for each variable * @returns First valid combination found, or null */ export declare function findValidCombination(expression: string, ranges: Record): Record | null; export declare type FractionInline = z.infer; /** * Fraction inline widget schema * * Modes determined by presence of numerator/denominator: * - both provided → readonly display * - only numerator → denominator input * - only denominator → numerator input * - neither → both are inputs * * @example Readonly: { type: "Fraction", name: "x", numerator: 5, denominator: 3 } * @example Denominator input: { type: "Fraction", name: "y", numerator: 5, answer: "5/3" } * @example Both inputs: { type: "Fraction", name: "z", answer: "5/3" } */ export declare const FractionInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>; export declare type FractionJSON = z.infer; export declare const FractionJSONSchema: z.ZodObject<{ type: z.ZodLiteral<"fraction">; numerator: z.ZodNullable; denominator: z.ZodNullable; simplified: z.ZodBoolean; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; }, { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; }>; /** * Centralized fraction compound key utilities. * * Fraction widgets use compound keys (e.g., "x__num", "x__den") in the * UI values map for sub-inputs. These keys are UI-only — they never appear * in the widgets map or validation answers. */ export declare type FractionPart = 'num' | 'den'; export declare type FreeTextInline = z.infer; /** * Free text inline schema - plain text/numbers WITHOUT special formatting * * Use this for normal text. Only use NUMBER_TEXT when you need highlighting! * * @example * { type: "FreeText", value: "25 + " } * { type: "FreeText", value: " = 30" } */ export declare const FreeTextInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"FreeText">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>; /** * List every widget the exercise expects an answer for (simple answers, * expression variables, or both in mixed mode). Empty when the exercise has * no validation (display-only / hint exercises). * * @param exercise - The exercise JSON * @returns Array of answerable widget IDs */ export declare function getAnswerableInputs(exercise: ExerciseJSON): string[]; export declare function getFractionKey(widgetId: string, part: FractionPart): string; /** * Check if all required inputs are provided * * @param exercise - The exercise JSON * @param userInputs - User's answers * @returns Array of missing widget IDs */ export declare function getMissingInputs(exercise: ExerciseJSON, userInputs: Record): string[]; export declare type GroupItem = z.infer; export declare const GroupItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"group">; items: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { items: any[]; type: "group"; id: string; }, { items: any[]; type: "group"; id: string; }>; /** * Validation Result Types * * These define the output of validation operations. */ /** * Validation result for a single matched group (works for any matcher-type widget: * Matcher groups of N items, PairMatcher pairs of 2 items, etc.) */ declare interface GroupValidation { /** The item IDs that form this group */ group: string[]; isCorrect: boolean; } export declare type HighlightedText = z.infer; export declare type HighlightedTextInline = z.infer; /** * Highlighted text inline schema - text with optional highlighting * * highlight: [start, end] character positions for visual emphasis * * @example * { * type: "HighlightedText", * value: "151 000", * highlight: [0, 3] // Highlights "151" * } */ export declare const HighlightedTextInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>; export declare const HighlightedTextSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"highlighted-text">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "highlighted-text"; id: string; highlight?: [number, number] | undefined; }, { value: string; type: "highlighted-text"; id: string; highlight?: [number, number] | undefined; }>; export declare type ImageInline = z.infer; export declare const ImageInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>; export declare type ImageItem = z.infer; export declare const ImageItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "image"; name: string; src: string; alt: string; id: string; width?: number | undefined; height?: number | undefined; }, { type: "image"; name: string; src: string; alt: string; id: string; width?: number | undefined; height?: number | undefined; }>; export declare type InlineDragOption = z.infer; /** * A single draggable option rendered inline within the text flow. * * Unlike DragOptionsTool (which groups all options in a fixed container), * this element is placed directly in the line alongside other text elements. * * @example * INLINE_DRAG_OPTION["94"] → { type: "InlineDragOption", value: "94" } */ export declare const InlineDragOptionSchema: z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>; export declare type InlineInputJSON = z.infer; export declare const InlineInputJSONSchema: z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"inline-input">; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; }, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"inline-input">; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; }, { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; }>]>; export declare type InlineInputWidget = z.infer; /** * Inline input widget schema - small input that appears within a line * * This is for SHORT inputs (1-5 characters) that flow with text * For longer inputs, consider a standalone tool * * @example String input (W_S_I): * { * type: "InlineInput", * name: "x", * inputType: "string", * length: 5, // Visual width in characters * answer: "hello" * } * * @example Numeric input (W_N_I): * { * type: "InlineInput", * name: "x", * inputType: "numeric", * digits: 2, // Maximum number of digits * answer: 42 * } */ export declare const InlineInputWidgetSchema: z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>; export declare type InlineNode = z.infer; /** * Union of all inline element types */ export declare const InlineNodeSchema: z.ZodUnion<[z.ZodObject<{ type: z.ZodLiteral<"FreeText">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; /** Unified author size. * - bar / grid: overrides `--visual-fraction-part-size` (cell size). * - circle / triangle: maps to `--visual-fraction-size` with the renderer scale factor. * Omit to use CSS defaults. */ size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>; /** Snapshot of how many answerable inputs are currently filled. */ export declare interface InputCompletion { /** Number of widgets the exercise expects an answer for (0 = display-only). */ total: number; /** How many of those currently have a usable value. */ filled: number; /** Widget IDs still empty. */ missing: string[]; /** Widget IDs that have a value. */ filledIds: string[]; /** true when there is at least one input AND none are missing. */ isComplete: boolean; /** true when at least one input has a value. */ isAnyFilled: boolean; } /** * Type guard for BoldText */ export declare function isBoldText(item: LayoutItem): item is Extract; export declare function isClock(value: unknown): value is ClockInline; /** * Type guard for ClockItem */ export declare function isClockItem(item: LayoutItem): item is Extract; /** * Type guard for ColorText */ export declare function isColorText(item: LayoutItem): item is Extract; export declare function isDragOptions(value: unknown): value is DragOptionsTool; /** * Type guard for DragOptionsJSON */ export declare function isDragOptionsJSON(widget: WidgetJSON): widget is Extract; export declare function isExerciseDocument(value: unknown): value is ExerciseDocument; export declare function isExpressionValidation(value: unknown): value is ExpressionValidation; export declare function isFraction(value: unknown): value is FractionInline; /** * Type guard for FractionJSON */ export declare function isFractionJSON(widget: WidgetJSON): widget is Extract; export declare function isFractionKey(key: string): boolean; export declare function isFreeText(value: unknown): value is FreeTextInline; /** * Type guard for GroupItem */ export declare function isGroupItem(item: LayoutItem): item is GroupItem; /** * Type guard for HighlightedText */ export declare function isHighlightedText(item: LayoutItem): item is Extract; export declare function isImage(value: unknown): value is ImageInline; /** * Type guard for ImageItem */ export declare function isImageItem(item: LayoutItem): item is Extract; export declare function isInlineDragOption(value: unknown): value is InlineDragOption; /** * Type guard for InlineDragOptionJSON */ export declare function isInlineDragOptionJSON(widget: WidgetJSON): widget is Extract; export declare function isInlineInput(value: unknown): value is InlineInputWidget; /** * Type guard for InlineInputJSON */ export declare function isInlineInputJSON(widget: WidgetJSON): widget is Extract; export declare function isInlineNode(value: unknown): value is InlineNode; export declare function isLineBlock(value: unknown): value is LineBlock; /** * Type guard for Linebreak */ export declare function isLinebreak(item: LayoutItem): item is Extract; export declare function isMatcherBlock(value: unknown): value is MatcherBlock; export declare function isMatcherItem(value: unknown): value is MatcherItem; export declare function isMatcherRow(value: unknown): value is MatcherRow; export declare function isMatcherWidget(widget: WidgetJSON): widget is MatcherWidgetJSON; export declare function isMixedValidation(value: unknown): value is MixedValidation; export declare function isNumericKeypad(value: unknown): value is NumericKeypadTool; /** * Type guard for NumericKeypadJSON */ export declare function isNumericKeypadJSON(widget: WidgetJSON): widget is Extract; /** * Type guard for OperatorItem */ export declare function isOperatorItem(item: LayoutItem): item is Extract; export declare function isPairMatcherBlock(value: unknown): value is PairMatcherBlock; export declare function isPairMatcherWidget(widget: WidgetJSON): widget is PairMatcherWidgetJSON; export declare function isProtractorTool(value: unknown): value is ProtractorTool; /** * Type guard for ProtractorWidgetJSON */ export declare function isProtractorWidget(widget: WidgetJSON): widget is Extract; /** * Type guard for QuestionText */ export declare function isQuestionText(item: LayoutItem): item is Extract; /** * Type guard for RadioOptionsJSON */ export declare function isRadioOptionsJSON(widget: WidgetJSON): widget is Extract; export declare function isRulerTool(value: unknown): value is RulerTool; /** * Type guard for RulerWidgetJSON */ export declare function isRulerWidget(widget: WidgetJSON): widget is Extract; export declare function isSetSquareTool(value: unknown): value is SetSquareTool; /** * Type guard for SetSquareWidgetJSON */ export declare function isSetSquareWidget(widget: WidgetJSON): widget is Extract; export declare function isSimpleValidation(value: unknown): value is SimpleValidation; export declare function isSpace(value: unknown): value is SpaceInline; /** * Type guard for SpaceItem */ export declare function isSpaceItem(item: LayoutItem): item is Extract; /** * Type guard for TableCellItem */ export declare function isTableCellItem(item: LayoutItem): item is Extract; /** * Type guard for TableItem */ export declare function isTableItem(item: LayoutItem): item is Extract; /** * Type guard for TableRowItem */ export declare function isTableRowItem(item: LayoutItem): item is Extract; export declare function isTextBlock(value: unknown): value is TextBlock; /** * Type guard for TextItem */ export declare function isTextItem(item: LayoutItem): item is Extract; export declare function isToolNode(value: unknown): value is ToolNode; export declare function isValidationNode(value: unknown): value is ValidationNode; /** * Check if an expression is syntactically valid * * @param expression - The expression to check * @returns true if valid, false otherwise */ export declare function isValidExpression(expression: string): boolean; export declare function isVerticalOperationBlock(value: unknown): value is VerticalOperationBlock; /** * Type guard for VerticalOperationItem */ export declare function isVerticalOperationItem(item: LayoutItem): item is Extract; export declare function isVisualFractionInline(value: unknown): value is VisualFractionInline; export declare function isVopCarryRow(value: unknown): value is VopCarryRow; export declare function isVopCell(value: unknown): value is VopCell; export declare function isVopRow(value: unknown): value is VopRow; export declare function isVopSeparator(value: unknown): value is VopSeparator; /** * Type guard for WidgetRef */ export declare function isWidgetRef(item: LayoutItem): item is Extract; /** * JSON Layout Item Types * * These are the types used in the JSON output format. */ export declare const JSON_TYPES: { /** Question/instruction text */ readonly QUESTION_TEXT: "question-text"; /** Regular text element */ readonly TEXT: "text"; /** Spacing element */ readonly SPACE: "space"; /** Text with optional highlighting */ readonly HIGHLIGHTED_TEXT: "highlighted-text"; /** Text with color styling */ readonly COLOR_TEXT: "color-text"; /** Bold text */ readonly BOLD_TEXT: "bold-text"; /** Inline image */ readonly IMAGE: "image"; /** Reference to a widget */ readonly WIDGET_REF: "widget-ref"; /** Clock widget (inline): analog or digital, display or interactive */ readonly CLOCK: "clock"; /** Line break element */ readonly LINEBREAK: "linebreak"; /** Grouped layout items */ readonly GROUP: "group"; /** Operator symbol */ readonly OPERATOR: "operator"; /** Table layout block */ readonly TABLE: "table"; /** Row within a table */ readonly TABLE_ROW: "table-row"; /** Cell within a table */ readonly TABLE_CELL: "table-cell"; /** Vertical operation (column arithmetic) block */ readonly VERTICAL_OPERATION: "vertical-operation"; /** Row within a vertical operation */ readonly VOP_ROW: "vop-row"; /** Cell within a vertical-operation row */ readonly VOP_CELL: "vop-cell"; /** Separator within a vertical operation */ readonly VOP_SEPARATOR: "vop-separator"; /** Carry row within a vertical operation */ readonly VOP_CARRY_ROW: "vop-carry-row"; /** Number line layout block */ readonly NUMBER_LINE: "number-line"; /** Position marker within a number line */ readonly NUMBER_LINE_POSITION: "number-line-position"; /** Dynamic subdivision counter embedded in a number line */ readonly NUMBER_LINE_COUNTER: "number-line-counter"; /** Highlighted range within a number line */ readonly NUMBER_LINE_HIGHLIGHT: "number-line-highlight"; /** Draggable cursor within a number line */ readonly NUMBER_LINE_CURSOR: "number-line-cursor"; /** Arrow annotation within a number line */ readonly NUMBER_LINE_ARROW: "number-line-arrow"; /** Matcher layout block */ readonly MATCHER: "matcher"; /** Row within a matcher */ readonly MATCHER_ROW: "matcher-row"; /** Item within a matcher row */ readonly MATCHER_ITEM: "matcher-item"; /** Pair-matcher widget (top-row ↔ bottom-row pairing) */ readonly PAIR_MATCHER: "pair-matcher"; /** Inline input widget (string or numeric) */ readonly INLINE_INPUT: "inline-input"; /** Drag-and-drop options widget */ readonly DRAG_OPTIONS: "drag-options"; /** Single inline draggable option (appears in-flow with text) */ readonly INLINE_DRAG_OPTION: "inline-drag-option"; /** Radio button options widget */ readonly RADIO_OPTIONS: "radio-options"; /** Numeric keypad widget */ readonly NUMERIC_KEYPAD: "numeric-keypad"; /** Inline fraction widget */ readonly FRACTION: "fraction"; /** Visual fraction widget */ readonly VISUAL_FRACTION: "visual-fraction"; /** Ruler geometry tool widget */ readonly RULER: "ruler"; /** Protractor geometry tool widget */ readonly PROTRACTOR: "protractor"; /** Set square geometry tool widget */ readonly SET_SQUARE: "set-square"; }; /** * Type helper to get all JSON type values as a union type */ export declare type JSONType = typeof JSON_TYPES[keyof typeof JSON_TYPES]; export declare type LayoutItem = z.infer; export declare const LayoutItemSchema: z.ZodType; /** * DUMB layout renderer - no opinions about spacing or layout. */ export declare const LayoutRenderer: default_2.FC; export declare interface LayoutRendererProps { item: LayoutItem; widgets: Record; values: Record; droppedInputs: Set; validationDetails?: Record | null; onChange: (widgetId: string, value: UserAnswerValue, fromDrop?: boolean, sourceOptionId?: string) => void; onInputFocus?: (widgetId: string) => void; /** Incremented on reset. Drives remount of stateful items: NumberLine and MatcherWidget. */ resetKey?: number; } /** * Error thrown when lexer fails to tokenize input */ export declare class LexerError extends EngineError { readonly lexerErrors: ILexingError[]; readonly positions: SourcePosition[]; constructor(errors: ILexingError[]); } export declare type LineBlock = z.infer; /** * Line block schema - represents a visual row of inline elements * * One line = one visual row in the UI * Contains an ordered sequence of inline elements * * @example * { * type: "LineBlock", * inlines: [ * { type: "HighlightedText", value: "151 000", highlight: [0, 3] }, * { type: "InlineInput", name: "x", length: 1 }, * { type: "HighlightedText", value: "54 000", highlight: [0, 3] } * ] * } */ export declare const LineBlockSchema: z.ZodObject<{ type: z.ZodLiteral<"LineBlock">; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { type: "LineBlock"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>; export declare type Linebreak = z.infer; export declare const LinebreakSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"linebreak">; }, "strip", z.ZodTypeAny, { type: "linebreak"; id: string; }, { type: "linebreak"; id: string; }>; export declare type MatcherBlock = z.infer; export declare const MatcherBlockSchema: z.ZodEffects; name: z.ZodString; /** Optional palette of colors for the renderer (one per answer group) */ colors: z.ZodOptional>; /** At least one row required */ rows: z.ZodArray; /** At least one item per row */ items: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }>, "many">; answers: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }>, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }, { type: "MatcherBlock"; name: string; rows: { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }[]; answers: string[][]; colors?: string[] | undefined; }>; export declare type MatcherItem = z.infer; export declare type MatcherItemContent = z.infer; declare const MatcherItemContentSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"matcher-item">; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>; export declare const MatcherItemSchema: z.ZodObject<{ type: z.ZodLiteral<"MatcherItem">; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>; export declare type MatcherRow = z.infer; export declare type MatcherRowItem = z.infer; declare const MatcherRowItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"matcher-row">; items: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }>; export declare const MatcherRowSchema: z.ZodObject<{ type: z.ZodLiteral<"MatcherRow">; /** At least one item per row */ items: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }, { items: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; type: "MatcherRow"; }>; export declare type MatcherWidgetJSON = z.infer; /** * Matcher widget — rows of items, keyed by name in the widgets record. * The name is the key in the widgets record (like radio-options). * Rows/items carry IDs for renderer React keys. */ export declare const MatcherWidgetJSONSchema: z.ZodObject<{ type: z.ZodLiteral<"matcher">; rows: z.ZodArray; items: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }>, "many">; /** Optional color palette for the renderer (one color per answer group) */ colors: z.ZodOptional>; /** Number of answer groups — equals answers.length, stored here to avoid prop-drilling. */ groupCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; }, { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; }>; export declare type MixedValidation = z.infer; /** * Mixed validation schema — combines simple per-widget answers with an expression. * * Semantics: * - Widgets that declare an `answer` are validated via simple equality. * - Widgets referenced in `expression` but without `answer` are free variables. * - The exercise is correct iff every simple-answer widget matches AND the * boolean expression evaluates true with user inputs in scope. * * @example * { * type: "MixedValidation", * expression: "x + y === a + b" * } */ export declare const MixedValidationSchema: z.ZodObject<{ type: z.ZodLiteral<"MixedValidation">; expression: z.ZodString; }, "strip", z.ZodTypeAny, { expression: string; type: "MixedValidation"; }, { expression: string; type: "MixedValidation"; }>; /** * Normalize operator shorthand. Accepts `x`/`*` → `×`, `/` → `÷`, passes through `+`/`-`. */ export declare function normalizeVopOperator(raw: string): VopOperator; export declare type NumberLineArrow = z.infer; export declare type NumberLineArrowItem = z.infer; export declare const NumberLineArrowItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"number-line-arrow">; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional; content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "number-line-arrow"; from: number; to: number; id: string; content: any[]; color?: string | undefined; }, { type: "number-line-arrow"; from: number; to: number; id: string; content: any[]; color?: string | undefined; }>; /** * A left-to-right arrow annotation above a number line interval. * * Optional content is inline so authors can write labels such as `+1`, `+ 10`, or richer * inline elements that already exist in the DSL. */ declare const NumberLineArrowSchema: z.ZodEffects; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>; export declare type NumberLineBlock = z.infer; /** * Number line block schema — the root node for a number line exercise element. * * @example * { * type: "NumberLineBlock", * min: 0, max: 100, step: 10, minorTicks: 0, style: "arrow-right", * positions: [ * { type: "NumberLinePosition", value: 20, inlines: [...] } * ] * } */ declare const NumberLineBlockSchema: z.ZodEffects; min: z.ZodNumber; max: z.ZodNumber; step: z.ZodDefault; minorTicks: z.ZodOptional; style: z.ZodOptional>; labelVisibility: z.ZodOptional>; counter: z.ZodOptional; min: z.ZodNumber; max: z.ZodNumber; default: z.ZodOptional; name: z.ZodOptional; answer: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>>; highlights: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional>; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, "many">>; cursors: z.ZodOptional; value: z.ZodDefault; answer: z.ZodNumber; color: z.ZodOptional; fillRange: z.ZodDefault; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }, { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }>, "many">>; arrows: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }, { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }>, "many">>; dragMode: z.ZodOptional>; positions: z.ZodArray; value: z.ZodNumber; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>, { type: "NumberLineBlock"; min: number; max: number; step: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "NumberLineBlock"; min: number; max: number; positions: { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }[]; counter?: { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; step?: number | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }[] | undefined; arrows?: { type: "NumberLineArrow"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; from: number; to: number; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>; export declare type NumberLineCounter = z.infer; export declare type NumberLineCounterItem = z.infer; export declare const NumberLineCounterItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"number-line-counter">; min: z.ZodNumber; max: z.ZodNumber; default: z.ZodOptional; name: z.ZodOptional; answer: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "number-line-counter"; min: number; max: number; id: string; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "number-line-counter"; min: number; max: number; id: string; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>; /** * Counter node — dynamic subdivision control embedded in a number line. * The number line step is recomputed as: (max - min) / counter_value. * * Invariant: min >= 1 (a subdivision of 0 is meaningless). * The `default` fallback lives only in createNumberLineCounter, not here, * to avoid Zod transform side-effects on the parsed shape. */ declare const NumberLineCounterSchema: z.ZodEffects; min: z.ZodNumber; max: z.ZodNumber; default: z.ZodOptional; name: z.ZodOptional; answer: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "NumberLineCounter"; min: number; max: number; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>; export declare type NumberLineCursor = z.infer; export declare type NumberLineCursorItem = z.infer; export declare const NumberLineCursorItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"number-line-cursor">; value: z.ZodNumber; answer: z.ZodNumber; color: z.ZodOptional; fillRange: z.ZodBoolean; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: number; type: "number-line-cursor"; answer: number; fillRange: boolean; id: string; color?: string | undefined; label?: string | undefined; }, { value: number; type: "number-line-cursor"; answer: number; fillRange: boolean; id: string; color?: string | undefined; label?: string | undefined; }>; declare const NumberLineCursorSchema: z.ZodObject<{ type: z.ZodLiteral<"NumberLineCursor">; value: z.ZodDefault; answer: z.ZodNumber; color: z.ZodOptional; fillRange: z.ZodDefault; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLineCursor"; answer: number; fillRange: boolean; color?: string | undefined; label?: string | undefined; }, { type: "NumberLineCursor"; answer: number; value?: number | undefined; color?: string | undefined; label?: string | undefined; fillRange?: boolean | undefined; }>; export declare type NumberLineHighlight = z.infer; export declare type NumberLineHighlightItem = z.infer; export declare const NumberLineHighlightItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"number-line-highlight">; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional>; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "number-line-highlight"; from: number; to: number; id: string; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "number-line-highlight"; from: number; to: number; id: string; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>; /** * A highlighted range on the number line axis. * * `color` is constrained to the semantic set in NUMBER_LINE_HIGHLIGHT_COLORS * so renderers can safely map values to design tokens. */ declare const NumberLineHighlightSchema: z.ZodEffects; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional>; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "NumberLineHighlight"; from: number; to: number; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>; export declare type NumberLineItem = z.infer; export declare const NumberLineItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"number-line">; min: z.ZodNumber; max: z.ZodNumber; step: z.ZodNumber; minorTicks: z.ZodOptional; style: z.ZodOptional>; labelVisibility: z.ZodOptional>; counter: z.ZodOptional; min: z.ZodNumber; max: z.ZodNumber; default: z.ZodOptional; name: z.ZodOptional; answer: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "number-line-counter"; min: number; max: number; id: string; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }, { type: "number-line-counter"; min: number; max: number; id: string; name?: string | undefined; answer?: number | undefined; default?: number | undefined; }>>; highlights: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional>; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "number-line-highlight"; from: number; to: number; id: string; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }, { type: "number-line-highlight"; from: number; to: number; id: string; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }>, "many">>; cursors: z.ZodOptional; value: z.ZodNumber; answer: z.ZodNumber; color: z.ZodOptional; fillRange: z.ZodBoolean; label: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: number; type: "number-line-cursor"; answer: number; fillRange: boolean; id: string; color?: string | undefined; label?: string | undefined; }, { value: number; type: "number-line-cursor"; answer: number; fillRange: boolean; id: string; color?: string | undefined; label?: string | undefined; }>, "many">>; arrows: z.ZodOptional; from: z.ZodNumber; to: z.ZodNumber; color: z.ZodOptional; content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "number-line-arrow"; from: number; to: number; id: string; content: any[]; color?: string | undefined; }, { type: "number-line-arrow"; from: number; to: number; id: string; content: any[]; color?: string | undefined; }>, "many">>; dragMode: z.ZodOptional>; positions: z.ZodArray; value: z.ZodNumber; content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { value: number; type: "number-line-position"; id: string; content: any[]; }, { value: number; type: "number-line-position"; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "number-line"; min: number; max: number; step: number; positions: { value: number; type: "number-line-position"; id: string; content: any[]; }[]; id: string; counter?: { type: "number-line-counter"; min: number; max: number; id: string; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "number-line-highlight"; from: number; to: number; id: string; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "number-line-cursor"; answer: number; fillRange: boolean; id: string; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "number-line-arrow"; from: number; to: number; id: string; content: any[]; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }, { type: "number-line"; min: number; max: number; step: number; positions: { value: number; type: "number-line-position"; id: string; content: any[]; }[]; id: string; counter?: { type: "number-line-counter"; min: number; max: number; id: string; name?: string | undefined; answer?: number | undefined; default?: number | undefined; } | undefined; minorTicks?: number | undefined; style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined; labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined; highlights?: { type: "number-line-highlight"; from: number; to: number; id: string; color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined; label?: string | undefined; }[] | undefined; cursors?: { value: number; type: "number-line-cursor"; answer: number; fillRange: boolean; id: string; color?: string | undefined; label?: string | undefined; }[] | undefined; arrows?: { type: "number-line-arrow"; from: number; to: number; id: string; content: any[]; color?: string | undefined; }[] | undefined; dragMode?: "axis" | "inputs" | undefined; }>; export declare type NumberLinePosition = z.infer; export declare type NumberLinePositionItem = z.infer; export declare const NumberLinePositionItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"number-line-position">; value: z.ZodNumber; content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { value: number; type: "number-line-position"; id: string; content: any[]; }, { value: number; type: "number-line-position"; id: string; content: any[]; }>; /** * A single position marker on the number line. * Contains at least one inline element (text, input, etc.). * * @example * { * type: "NumberLinePosition", * value: 20, * inlines: [{ type: "InlineInput", name: "a", digits: 3 }] * } */ declare const NumberLinePositionSchema: z.ZodObject<{ type: z.ZodLiteral<"NumberLinePosition">; value: z.ZodNumber; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }, { value: number; type: "NumberLinePosition"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; }>; export declare type NumericKeypadJSON = z.infer; export declare const NumericKeypadJSONSchema: z.ZodObject<{ type: z.ZodLiteral<"numeric-keypad">; includeOperators: z.ZodOptional; includeDecimal: z.ZodOptional; style: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }, { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }>; export declare type NumericKeypadTool = z.infer; /** * Numeric keypad tool schema - on-screen number pad * * Use cases: * - Touch-friendly number entry * - Restricting input to numbers only * - Consistent cross-device experience * * @example * { * type: "NumericKeypad", * includeOperators: true * } */ export declare const NumericKeypadToolSchema: z.ZodObject<{ type: z.ZodLiteral<"NumericKeypad">; includeOperators: z.ZodOptional; includeDecimal: z.ZodOptional; style: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }, { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }>; export declare type OperatorItem = z.infer; export declare const OperatorItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"operator">; operator: z.ZodEnum<["+", "-", "×", "÷", "=", "<", ">", "?"]>; }, "strip", z.ZodTypeAny, { operator: "+" | "-" | "×" | "÷" | "=" | "<" | ">" | "?"; type: "operator"; id: string; }, { operator: "+" | "-" | "×" | "÷" | "=" | "<" | ">" | "?"; type: "operator"; id: string; }>; export declare const OperatorSchema: z.ZodEnum<["+", "-", "×", "÷", "=", "<", ">", "?"]>; export declare type PairMatcherBlock = z.infer; export declare const PairMatcherBlockSchema: z.ZodEffects; name: z.ZodString; /** Items in the top row — at least one required */ topItems: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; /** Items in the bottom row — at least one required */ bottomItems: z.ZodArray; itemId: z.ZodString; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodEffects; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }, { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }>, "many">; /** * Each answer pair is [topId, bottomId]. * At least one pair is required. */ answers: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }>, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }, { type: "PairMatcherBlock"; name: string; answers: [string, string][]; topItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; bottomItems: { type: "MatcherItem"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; })[]; itemId: string; }[]; }>; export declare type PairMatcherWidgetJSON = z.infer; /** * Pair-Matcher widget — top row ↔ bottom row pairing. * topItems / bottomItems carry IDs for React keys. */ export declare const PairMatcherWidgetJSONSchema: z.ZodObject<{ type: z.ZodLiteral<"pair-matcher">; topItems: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; bottomItems: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; }, { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; }>; /** * Parse DSL tokens into CST */ export declare function parse(tokens: IToken[]): CstNode; /** * Error thrown when parser fails to parse tokens */ export declare class ParseError extends EngineError { readonly parseErrors: IRecognitionException[]; readonly positions: SourcePosition[]; constructor(errors: IRecognitionException[]); } export declare function parseFractionKey(key: string): { widgetId: string; part: FractionPart; } | null; /** * Parse DSL tokens into CST (safe version - returns errors instead of throwing) */ export declare function parseSafe(tokens: IToken[]): { success: true; cst: CstNode; error?: undefined; } | { success: false; error: unknown; cst?: undefined; }; export declare type ProtractorTool = z.infer; export declare const ProtractorToolSchema: z.ZodObject<{ type: z.ZodLiteral<"GeometryProtractor">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometryProtractor"; size: number; }, { type: "GeometryProtractor"; size?: number | undefined; }>; export declare type ProtractorWidgetJSON = z.infer; export declare const ProtractorWidgetSchema: z.ZodObject<{ type: z.ZodLiteral<"protractor">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "protractor"; size?: number | undefined; }, { type: "protractor"; size?: number | undefined; }>; export declare type QuestionText = z.infer; export declare const QuestionTextSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"question-text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "question-text"; id: string; }, { value: string; type: "question-text"; id: string; }>; export declare type RadioOptionsBlock = z.infer; /** * Radio options block schema - single-choice radio buttons * * @example * { * type: "RadioOptions", * name: "q1", * options: ["apple", "orange", "banana"], * answer: "apple" * } */ declare const RadioOptionsBlockSchema: z.ZodObject<{ type: z.ZodLiteral<"RadioOptions">; name: z.ZodString; options: z.ZodArray; answer: z.ZodString; }, "strip", z.ZodTypeAny, { type: "RadioOptions"; options: string[]; name: string; answer: string; }, { type: "RadioOptions"; options: string[]; name: string; answer: string; }>; export declare type RadioOptionsJSON = z.infer; export declare const RadioOptionsJSONSchema: z.ZodObject<{ type: z.ZodLiteral<"radio-options">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "radio-options"; options: string[]; }, { type: "radio-options"; options: string[]; }>; /** * DOM helper for quick usage / demos. * * This couples the engine to DOM + React root creation. * For production use, prefer directly in your React tree. * * @example * ```typescript * import { compile, renderExercise } from 'math-exercise-engine'; * * const json = compile(dsl); * const unmount = renderExercise({ * container: '#app', * json, * onSubmit: (values) => { * // Parent decides correctness * const result = validate(json, values); * console.log(result.isCorrect); * } * }); * * // Later: unmount() * ``` */ export declare function renderExercise(options: RenderOptions): () => void; export declare interface RenderOptions { container: HTMLElement | string; json: ExerciseJSON; onSubmit?: (values: Record) => void; onChange?: (values: Record) => void; showSubmitButton?: boolean; className?: string; } export declare type RulerTool = z.infer; export declare const RulerToolSchema: z.ZodObject<{ type: z.ZodLiteral<"GeometryRuler">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometryRuler"; size: number; }, { type: "GeometryRuler"; size?: number | undefined; }>; export declare type RulerWidgetJSON = z.infer; export declare const RulerWidgetSchema: z.ZodObject<{ type: z.ZodLiteral<"ruler">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "ruler"; size?: number | undefined; }, { type: "ruler"; size?: number | undefined; }>; export declare type SetSquareTool = z.infer; export declare const SetSquareToolSchema: z.ZodObject<{ type: z.ZodLiteral<"GeometrySetSquare">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometrySetSquare"; size: number; }, { type: "GeometrySetSquare"; size?: number | undefined; }>; export declare type SetSquareWidgetJSON = z.infer; export declare const SetSquareWidgetSchema: z.ZodObject<{ type: z.ZodLiteral<"set-square">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "set-square"; size?: number | undefined; }, { type: "set-square"; size?: number | undefined; }>; export declare type SimpleValidation = z.infer; /** * Simple validation schema - direct answer matching * * Each input has a predetermined correct answer. * No complex expressions or calculations. * * @example * { * type: "SimpleValidation" * } * * Note: Actual answer values are stored separately (in widget definitions) */ export declare const SimpleValidationSchema: z.ZodObject<{ type: z.ZodLiteral<"SimpleValidation">; }, "strip", z.ZodTypeAny, { type: "SimpleValidation"; }, { type: "SimpleValidation"; }>; /** * Maps a sound event to either: * - a `string` URL (renderer plays it via the native Audio API), or * - a `() => void` callback (consumer owns playback — preloading, mobile * unlock, volume, etc.). * Omitted events are silent. */ export declare type SoundConfig = Partial void)>>; /** All sound events the renderer can emit. */ export declare type SoundEvent = 'drag-start' | 'drag-drop' | 'drag-cancel' | 'radio-select' | 'pair-select' | 'pair-link' | 'pair-unlink' | 'keypad-press' | 'matcher-select' | 'fraction-shade' | 'clock-hour-tick' | 'clock-minute-tick' | 'counter-step' | 'cursor-step' | 'cursor-release' | 'input-select' | 'answer-correct' | 'answer-wrong'; export declare const SoundProvider: default_2.FC; export declare interface SoundProviderProps { children: default_2.ReactNode; /** Master on/off switch. When false, `play()` is a no-op. */ enabled?: boolean; /** * Per-event overrides (URL or callback), merged over the bundled defaults. * Omit to use the built-in sounds for every event. */ sounds?: SoundConfig; } /** * Source position information for error reporting */ export declare interface SourcePosition { startLine: number; startColumn: number; endLine: number; endColumn: number; } export declare type SpaceInline = z.infer; /** * Space inline schema - explicit spacing element * * Represents one or more consecutive spaces as a single space element. * This allows for deterministic and explicit control over spacing in the layout. * * @example * { type: "Space" } */ export declare const SpaceInlineSchema: z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>; export declare type SpaceItem = z.infer; export declare const SpaceItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"space">; }, "strip", z.ZodTypeAny, { type: "space"; id: string; }, { type: "space"; id: string; }>; export declare type TableBlock = z.infer; declare const TableBlockSchema: z.ZodObject<{ type: z.ZodLiteral<"TableBlock">; cols: z.ZodNumber; rows: z.ZodArray; cells: z.ZodArray; colspan: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; }, { type: "TableBlock"; cols: number; rows: { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }[]; }>; export declare type TableCell = z.infer; export declare type TableCellItem = z.infer; export declare const TableCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"table-cell">; colspan: z.ZodOptional; items: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }, { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }>; declare const TableCellSchema: z.ZodObject<{ type: z.ZodLiteral<"TableCell">; colspan: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }>; export declare type TableItem = z.infer; export declare const TableItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"table">; cols: z.ZodNumber; rows: z.ZodArray; cells: z.ZodArray; colspan: z.ZodOptional; items: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }, { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "table-row"; cells: { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }[]; id: string; }, { type: "table-row"; cells: { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }[]; id: string; }>, "many">; }, "strip", z.ZodTypeAny, { type: "table"; cols: number; rows: { type: "table-row"; cells: { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }[]; id: string; }[]; id: string; }, { type: "table"; cols: number; rows: { type: "table-row"; cells: { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }[]; id: string; }[]; id: string; }>; export declare type TableRow = z.infer; export declare type TableRowItem = z.infer; export declare const TableRowItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"table-row">; cells: z.ZodArray; colspan: z.ZodOptional; items: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }, { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "table-row"; cells: { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }[]; id: string; }, { type: "table-row"; cells: { items: any[]; type: "table-cell"; id: string; colspan?: number | undefined; }[]; id: string; }>; declare const TableRowSchema: z.ZodObject<{ type: z.ZodLiteral<"TableRow">; cells: z.ZodArray; colspan: z.ZodOptional; inlines: z.ZodArray; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "FreeText"; }, { value: string; type: "FreeText"; }>, z.ZodObject<{ type: z.ZodLiteral<"Space">; }, "strip", z.ZodTypeAny, { type: "Space"; }, { type: "Space"; }>, z.ZodObject<{ type: z.ZodLiteral<"HighlightedText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }, { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ColorText">; value: z.ZodString; color: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }, { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"BoldText">; value: z.ZodString; highlight: z.ZodOptional>; }, "strip", z.ZodTypeAny, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }, { value: string; type: "BoldText"; highlight?: [number, number] | undefined; }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }, { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineInput">; name: z.ZodString; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }, { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"Fraction">; name: z.ZodString; numerator: z.ZodOptional; denominator: z.ZodOptional; answer: z.ZodOptional; simplified: z.ZodDefault; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; }, { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Image">; name: z.ZodString; src: z.ZodEffects; alt: z.ZodString; width: z.ZodOptional; height: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }, { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }>, z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"InlineDragOption">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "InlineDragOption"; }, { value: string; type: "InlineDragOption"; }>, z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"display">; clockType: z.ZodEnum<["analog", "digital"]>; value: z.ZodString; format: z.ZodOptional>; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }, { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"Clock">; mode: z.ZodLiteral<"interactive">; clockType: z.ZodLiteral<"analog">; value: z.ZodString; answer: z.ZodString; format: z.ZodOptional>; snap: z.ZodOptional; name: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }, { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; }>]>]>, "many">; }, "strip", z.ZodTypeAny, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }, { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; simplified: boolean; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }, { type: "TableRow"; cells: { type: "TableCell"; inlines: ({ value: string; type: "FreeText"; } | { type: "Space"; } | { value: string; type: "HighlightedText"; highlight?: [number, number] | undefined; } | { value: string; type: "ColorText"; color: string; highlight?: [number, number] | undefined; } | { value: string; type: "BoldText"; highlight?: [number, number] | undefined; } | { length: number; type: "InlineInput"; inputType: "string"; name: string; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "InlineInput"; inputType: "numeric"; name: string; digits: number; placeholder?: string | undefined; answer?: string | number | undefined; } | { type: "Fraction"; name: string; placeholder?: string | undefined; answer?: string | undefined; numerator?: number | undefined; denominator?: number | undefined; simplified?: boolean | undefined; } | { type: "Image"; name: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; } | { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { value: string; type: "InlineDragOption"; } | { value: string; type: "Clock"; mode: "display"; clockType: "analog" | "digital"; name?: string | undefined; format?: "12h" | "24h" | undefined; } | { value: string; type: "Clock"; name: string; answer: string; mode: "interactive"; clockType: "analog"; format?: "12h" | "24h" | undefined; snap?: number | undefined; })[]; colspan?: number | undefined; }[]; }>; export declare type TextBlock = z.infer; /** * Text block schema - represents the question/instruction * * @example * { * type: "TextBlock", * value: "أقارن كل عددين باستعمال الرمر المناسب" * } */ export declare const TextBlockSchema: z.ZodObject<{ type: z.ZodLiteral<"TextBlock">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "TextBlock"; }, { value: string; type: "TextBlock"; }>; export declare type TextItem = z.infer; export declare const TextItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "text"; id: string; }, { value: string; type: "text"; id: string; }>; /** * Transform CST to AST */ export declare function toAST(cst: CstNode): ExerciseDocument; /** * Transform AST to JSON * * The JSON format is what gets consumed by renderers and validators */ export declare function toJSON(ast: ExerciseDocument): ExerciseJSON; /** * Tokenize a DSL input string * * Non-breaking spaces (U+00A0) copied from Slack/Teams are replaced with * regular spaces before tokenization to avoid silent parse failures. * * @param input - The DSL text to tokenize * @returns Array of tokens * @throws LexerError if tokenization fails */ export declare function tokenize(input: string): IToken[]; /** * Result of tokenization */ declare interface TokenizeResult { tokens: IToken[]; errors: ILexingError[]; } /** * Tokenize without throwing - returns both tokens and errors * Useful for error-tolerant parsing (e.g., in editors) * * Non-breaking spaces (U+00A0) are sanitized the same way as in tokenize(). */ export declare function tokenizeSafe(input: string): TokenizeResult; export declare type ToolNode = z.infer; /** * Union of all tool types */ export declare const ToolNodeSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"DragOptions">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "DragOptions"; options: string[]; }, { type: "DragOptions"; options: string[]; }>, z.ZodObject<{ type: z.ZodLiteral<"NumericKeypad">; includeOperators: z.ZodOptional; includeDecimal: z.ZodOptional; style: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }, { type: "NumericKeypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"GeometryRuler">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometryRuler"; size: number; }, { type: "GeometryRuler"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"GeometryProtractor">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometryProtractor"; size: number; }, { type: "GeometryProtractor"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"GeometrySetSquare">; size: z.ZodDefault>; }, "strip", z.ZodTypeAny, { type: "GeometrySetSquare"; size: number; }, { type: "GeometrySetSquare"; size?: number | undefined; }>]>; /** * Error thrown during AST transformation */ export declare class TransformError extends EngineError { readonly position?: SourcePosition; constructor(message: string, position?: SourcePosition); } /** * Shared value types for the renderer layer. * * `UserAnswerValue` is the runtime type of any answer collected by the renderer: * - `string` — all scalar widgets (inline-input, radio-options, drag-options, number-line inputs…) * - `string[][]` — matcher widget (groups of item IDs, no JSON serialisation needed) * - `number[]` — visual-fraction widget (counts per shaded group) * * This union matches the type accepted by `validate()` and avoids any * JSON.stringify / JSON.parse round-trips for structured widget values. */ declare type UserAnswerValue = string | string[][] | number[]; /** * Returns `play(event)`. Safe to call outside a SoundProvider — it returns a * stable no-op, so widgets never need to know whether sound is wired up. */ export declare function useSound(): (event: SoundEvent) => void; /** * Validate user inputs against an exercise * * This is the main entry point for validation. It automatically * dispatches to the correct validation mode based on the exercise. * * @param exercise - The exercise JSON * @param userInputs - User's answers keyed by widget ID * @returns Validation result * * @example * ```typescript * const result = validate(exercise, { a: 10, b: 20 }); * if (result.isCorrect) { * console.log('Correct!'); * } else { * console.log('Try again'); * } * ``` */ export declare function validate(exercise: ExerciseJSON, userInputs: Record): ValidationResult; /** * Validate that an expression will return a boolean * * @param expression - The expression to check * @returns Error message if invalid, null if valid */ export declare function validateBooleanExpression(expression: string): string | null; declare type ValidatedExerciseJSON = ExerciseJSON & { validation: ValidationJSON; }; /** * Validate an exercise JSON object at runtime * * @param data - The data to validate * @returns Parsed and validated exercise JSON * @throws ZodError if validation fails * * @example * ```typescript * try { * const validated = validateExerciseJSON(unknownData); * console.log('Valid exercise:', validated); * } catch (error) { * console.error('Validation failed:', error); * } * ``` */ export declare function validateExerciseJSON(data: unknown): { version: "2.0"; layout: any[]; widgets: Record; validation?: { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; } | undefined; id?: string | undefined; meta?: { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; } | undefined; }; /** * Safely validate an exercise JSON object at runtime * * @param data - The data to validate * @returns Success result with data or error result * * @example * ```typescript * const result = validateExerciseJSONSafe(unknownData); * if (result.success) { * console.log('Valid exercise:', result.data); * } else { * console.error('Validation errors:', result.error.errors); * } * ``` */ export declare function validateExerciseJSONSafe(data: unknown): z.SafeParseReturnType<{ version: "2.0"; layout: any[]; widgets: Record; validation?: { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; } | undefined; id?: string | undefined; meta?: { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; } | undefined; }, { version: "2.0"; layout: any[]; widgets: Record; validation?: { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; } | undefined; id?: string | undefined; meta?: { createdAt?: string | undefined; author?: string | undefined; tags?: string[] | undefined; difficulty?: number | undefined; } | undefined; }>; /** * Validate using expression mode * * @param exercise - The exercise JSON (with validation present) * @param userInputs - User's answers keyed by widget ID (variable names) * @returns Validation result */ export declare function validateExpression(exercise: ValidatedExerciseJSON, userInputs: Record): ValidationResult; /** * Check if user inputs are valid (proper format, etc.) * without checking correctness * * @param exercise - The exercise JSON * @param userInputs - User's answers * @returns Object with widgetId -> error message (empty if all valid) */ export declare function validateInputFormats(exercise: ExerciseJSON, userInputs: Record): Record; /** * Validate using mixed mode (simple answers + expression). * * @param exercise - The exercise JSON (with validation present) * @param userInputs - User's answers keyed by widget ID * @returns Validation result */ export declare function validateMixed(exercise: ValidatedExerciseJSON, userInputs: Record): ValidationResult; /** * Validate using simple mode (predetermined answers) * * @param exercise - The exercise JSON (with validation present) * @param userInputs - User's answers keyed by widget ID * @returns Validation result */ export declare function validateSimple(exercise: ValidatedExerciseJSON, userInputs: Record): ValidationResult; export declare function validateVisualFractionCapacity(data: { divisions: number; filled: number[]; answer: number[]; shape?: VisualFractionShape; }, ctx: z.RefinementCtx): void; /** * Validate a widget JSON object at runtime * * @param data - The data to validate * @returns Parsed and validated widget JSON * @throws ZodError if validation fails */ export declare function validateWidgetJSON(data: unknown): { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; } | { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; } | { type: "drag-options"; options: string[]; } | { value: string; type: "inline-drag-option"; } | { type: "radio-options"; options: string[]; } | { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; } | { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; } | { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; } | { type: "visual-fraction"; shape: "bar" | "circle" | "triangle" | "grid"; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { type: "ruler"; size?: number | undefined; } | { type: "protractor"; size?: number | undefined; } | { type: "set-square"; size?: number | undefined; }; /** * Safely validate a widget JSON object at runtime * * @param data - The data to validate * @returns Success result with data or error result */ export declare function validateWidgetJSONSafe(data: unknown): z.SafeParseReturnType<{ length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; } | { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; } | { type: "drag-options"; options: string[]; } | { value: string; type: "inline-drag-option"; } | { type: "radio-options"; options: string[]; } | { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; } | { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; } | { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; } | { type: "visual-fraction"; answer: number[]; divisions: number; filled: number[]; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { type: "ruler"; size?: number | undefined; } | { type: "protractor"; size?: number | undefined; } | { type: "set-square"; size?: number | undefined; }, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; } | { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; } | { type: "drag-options"; options: string[]; } | { value: string; type: "inline-drag-option"; } | { type: "radio-options"; options: string[]; } | { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; } | { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; } | { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; } | { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; } | { type: "visual-fraction"; shape: "bar" | "circle" | "triangle" | "grid"; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; } | { type: "ruler"; size?: number | undefined; } | { type: "protractor"; size?: number | undefined; } | { type: "set-square"; size?: number | undefined; }>; /** * Error thrown during validation */ export declare class ValidationError extends EngineError { readonly details: Record; constructor(message: string, details?: Record); } export declare type ValidationJSON = z.infer; export declare const ValidationJSONSchema: z.ZodObject<{ mode: z.ZodEnum<["simple", "expression", "mixed"]>; answers: z.ZodOptional, "many">, z.ZodArray]>>>; expression: z.ZodOptional; variables: z.ZodOptional>; }, "strip", z.ZodTypeAny, { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; }, { mode: "simple" | "expression" | "mixed"; expression?: string | undefined; answers?: Record | undefined; variables?: string[] | undefined; }>; export declare type ValidationNode = z.infer; /** * Union of all validation types */ export declare const ValidationNodeSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{ type: z.ZodLiteral<"SimpleValidation">; }, "strip", z.ZodTypeAny, { type: "SimpleValidation"; }, { type: "SimpleValidation"; }>, z.ZodObject<{ type: z.ZodLiteral<"ExpressionValidation">; expression: z.ZodString; }, "strip", z.ZodTypeAny, { expression: string; type: "ExpressionValidation"; }, { expression: string; type: "ExpressionValidation"; }>, z.ZodObject<{ type: z.ZodLiteral<"MixedValidation">; expression: z.ZodString; }, "strip", z.ZodTypeAny, { expression: string; type: "MixedValidation"; }, { expression: string; type: "MixedValidation"; }>]>; /** * Complete validation result */ export declare interface ValidationResult { /** Whether all inputs are correct */ isCorrect: boolean; /** Per-widget validation details */ details: Record; /** Numeric score (0-1) for partial grading */ score?: number; /** The expression that was evaluated (expression mode only) */ expression?: string; /** The scope used for evaluation (expression mode only, debugging) */ scope?: Record; /** Error message if validation failed */ error?: string; } declare type ValidationStatus = 'correct' | 'incorrect' | null; export declare type VerticalOperationBlock = z.infer; export declare const VerticalOperationBlockSchema: z.ZodObject<{ type: z.ZodLiteral<"VerticalOperationBlock">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }>, z.ZodObject<{ type: z.ZodLiteral<"VopSeparator">; }, "strip", z.ZodTypeAny, { type: "VopSeparator"; }, { type: "VopSeparator"; }>]>, "many">; }, "strip", z.ZodTypeAny, { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }, { items: ({ type: "VopRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; } | { type: "VopSeparator"; })[]; type: "VerticalOperationBlock"; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }>; export declare type VerticalOperationItem = z.infer; export declare const VerticalOperationItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vertical-operation">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "digit"; id: string; }, { value: string; type: "vop-cell"; kind: "digit"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "label"; id: string; }, { value: string; type: "vop-cell"; kind: "label"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "bold"; id: string; }, { value: string; type: "vop-cell"; kind: "bold"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"input">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "empty"; id: string; }, { type: "vop-cell"; kind: "empty"; id: string; }>]>, "many">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "digit"; id: string; }, { value: string; type: "vop-cell"; kind: "digit"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "label"; id: string; }, { value: string; type: "vop-cell"; kind: "label"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "bold"; id: string; }, { value: string; type: "vop-cell"; kind: "bold"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"input">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "empty"; id: string; }, { type: "vop-cell"; kind: "empty"; id: string; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "vop-carry-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; }, { type: "vop-carry-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-separator">; }, "strip", z.ZodTypeAny, { type: "vop-separator"; id: string; }, { type: "vop-separator"; id: string; }>]>, "many">; }, "strip", z.ZodTypeAny, { items: ({ type: "vop-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "vop-carry-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; } | { type: "vop-separator"; id: string; })[]; type: "vertical-operation"; cols: number; id: string; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }, { items: ({ type: "vop-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; op?: "+" | "-" | "×" | "÷" | "=" | undefined; } | { type: "vop-carry-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; } | { type: "vop-separator"; id: string; })[]; type: "vertical-operation"; cols: number; id: string; op?: "+" | "-" | "×" | "÷" | "=" | undefined; }>; /** Default shape size in rem — used as SVG viewport for circle/triangle, and as part-cell size for bar/grid. */ export declare const VISUAL_FRACTION_DEFAULT_SIZE = 1.35; /** * Maximum number of divisions allowed for any VisualFraction shape. * Enforced by both the AST schema (DSL parse) and the JSON schema (external data). * Edit this single value to raise or lower the limit across the entire pipeline. */ export declare const VISUAL_FRACTION_MAX_DIVISIONS = 100; /** Named enum for visual fraction shapes — use instead of raw string literals. */ export declare const VISUAL_FRACTION_SHAPE: { readonly BAR: "bar"; readonly CIRCLE: "circle"; readonly TRIANGLE: "triangle"; readonly GRID: "grid"; }; export declare const VISUAL_FRACTION_SHAPES: readonly ["bar", "circle", "triangle", "grid"]; export declare type VisualFractionInline = z.infer; /** * Visual Fraction inline widget schema. * * @example * VISUAL_FRACTION[name="vf1", shape="bar", divisions=8, filled=[3], answer=[2], label="3/8"] */ export declare const VisualFractionInlineSchema: z.ZodEffects; name: z.ZodString; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodDefault>; answer: z.ZodDefault>; orientation: z.ZodOptional>; label: z.ZodOptional; /** Unified author size. * - bar / grid: overrides `--visual-fraction-part-size` (cell size). * - circle / triangle: maps to `--visual-fraction-size` with the renderer scale factor. * Omit to use CSS defaults. */ size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "VisualFraction"; shape: "bar" | "circle" | "triangle" | "grid"; name: string; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "VisualFraction"; name: string; divisions: number; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; answer?: number[] | undefined; filled?: number[] | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>; export declare type VisualFractionShape = (typeof VISUAL_FRACTION_SHAPES)[number]; export declare const VOP_OPERATORS: readonly ["+", "-", "×", "÷", "="]; export declare type VopBlockItem = z.infer; declare const VopBlockItemSchema: z.ZodUnion<[z.ZodObject<{ type: z.ZodLiteral<"VopRow">; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }>, z.ZodObject<{ type: z.ZodLiteral<"VopSeparator">; }, "strip", z.ZodTypeAny, { type: "VopSeparator"; }, { type: "VopSeparator"; }>]>; export declare type VopBoldCell = z.infer; export declare type VopBoldCellItem = z.infer; export declare const VopBoldCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "bold"; id: string; }, { value: string; type: "vop-cell"; kind: "bold"; id: string; }>; export declare const VopBoldCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>; export declare type VopCarryRow = z.infer; export declare type VopCarryRowItem = z.infer; export declare const VopCarryRowItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-carry-row">; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "digit"; id: string; }, { value: string; type: "vop-cell"; kind: "digit"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "label"; id: string; }, { value: string; type: "vop-cell"; kind: "label"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "bold"; id: string; }, { value: string; type: "vop-cell"; kind: "bold"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"input">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "empty"; id: string; }, { type: "vop-cell"; kind: "empty"; id: string; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "vop-carry-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; }, { type: "vop-carry-row"; cells: ({ value: string; type: "vop-cell"; kind: "digit"; id: string; } | { value: string; type: "vop-cell"; kind: "label"; id: string; } | { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; } | { value: string; type: "vop-cell"; kind: "bold"; id: string; } | { value: string; type: "vop-cell"; kind: "highlight"; id: string; } | { type: "vop-cell"; kind: "input"; id: string; widgetId: string; } | { type: "vop-cell"; kind: "empty"; id: string; })[]; id: string; }>; export declare const VopCarryRowSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCarryRow">; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; }, "strip", z.ZodTypeAny, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }, { type: "VopCarryRow"; cells: ({ value: string; type: "VopCell"; kind: "digit"; } | { value: string; type: "VopCell"; kind: "label"; } | { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; } | { type: "VopCell"; kind: "empty"; } | { value: string; type: "VopCell"; color: string; kind: "color"; } | { value: string; type: "VopCell"; kind: "bold"; } | { value: string; type: "VopCell"; kind: "highlight"; })[]; }>; export declare type VopCell = z.infer; export declare type VopCellItem = z.infer; export declare const VopCellItemSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "digit"; id: string; }, { value: string; type: "vop-cell"; kind: "digit"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "label"; id: string; }, { value: string; type: "vop-cell"; kind: "label"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "bold"; id: string; }, { value: string; type: "vop-cell"; kind: "bold"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"input">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "empty"; id: string; }, { type: "vop-cell"; kind: "empty"; id: string; }>]>; export declare const VopCellSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>; export declare type VopColorCell = z.infer; export declare type VopColorCellItem = z.infer; export declare const VopColorCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }>; export declare const VopColorCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>; export declare type VopDigitCell = z.infer; export declare type VopDigitCellItem = z.infer; declare const VopDigitCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "digit"; id: string; }, { value: string; type: "vop-cell"; kind: "digit"; id: string; }>; export declare const VopDigitCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>; export declare type VopEmptyCell = z.infer; export declare type VopEmptyCellItem = z.infer; declare const VopEmptyCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "empty"; id: string; }, { type: "vop-cell"; kind: "empty"; id: string; }>; export declare const VopEmptyCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>; export declare type VopHighlightCell = z.infer; export declare type VopHighlightCellItem = z.infer; export declare const VopHighlightCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }>; export declare const VopHighlightCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>; export declare type VopInputCell = z.infer; export declare type VopInputCellItem = z.infer; declare const VopInputCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"input">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }>; export declare const VopInputCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>; export declare type VopLabelCell = z.infer; export declare type VopLabelCellItem = z.infer; declare const VopLabelCellItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "label"; id: string; }, { value: string; type: "vop-cell"; kind: "label"; id: string; }>; export declare const VopLabelCellSchema: z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>; export declare type VopOperator = (typeof VOP_OPERATORS)[number]; export declare type VopRow = z.infer; export declare type VopRowItem = z.infer; export declare const VopRowItemSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-row">; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "digit"; id: string; }, { value: string; type: "vop-cell"; kind: "digit"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "label"; id: string; }, { value: string; type: "vop-cell"; kind: "label"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }, { value: string; type: "vop-cell"; color: string; kind: "color"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "bold"; id: string; }, { value: string; type: "vop-cell"; kind: "bold"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }, { value: string; type: "vop-cell"; kind: "highlight"; id: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"input">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }, { type: "vop-cell"; kind: "input"; id: string; widgetId: string; }>, z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"vop-cell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "vop-cell"; kind: "empty"; id: string; }, { type: "vop-cell"; kind: "empty"; id: string; }>]>, "many">; op: z.ZodOptional; cells: z.ZodArray; kind: z.ZodLiteral<"digit">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "digit"; }, { value: string; type: "VopCell"; kind: "digit"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"label">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "label"; }, { value: string; type: "VopCell"; kind: "label"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"color">; value: z.ZodString; color: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; color: string; kind: "color"; }, { value: string; type: "VopCell"; color: string; kind: "color"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"bold">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "bold"; }, { value: string; type: "VopCell"; kind: "bold"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"highlight">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "VopCell"; kind: "highlight"; }, { value: string; type: "VopCell"; kind: "highlight"; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"input">; name: z.ZodString; digits: z.ZodDefault; answer: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "VopCell"; name: string; digits: number; kind: "input"; answer?: string | number | undefined; }, { type: "VopCell"; name: string; kind: "input"; answer?: string | number | undefined; digits?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"VopCell">; kind: z.ZodLiteral<"empty">; }, "strip", z.ZodTypeAny, { type: "VopCell"; kind: "empty"; }, { type: "VopCell"; kind: "empty"; }>]>, "many">; op: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "vop-separator"; id: string; }, { type: "vop-separator"; id: string; }>; export declare const VopSeparatorSchema: z.ZodObject<{ type: z.ZodLiteral<"VopSeparator">; }, "strip", z.ZodTypeAny, { type: "VopSeparator"; }, { type: "VopSeparator"; }>; export declare type WidgetJSON = z.infer; export declare const WidgetJSONSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{ type: z.ZodLiteral<"inline-input">; inputType: z.ZodLiteral<"string">; length: z.ZodNumber; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; }, { length: number; type: "inline-input"; inputType: "string"; placeholder?: string | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"inline-input">; inputType: z.ZodLiteral<"numeric">; digits: z.ZodNumber; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; }, { type: "inline-input"; inputType: "numeric"; digits: number; placeholder?: string | undefined; }>]>, z.ZodObject<{ type: z.ZodLiteral<"drag-options">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "drag-options"; options: string[]; }, { type: "drag-options"; options: string[]; }>, z.ZodObject<{ type: z.ZodLiteral<"inline-drag-option">; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; type: "inline-drag-option"; }, { value: string; type: "inline-drag-option"; }>, z.ZodObject<{ type: z.ZodLiteral<"radio-options">; options: z.ZodArray; }, "strip", z.ZodTypeAny, { type: "radio-options"; options: string[]; }, { type: "radio-options"; options: string[]; }>, z.ZodObject<{ type: z.ZodLiteral<"numeric-keypad">; includeOperators: z.ZodOptional; includeDecimal: z.ZodOptional; style: z.ZodOptional>; }, "strip", z.ZodTypeAny, { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }, { type: "numeric-keypad"; style?: "diamond" | "classic" | undefined; includeOperators?: boolean | undefined; includeDecimal?: boolean | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"fraction">; numerator: z.ZodNullable; denominator: z.ZodNullable; simplified: z.ZodBoolean; placeholder: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; }, { type: "fraction"; numerator: number | null; denominator: number | null; simplified: boolean; placeholder?: string | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"matcher">; rows: z.ZodArray; items: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }, { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }>, "many">; /** Optional color palette for the renderer (one color per answer group) */ colors: z.ZodOptional>; /** Number of answer groups — equals answers.length, stored here to avoid prop-drilling. */ groupCount: z.ZodNumber; }, "strip", z.ZodTypeAny, { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; }, { type: "matcher"; rows: { items: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; type: "matcher-row"; id: string; }[]; groupCount: number; colors?: string[] | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"pair-matcher">; topItems: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; bottomItems: z.ZodArray; /** Item identifier (no pipe allowed) */ itemId: z.ZodString; /** Display-only inline content */ content: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { type: "matcher-item"; itemId: string; id: string; content: any[]; }, { type: "matcher-item"; itemId: string; id: string; content: any[]; }>, "many">; }, "strip", z.ZodTypeAny, { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; }, { type: "pair-matcher"; topItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; bottomItems: { type: "matcher-item"; itemId: string; id: string; content: any[]; }[]; }>, z.ZodEffects; shape: z.ZodDefault>; divisions: z.ZodNumber; filled: z.ZodArray; answer: z.ZodArray; orientation: z.ZodOptional>; /** Optional label text rendered near the shape — replaces the old showLabel boolean */ label: z.ZodOptional; /** Overall shape size in unified author units. * - bar / grid: overrides `--visual-fraction-part-size` CSS custom property (cell size in rem). * - circle / triangle: overrides `--visual-fraction-size` through the renderer scale factor. */ size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "visual-fraction"; shape: "bar" | "circle" | "triangle" | "grid"; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "visual-fraction"; answer: number[]; divisions: number; filled: number[]; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, { type: "visual-fraction"; shape: "bar" | "circle" | "triangle" | "grid"; answer: number[]; divisions: number; filled: number[]; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }, { type: "visual-fraction"; answer: number[]; divisions: number; filled: number[]; shape?: "bar" | "circle" | "triangle" | "grid" | undefined; orientation?: "horizontal" | "vertical" | undefined; label?: string | undefined; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"ruler">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "ruler"; size?: number | undefined; }, { type: "ruler"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"protractor">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "protractor"; size?: number | undefined; }, { type: "protractor"; size?: number | undefined; }>, z.ZodObject<{ type: z.ZodLiteral<"set-square">; size: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "set-square"; size?: number | undefined; }, { type: "set-square"; size?: number | undefined; }>]>; export declare type WidgetRef = z.infer; export declare const WidgetRefSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodLiteral<"widget-ref">; widgetId: z.ZodString; }, "strip", z.ZodTypeAny, { type: "widget-ref"; id: string; widgetId: string; }, { type: "widget-ref"; id: string; widgetId: string; }>; /** * WidgetRenderer - Router component that delegates to specific widget components * This is a thin layer that just switches between different widget types * Each widget handles its own behavior (DnD, buttons, input, etc.) */ export declare const WidgetRenderer: default_2.FC; export declare interface WidgetRendererProps { widget: WidgetJSON; widgetId: string; value: UserAnswerValue | undefined; values?: Record; isDropped?: boolean; validationStatus?: ValidationStatus; numValidationStatus?: ValidationStatus; denValidationStatus?: ValidationStatus; validationDetail?: WidgetValidation; droppedInputs?: Set; /** All widgets in the exercise — needed so MatcherWidget can resolve refs in its items. */ widgets?: Record; onChange: (widgetId: string, value: UserAnswerValue, fromDrop?: boolean, sourceOptionId?: string) => void; onInputFocus?: (widgetId: string) => void; onKeypadChange?: (value: string) => void; } /** * Result of validating a single widget */ export declare interface WidgetValidation { /** The widget ID */ widgetId: string; /** The user's input value */ userValue: string | number | string[][] | number[] | undefined; /** Whether the input is correct (aggregate verdict; for mixed mode this is simple AND expression) */ isCorrect: boolean; /** * Per-group validation results for matcher-type widgets (Matcher, PairMatcher). * Each entry represents one group the user formed, with isCorrect indicating * whether it matches an expected group. */ groupResults?: GroupValidation[]; /** * Mixed mode: simple-equality verdict for this widget (set only when widget has an `answer`). * Renderers can use this to mark per-widget correctness independently of the global expression verdict. */ simpleCorrect?: boolean; /** * Mixed mode: expression verdict (set only when this widget is referenced by the expression). * Equal to the overall expression boolean; the per-widget granularity comes from `simpleCorrect`. */ expressionCorrect?: boolean; /** Optional error message (for debugging) */ error?: string; } export { }