@mathscan/math-exercise-engine 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -25,6 +25,8 @@ export declare const AST_TYPES: {
25
25
  readonly BOLD_TEXT: "BoldText";
26
26
  /** Inline input widget (string or numeric) */
27
27
  readonly INLINE_INPUT: "InlineInput";
28
+ /** Inline fraction widget (numerator/denominator with optional inputs) */
29
+ readonly FRACTION: "Fraction";
28
30
  /** Question/instruction text block */
29
31
  readonly TEXT_BLOCK: "TextBlock";
30
32
  /** Line containing inline elements */
@@ -39,6 +41,10 @@ export declare const AST_TYPES: {
39
41
  readonly NUMBER_LINE_BLOCK: "NumberLineBlock";
40
42
  /** A position marker on the number line */
41
43
  readonly NUMBER_LINE_POSITION: "NumberLinePosition";
44
+ /** A dynamic subdivision counter embedded in a number line */
45
+ readonly NUMBER_LINE_COUNTER: "NumberLineCounter";
46
+ /** A highlighted range on the number line axis */
47
+ readonly NUMBER_LINE_HIGHLIGHT: "NumberLineHighlight";
42
48
  /** Drag-and-drop options tool */
43
49
  readonly DRAG_OPTIONS: "DragOptions";
44
50
  /** Radio button options tool */
@@ -224,6 +230,13 @@ export declare function compileWithAST(dsl: string): {
224
230
  name: string;
225
231
  digits: number;
226
232
  answer?: string | number | undefined;
233
+ } | {
234
+ type: "Fraction";
235
+ name: string;
236
+ simplified: boolean;
237
+ answer?: string | undefined;
238
+ numerator?: number | undefined;
239
+ denominator?: number | undefined;
227
240
  })[];
228
241
  } | {
229
242
  type: "NumberLineBlock";
@@ -263,10 +276,32 @@ export declare function compileWithAST(dsl: string): {
263
276
  name: string;
264
277
  digits: number;
265
278
  answer?: string | number | undefined;
279
+ } | {
280
+ type: "Fraction";
281
+ name: string;
282
+ simplified: boolean;
283
+ answer?: string | undefined;
284
+ numerator?: number | undefined;
285
+ denominator?: number | undefined;
266
286
  })[];
267
287
  }[];
288
+ counter?: {
289
+ type: "NumberLineCounter";
290
+ min: number;
291
+ max: number;
292
+ name?: string | undefined;
293
+ default?: number | undefined;
294
+ } | undefined;
268
295
  minorTicks?: number | undefined;
269
296
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
297
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
298
+ highlights?: {
299
+ type: "NumberLineHighlight";
300
+ from: number;
301
+ to: number;
302
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
303
+ label?: string | undefined;
304
+ }[] | undefined;
270
305
  } | {
271
306
  type: "TableBlock";
272
307
  cols: number;
@@ -304,6 +339,13 @@ export declare function compileWithAST(dsl: string): {
304
339
  name: string;
305
340
  digits: number;
306
341
  answer?: string | number | undefined;
342
+ } | {
343
+ type: "Fraction";
344
+ name: string;
345
+ simplified: boolean;
346
+ answer?: string | undefined;
347
+ numerator?: number | undefined;
348
+ denominator?: number | undefined;
307
349
  })[];
308
350
  colspan?: number | undefined;
309
351
  }[];
@@ -354,6 +396,11 @@ export declare function compileWithAST(dsl: string): {
354
396
  type: "numeric-keypad";
355
397
  includeOperators?: boolean | undefined;
356
398
  includeDecimal?: boolean | undefined;
399
+ } | {
400
+ type: "fraction";
401
+ numerator: number | null;
402
+ denominator: number | null;
403
+ simplified: boolean;
357
404
  }>;
358
405
  validation?: {
359
406
  mode: "simple" | "expression";
@@ -465,7 +512,28 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
465
512
  name: string;
466
513
  digits: number;
467
514
  answer?: string | number | undefined;
468
- }>]>]>, "many">;
515
+ }>]>, z.ZodObject<{
516
+ type: z.ZodLiteral<"Fraction">;
517
+ name: z.ZodString;
518
+ numerator: z.ZodOptional<z.ZodNumber>;
519
+ denominator: z.ZodOptional<z.ZodNumber>;
520
+ answer: z.ZodOptional<z.ZodString>;
521
+ simplified: z.ZodDefault<z.ZodBoolean>;
522
+ }, "strip", z.ZodTypeAny, {
523
+ type: "Fraction";
524
+ name: string;
525
+ simplified: boolean;
526
+ answer?: string | undefined;
527
+ numerator?: number | undefined;
528
+ denominator?: number | undefined;
529
+ }, {
530
+ type: "Fraction";
531
+ name: string;
532
+ answer?: string | undefined;
533
+ numerator?: number | undefined;
534
+ denominator?: number | undefined;
535
+ simplified?: boolean | undefined;
536
+ }>]>, "many">;
469
537
  }, "strip", z.ZodTypeAny, {
470
538
  type: "LineBlock";
471
539
  inlines: ({
@@ -498,6 +566,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
498
566
  name: string;
499
567
  digits: number;
500
568
  answer?: string | number | undefined;
569
+ } | {
570
+ type: "Fraction";
571
+ name: string;
572
+ simplified: boolean;
573
+ answer?: string | undefined;
574
+ numerator?: number | undefined;
575
+ denominator?: number | undefined;
501
576
  })[];
502
577
  }, {
503
578
  type: "LineBlock";
@@ -531,6 +606,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
531
606
  name: string;
532
607
  digits: number;
533
608
  answer?: string | number | undefined;
609
+ } | {
610
+ type: "Fraction";
611
+ name: string;
612
+ answer?: string | undefined;
613
+ numerator?: number | undefined;
614
+ denominator?: number | undefined;
615
+ simplified?: boolean | undefined;
534
616
  })[];
535
617
  }>, z.ZodObject<{
536
618
  type: z.ZodLiteral<"TableBlock">;
@@ -630,7 +712,28 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
630
712
  name: string;
631
713
  digits: number;
632
714
  answer?: string | number | undefined;
633
- }>]>]>, "many">;
715
+ }>]>, z.ZodObject<{
716
+ type: z.ZodLiteral<"Fraction">;
717
+ name: z.ZodString;
718
+ numerator: z.ZodOptional<z.ZodNumber>;
719
+ denominator: z.ZodOptional<z.ZodNumber>;
720
+ answer: z.ZodOptional<z.ZodString>;
721
+ simplified: z.ZodDefault<z.ZodBoolean>;
722
+ }, "strip", z.ZodTypeAny, {
723
+ type: "Fraction";
724
+ name: string;
725
+ simplified: boolean;
726
+ answer?: string | undefined;
727
+ numerator?: number | undefined;
728
+ denominator?: number | undefined;
729
+ }, {
730
+ type: "Fraction";
731
+ name: string;
732
+ answer?: string | undefined;
733
+ numerator?: number | undefined;
734
+ denominator?: number | undefined;
735
+ simplified?: boolean | undefined;
736
+ }>]>, "many">;
634
737
  }, "strip", z.ZodTypeAny, {
635
738
  type: "TableCell";
636
739
  inlines: ({
@@ -663,6 +766,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
663
766
  name: string;
664
767
  digits: number;
665
768
  answer?: string | number | undefined;
769
+ } | {
770
+ type: "Fraction";
771
+ name: string;
772
+ simplified: boolean;
773
+ answer?: string | undefined;
774
+ numerator?: number | undefined;
775
+ denominator?: number | undefined;
666
776
  })[];
667
777
  colspan?: number | undefined;
668
778
  }, {
@@ -697,6 +807,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
697
807
  name: string;
698
808
  digits: number;
699
809
  answer?: string | number | undefined;
810
+ } | {
811
+ type: "Fraction";
812
+ name: string;
813
+ answer?: string | undefined;
814
+ numerator?: number | undefined;
815
+ denominator?: number | undefined;
816
+ simplified?: boolean | undefined;
700
817
  })[];
701
818
  colspan?: number | undefined;
702
819
  }>, "many">;
@@ -734,6 +851,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
734
851
  name: string;
735
852
  digits: number;
736
853
  answer?: string | number | undefined;
854
+ } | {
855
+ type: "Fraction";
856
+ name: string;
857
+ simplified: boolean;
858
+ answer?: string | undefined;
859
+ numerator?: number | undefined;
860
+ denominator?: number | undefined;
737
861
  })[];
738
862
  colspan?: number | undefined;
739
863
  }[];
@@ -771,6 +895,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
771
895
  name: string;
772
896
  digits: number;
773
897
  answer?: string | number | undefined;
898
+ } | {
899
+ type: "Fraction";
900
+ name: string;
901
+ answer?: string | undefined;
902
+ numerator?: number | undefined;
903
+ denominator?: number | undefined;
904
+ simplified?: boolean | undefined;
774
905
  })[];
775
906
  colspan?: number | undefined;
776
907
  }[];
@@ -812,6 +943,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
812
943
  name: string;
813
944
  digits: number;
814
945
  answer?: string | number | undefined;
946
+ } | {
947
+ type: "Fraction";
948
+ name: string;
949
+ simplified: boolean;
950
+ answer?: string | undefined;
951
+ numerator?: number | undefined;
952
+ denominator?: number | undefined;
815
953
  })[];
816
954
  colspan?: number | undefined;
817
955
  }[];
@@ -853,6 +991,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
853
991
  name: string;
854
992
  digits: number;
855
993
  answer?: string | number | undefined;
994
+ } | {
995
+ type: "Fraction";
996
+ name: string;
997
+ answer?: string | undefined;
998
+ numerator?: number | undefined;
999
+ denominator?: number | undefined;
1000
+ simplified?: boolean | undefined;
856
1001
  })[];
857
1002
  colspan?: number | undefined;
858
1003
  }[];
@@ -879,6 +1024,69 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
879
1024
  step: z.ZodDefault<z.ZodNumber>;
880
1025
  minorTicks: z.ZodOptional<z.ZodNumber>;
881
1026
  style: z.ZodOptional<z.ZodEnum<["arrow-right", "arrow-left", "arrow-both", "line"]>>;
1027
+ labelVisibility: z.ZodOptional<z.ZodEnum<["all", "extremes", "min-only", "max-only", "none"]>>;
1028
+ counter: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1029
+ type: z.ZodLiteral<"NumberLineCounter">;
1030
+ min: z.ZodNumber;
1031
+ max: z.ZodNumber;
1032
+ default: z.ZodOptional<z.ZodNumber>;
1033
+ name: z.ZodOptional<z.ZodString>;
1034
+ }, "strip", z.ZodTypeAny, {
1035
+ type: "NumberLineCounter";
1036
+ min: number;
1037
+ max: number;
1038
+ name?: string | undefined;
1039
+ default?: number | undefined;
1040
+ }, {
1041
+ type: "NumberLineCounter";
1042
+ min: number;
1043
+ max: number;
1044
+ name?: string | undefined;
1045
+ default?: number | undefined;
1046
+ }>, {
1047
+ type: "NumberLineCounter";
1048
+ min: number;
1049
+ max: number;
1050
+ name?: string | undefined;
1051
+ default?: number | undefined;
1052
+ }, {
1053
+ type: "NumberLineCounter";
1054
+ min: number;
1055
+ max: number;
1056
+ name?: string | undefined;
1057
+ default?: number | undefined;
1058
+ }>>;
1059
+ highlights: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodObject<{
1060
+ type: z.ZodLiteral<"NumberLineHighlight">;
1061
+ from: z.ZodNumber;
1062
+ to: z.ZodNumber;
1063
+ color: z.ZodOptional<z.ZodEnum<["blue", "red", "green", "orange", "purple", "yellow"]>>;
1064
+ label: z.ZodOptional<z.ZodString>;
1065
+ }, "strip", z.ZodTypeAny, {
1066
+ type: "NumberLineHighlight";
1067
+ from: number;
1068
+ to: number;
1069
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1070
+ label?: string | undefined;
1071
+ }, {
1072
+ type: "NumberLineHighlight";
1073
+ from: number;
1074
+ to: number;
1075
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1076
+ label?: string | undefined;
1077
+ }>, {
1078
+ type: "NumberLineHighlight";
1079
+ from: number;
1080
+ to: number;
1081
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1082
+ label?: string | undefined;
1083
+ }, {
1084
+ type: "NumberLineHighlight";
1085
+ from: number;
1086
+ to: number;
1087
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1088
+ label?: string | undefined;
1089
+ }>, "many">>;
882
1090
  positions: z.ZodArray<z.ZodObject<{
883
1091
  type: z.ZodLiteral<"NumberLinePosition">;
884
1092
  value: z.ZodNumber;
@@ -972,7 +1180,28 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
972
1180
  name: string;
973
1181
  digits: number;
974
1182
  answer?: string | number | undefined;
975
- }>]>]>, "many">;
1183
+ }>]>, z.ZodObject<{
1184
+ type: z.ZodLiteral<"Fraction">;
1185
+ name: z.ZodString;
1186
+ numerator: z.ZodOptional<z.ZodNumber>;
1187
+ denominator: z.ZodOptional<z.ZodNumber>;
1188
+ answer: z.ZodOptional<z.ZodString>;
1189
+ simplified: z.ZodDefault<z.ZodBoolean>;
1190
+ }, "strip", z.ZodTypeAny, {
1191
+ type: "Fraction";
1192
+ name: string;
1193
+ simplified: boolean;
1194
+ answer?: string | undefined;
1195
+ numerator?: number | undefined;
1196
+ denominator?: number | undefined;
1197
+ }, {
1198
+ type: "Fraction";
1199
+ name: string;
1200
+ answer?: string | undefined;
1201
+ numerator?: number | undefined;
1202
+ denominator?: number | undefined;
1203
+ simplified?: boolean | undefined;
1204
+ }>]>, "many">;
976
1205
  }, "strip", z.ZodTypeAny, {
977
1206
  value: number;
978
1207
  type: "NumberLinePosition";
@@ -1006,6 +1235,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1006
1235
  name: string;
1007
1236
  digits: number;
1008
1237
  answer?: string | number | undefined;
1238
+ } | {
1239
+ type: "Fraction";
1240
+ name: string;
1241
+ simplified: boolean;
1242
+ answer?: string | undefined;
1243
+ numerator?: number | undefined;
1244
+ denominator?: number | undefined;
1009
1245
  })[];
1010
1246
  }, {
1011
1247
  value: number;
@@ -1040,6 +1276,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1040
1276
  name: string;
1041
1277
  digits: number;
1042
1278
  answer?: string | number | undefined;
1279
+ } | {
1280
+ type: "Fraction";
1281
+ name: string;
1282
+ answer?: string | undefined;
1283
+ numerator?: number | undefined;
1284
+ denominator?: number | undefined;
1285
+ simplified?: boolean | undefined;
1043
1286
  })[];
1044
1287
  }>, "many">;
1045
1288
  }, "strip", z.ZodTypeAny, {
@@ -1080,10 +1323,32 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1080
1323
  name: string;
1081
1324
  digits: number;
1082
1325
  answer?: string | number | undefined;
1326
+ } | {
1327
+ type: "Fraction";
1328
+ name: string;
1329
+ simplified: boolean;
1330
+ answer?: string | undefined;
1331
+ numerator?: number | undefined;
1332
+ denominator?: number | undefined;
1083
1333
  })[];
1084
1334
  }[];
1335
+ counter?: {
1336
+ type: "NumberLineCounter";
1337
+ min: number;
1338
+ max: number;
1339
+ name?: string | undefined;
1340
+ default?: number | undefined;
1341
+ } | undefined;
1085
1342
  minorTicks?: number | undefined;
1086
1343
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
1344
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
1345
+ highlights?: {
1346
+ type: "NumberLineHighlight";
1347
+ from: number;
1348
+ to: number;
1349
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1350
+ label?: string | undefined;
1351
+ }[] | undefined;
1087
1352
  }, {
1088
1353
  type: "NumberLineBlock";
1089
1354
  min: number;
@@ -1121,11 +1386,33 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1121
1386
  name: string;
1122
1387
  digits: number;
1123
1388
  answer?: string | number | undefined;
1389
+ } | {
1390
+ type: "Fraction";
1391
+ name: string;
1392
+ answer?: string | undefined;
1393
+ numerator?: number | undefined;
1394
+ denominator?: number | undefined;
1395
+ simplified?: boolean | undefined;
1124
1396
  })[];
1125
1397
  }[];
1398
+ counter?: {
1399
+ type: "NumberLineCounter";
1400
+ min: number;
1401
+ max: number;
1402
+ name?: string | undefined;
1403
+ default?: number | undefined;
1404
+ } | undefined;
1126
1405
  step?: number | undefined;
1127
1406
  minorTicks?: number | undefined;
1128
1407
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
1408
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
1409
+ highlights?: {
1410
+ type: "NumberLineHighlight";
1411
+ from: number;
1412
+ to: number;
1413
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1414
+ label?: string | undefined;
1415
+ }[] | undefined;
1129
1416
  }>, {
1130
1417
  type: "NumberLineBlock";
1131
1418
  min: number;
@@ -1164,10 +1451,32 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1164
1451
  name: string;
1165
1452
  digits: number;
1166
1453
  answer?: string | number | undefined;
1454
+ } | {
1455
+ type: "Fraction";
1456
+ name: string;
1457
+ simplified: boolean;
1458
+ answer?: string | undefined;
1459
+ numerator?: number | undefined;
1460
+ denominator?: number | undefined;
1167
1461
  })[];
1168
1462
  }[];
1463
+ counter?: {
1464
+ type: "NumberLineCounter";
1465
+ min: number;
1466
+ max: number;
1467
+ name?: string | undefined;
1468
+ default?: number | undefined;
1469
+ } | undefined;
1169
1470
  minorTicks?: number | undefined;
1170
1471
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
1472
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
1473
+ highlights?: {
1474
+ type: "NumberLineHighlight";
1475
+ from: number;
1476
+ to: number;
1477
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1478
+ label?: string | undefined;
1479
+ }[] | undefined;
1171
1480
  }, {
1172
1481
  type: "NumberLineBlock";
1173
1482
  min: number;
@@ -1205,11 +1514,33 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1205
1514
  name: string;
1206
1515
  digits: number;
1207
1516
  answer?: string | number | undefined;
1517
+ } | {
1518
+ type: "Fraction";
1519
+ name: string;
1520
+ answer?: string | undefined;
1521
+ numerator?: number | undefined;
1522
+ denominator?: number | undefined;
1523
+ simplified?: boolean | undefined;
1208
1524
  })[];
1209
1525
  }[];
1526
+ counter?: {
1527
+ type: "NumberLineCounter";
1528
+ min: number;
1529
+ max: number;
1530
+ name?: string | undefined;
1531
+ default?: number | undefined;
1532
+ } | undefined;
1210
1533
  step?: number | undefined;
1211
1534
  minorTicks?: number | undefined;
1212
1535
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
1536
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
1537
+ highlights?: {
1538
+ type: "NumberLineHighlight";
1539
+ from: number;
1540
+ to: number;
1541
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1542
+ label?: string | undefined;
1543
+ }[] | undefined;
1213
1544
  }>, {
1214
1545
  type: "NumberLineBlock";
1215
1546
  min: number;
@@ -1248,10 +1579,32 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1248
1579
  name: string;
1249
1580
  digits: number;
1250
1581
  answer?: string | number | undefined;
1582
+ } | {
1583
+ type: "Fraction";
1584
+ name: string;
1585
+ simplified: boolean;
1586
+ answer?: string | undefined;
1587
+ numerator?: number | undefined;
1588
+ denominator?: number | undefined;
1251
1589
  })[];
1252
1590
  }[];
1591
+ counter?: {
1592
+ type: "NumberLineCounter";
1593
+ min: number;
1594
+ max: number;
1595
+ name?: string | undefined;
1596
+ default?: number | undefined;
1597
+ } | undefined;
1253
1598
  minorTicks?: number | undefined;
1254
1599
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
1600
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
1601
+ highlights?: {
1602
+ type: "NumberLineHighlight";
1603
+ from: number;
1604
+ to: number;
1605
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1606
+ label?: string | undefined;
1607
+ }[] | undefined;
1255
1608
  }, {
1256
1609
  type: "NumberLineBlock";
1257
1610
  min: number;
@@ -1289,11 +1642,33 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1289
1642
  name: string;
1290
1643
  digits: number;
1291
1644
  answer?: string | number | undefined;
1645
+ } | {
1646
+ type: "Fraction";
1647
+ name: string;
1648
+ answer?: string | undefined;
1649
+ numerator?: number | undefined;
1650
+ denominator?: number | undefined;
1651
+ simplified?: boolean | undefined;
1292
1652
  })[];
1293
1653
  }[];
1654
+ counter?: {
1655
+ type: "NumberLineCounter";
1656
+ min: number;
1657
+ max: number;
1658
+ name?: string | undefined;
1659
+ default?: number | undefined;
1660
+ } | undefined;
1294
1661
  step?: number | undefined;
1295
1662
  minorTicks?: number | undefined;
1296
1663
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
1664
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
1665
+ highlights?: {
1666
+ type: "NumberLineHighlight";
1667
+ from: number;
1668
+ to: number;
1669
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
1670
+ label?: string | undefined;
1671
+ }[] | undefined;
1297
1672
  }>]>;
1298
1673
 
1299
1674
  /**
@@ -1321,6 +1696,16 @@ export declare function createExerciseDocument(question: z.infer<typeof TextBloc
1321
1696
  */
1322
1697
  export declare function createExpressionValidation(expression: string): ExpressionValidation;
1323
1698
 
1699
+ /**
1700
+ * Create a fraction inline widget
1701
+ */
1702
+ export declare function createFraction(name: string, options?: {
1703
+ numerator?: number;
1704
+ denominator?: number;
1705
+ answer?: string;
1706
+ simplified?: boolean;
1707
+ }): FractionInline;
1708
+
1324
1709
  /**
1325
1710
  * Create a free text inline element
1326
1711
  */
@@ -1563,7 +1948,28 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1563
1948
  name: string;
1564
1949
  digits: number;
1565
1950
  answer?: string | number | undefined;
1566
- }>]>]>, "many">;
1951
+ }>]>, z.ZodObject<{
1952
+ type: z.ZodLiteral<"Fraction">;
1953
+ name: z.ZodString;
1954
+ numerator: z.ZodOptional<z.ZodNumber>;
1955
+ denominator: z.ZodOptional<z.ZodNumber>;
1956
+ answer: z.ZodOptional<z.ZodString>;
1957
+ simplified: z.ZodDefault<z.ZodBoolean>;
1958
+ }, "strip", z.ZodTypeAny, {
1959
+ type: "Fraction";
1960
+ name: string;
1961
+ simplified: boolean;
1962
+ answer?: string | undefined;
1963
+ numerator?: number | undefined;
1964
+ denominator?: number | undefined;
1965
+ }, {
1966
+ type: "Fraction";
1967
+ name: string;
1968
+ answer?: string | undefined;
1969
+ numerator?: number | undefined;
1970
+ denominator?: number | undefined;
1971
+ simplified?: boolean | undefined;
1972
+ }>]>, "many">;
1567
1973
  }, "strip", z.ZodTypeAny, {
1568
1974
  type: "LineBlock";
1569
1975
  inlines: ({
@@ -1596,6 +2002,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1596
2002
  name: string;
1597
2003
  digits: number;
1598
2004
  answer?: string | number | undefined;
2005
+ } | {
2006
+ type: "Fraction";
2007
+ name: string;
2008
+ simplified: boolean;
2009
+ answer?: string | undefined;
2010
+ numerator?: number | undefined;
2011
+ denominator?: number | undefined;
1599
2012
  })[];
1600
2013
  }, {
1601
2014
  type: "LineBlock";
@@ -1629,6 +2042,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1629
2042
  name: string;
1630
2043
  digits: number;
1631
2044
  answer?: string | number | undefined;
2045
+ } | {
2046
+ type: "Fraction";
2047
+ name: string;
2048
+ answer?: string | undefined;
2049
+ numerator?: number | undefined;
2050
+ denominator?: number | undefined;
2051
+ simplified?: boolean | undefined;
1632
2052
  })[];
1633
2053
  }>, z.ZodObject<{
1634
2054
  type: z.ZodLiteral<"TableBlock">;
@@ -1728,7 +2148,28 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1728
2148
  name: string;
1729
2149
  digits: number;
1730
2150
  answer?: string | number | undefined;
1731
- }>]>]>, "many">;
2151
+ }>]>, z.ZodObject<{
2152
+ type: z.ZodLiteral<"Fraction">;
2153
+ name: z.ZodString;
2154
+ numerator: z.ZodOptional<z.ZodNumber>;
2155
+ denominator: z.ZodOptional<z.ZodNumber>;
2156
+ answer: z.ZodOptional<z.ZodString>;
2157
+ simplified: z.ZodDefault<z.ZodBoolean>;
2158
+ }, "strip", z.ZodTypeAny, {
2159
+ type: "Fraction";
2160
+ name: string;
2161
+ simplified: boolean;
2162
+ answer?: string | undefined;
2163
+ numerator?: number | undefined;
2164
+ denominator?: number | undefined;
2165
+ }, {
2166
+ type: "Fraction";
2167
+ name: string;
2168
+ answer?: string | undefined;
2169
+ numerator?: number | undefined;
2170
+ denominator?: number | undefined;
2171
+ simplified?: boolean | undefined;
2172
+ }>]>, "many">;
1732
2173
  }, "strip", z.ZodTypeAny, {
1733
2174
  type: "TableCell";
1734
2175
  inlines: ({
@@ -1761,6 +2202,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1761
2202
  name: string;
1762
2203
  digits: number;
1763
2204
  answer?: string | number | undefined;
2205
+ } | {
2206
+ type: "Fraction";
2207
+ name: string;
2208
+ simplified: boolean;
2209
+ answer?: string | undefined;
2210
+ numerator?: number | undefined;
2211
+ denominator?: number | undefined;
1764
2212
  })[];
1765
2213
  colspan?: number | undefined;
1766
2214
  }, {
@@ -1795,6 +2243,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1795
2243
  name: string;
1796
2244
  digits: number;
1797
2245
  answer?: string | number | undefined;
2246
+ } | {
2247
+ type: "Fraction";
2248
+ name: string;
2249
+ answer?: string | undefined;
2250
+ numerator?: number | undefined;
2251
+ denominator?: number | undefined;
2252
+ simplified?: boolean | undefined;
1798
2253
  })[];
1799
2254
  colspan?: number | undefined;
1800
2255
  }>, "many">;
@@ -1832,6 +2287,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1832
2287
  name: string;
1833
2288
  digits: number;
1834
2289
  answer?: string | number | undefined;
2290
+ } | {
2291
+ type: "Fraction";
2292
+ name: string;
2293
+ simplified: boolean;
2294
+ answer?: string | undefined;
2295
+ numerator?: number | undefined;
2296
+ denominator?: number | undefined;
1835
2297
  })[];
1836
2298
  colspan?: number | undefined;
1837
2299
  }[];
@@ -1869,6 +2331,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1869
2331
  name: string;
1870
2332
  digits: number;
1871
2333
  answer?: string | number | undefined;
2334
+ } | {
2335
+ type: "Fraction";
2336
+ name: string;
2337
+ answer?: string | undefined;
2338
+ numerator?: number | undefined;
2339
+ denominator?: number | undefined;
2340
+ simplified?: boolean | undefined;
1872
2341
  })[];
1873
2342
  colspan?: number | undefined;
1874
2343
  }[];
@@ -1910,6 +2379,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1910
2379
  name: string;
1911
2380
  digits: number;
1912
2381
  answer?: string | number | undefined;
2382
+ } | {
2383
+ type: "Fraction";
2384
+ name: string;
2385
+ simplified: boolean;
2386
+ answer?: string | undefined;
2387
+ numerator?: number | undefined;
2388
+ denominator?: number | undefined;
1913
2389
  })[];
1914
2390
  colspan?: number | undefined;
1915
2391
  }[];
@@ -1951,6 +2427,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1951
2427
  name: string;
1952
2428
  digits: number;
1953
2429
  answer?: string | number | undefined;
2430
+ } | {
2431
+ type: "Fraction";
2432
+ name: string;
2433
+ answer?: string | undefined;
2434
+ numerator?: number | undefined;
2435
+ denominator?: number | undefined;
2436
+ simplified?: boolean | undefined;
1954
2437
  })[];
1955
2438
  colspan?: number | undefined;
1956
2439
  }[];
@@ -1977,6 +2460,69 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1977
2460
  step: z.ZodDefault<z.ZodNumber>;
1978
2461
  minorTicks: z.ZodOptional<z.ZodNumber>;
1979
2462
  style: z.ZodOptional<z.ZodEnum<["arrow-right", "arrow-left", "arrow-both", "line"]>>;
2463
+ labelVisibility: z.ZodOptional<z.ZodEnum<["all", "extremes", "min-only", "max-only", "none"]>>;
2464
+ counter: z.ZodOptional<z.ZodEffects<z.ZodObject<{
2465
+ type: z.ZodLiteral<"NumberLineCounter">;
2466
+ min: z.ZodNumber;
2467
+ max: z.ZodNumber;
2468
+ default: z.ZodOptional<z.ZodNumber>;
2469
+ name: z.ZodOptional<z.ZodString>;
2470
+ }, "strip", z.ZodTypeAny, {
2471
+ type: "NumberLineCounter";
2472
+ min: number;
2473
+ max: number;
2474
+ name?: string | undefined;
2475
+ default?: number | undefined;
2476
+ }, {
2477
+ type: "NumberLineCounter";
2478
+ min: number;
2479
+ max: number;
2480
+ name?: string | undefined;
2481
+ default?: number | undefined;
2482
+ }>, {
2483
+ type: "NumberLineCounter";
2484
+ min: number;
2485
+ max: number;
2486
+ name?: string | undefined;
2487
+ default?: number | undefined;
2488
+ }, {
2489
+ type: "NumberLineCounter";
2490
+ min: number;
2491
+ max: number;
2492
+ name?: string | undefined;
2493
+ default?: number | undefined;
2494
+ }>>;
2495
+ highlights: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodObject<{
2496
+ type: z.ZodLiteral<"NumberLineHighlight">;
2497
+ from: z.ZodNumber;
2498
+ to: z.ZodNumber;
2499
+ color: z.ZodOptional<z.ZodEnum<["blue", "red", "green", "orange", "purple", "yellow"]>>;
2500
+ label: z.ZodOptional<z.ZodString>;
2501
+ }, "strip", z.ZodTypeAny, {
2502
+ type: "NumberLineHighlight";
2503
+ from: number;
2504
+ to: number;
2505
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2506
+ label?: string | undefined;
2507
+ }, {
2508
+ type: "NumberLineHighlight";
2509
+ from: number;
2510
+ to: number;
2511
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2512
+ label?: string | undefined;
2513
+ }>, {
2514
+ type: "NumberLineHighlight";
2515
+ from: number;
2516
+ to: number;
2517
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2518
+ label?: string | undefined;
2519
+ }, {
2520
+ type: "NumberLineHighlight";
2521
+ from: number;
2522
+ to: number;
2523
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2524
+ label?: string | undefined;
2525
+ }>, "many">>;
1980
2526
  positions: z.ZodArray<z.ZodObject<{
1981
2527
  type: z.ZodLiteral<"NumberLinePosition">;
1982
2528
  value: z.ZodNumber;
@@ -2070,7 +2616,28 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2070
2616
  name: string;
2071
2617
  digits: number;
2072
2618
  answer?: string | number | undefined;
2073
- }>]>]>, "many">;
2619
+ }>]>, z.ZodObject<{
2620
+ type: z.ZodLiteral<"Fraction">;
2621
+ name: z.ZodString;
2622
+ numerator: z.ZodOptional<z.ZodNumber>;
2623
+ denominator: z.ZodOptional<z.ZodNumber>;
2624
+ answer: z.ZodOptional<z.ZodString>;
2625
+ simplified: z.ZodDefault<z.ZodBoolean>;
2626
+ }, "strip", z.ZodTypeAny, {
2627
+ type: "Fraction";
2628
+ name: string;
2629
+ simplified: boolean;
2630
+ answer?: string | undefined;
2631
+ numerator?: number | undefined;
2632
+ denominator?: number | undefined;
2633
+ }, {
2634
+ type: "Fraction";
2635
+ name: string;
2636
+ answer?: string | undefined;
2637
+ numerator?: number | undefined;
2638
+ denominator?: number | undefined;
2639
+ simplified?: boolean | undefined;
2640
+ }>]>, "many">;
2074
2641
  }, "strip", z.ZodTypeAny, {
2075
2642
  value: number;
2076
2643
  type: "NumberLinePosition";
@@ -2104,6 +2671,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2104
2671
  name: string;
2105
2672
  digits: number;
2106
2673
  answer?: string | number | undefined;
2674
+ } | {
2675
+ type: "Fraction";
2676
+ name: string;
2677
+ simplified: boolean;
2678
+ answer?: string | undefined;
2679
+ numerator?: number | undefined;
2680
+ denominator?: number | undefined;
2107
2681
  })[];
2108
2682
  }, {
2109
2683
  value: number;
@@ -2138,6 +2712,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2138
2712
  name: string;
2139
2713
  digits: number;
2140
2714
  answer?: string | number | undefined;
2715
+ } | {
2716
+ type: "Fraction";
2717
+ name: string;
2718
+ answer?: string | undefined;
2719
+ numerator?: number | undefined;
2720
+ denominator?: number | undefined;
2721
+ simplified?: boolean | undefined;
2141
2722
  })[];
2142
2723
  }>, "many">;
2143
2724
  }, "strip", z.ZodTypeAny, {
@@ -2178,10 +2759,32 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2178
2759
  name: string;
2179
2760
  digits: number;
2180
2761
  answer?: string | number | undefined;
2762
+ } | {
2763
+ type: "Fraction";
2764
+ name: string;
2765
+ simplified: boolean;
2766
+ answer?: string | undefined;
2767
+ numerator?: number | undefined;
2768
+ denominator?: number | undefined;
2181
2769
  })[];
2182
2770
  }[];
2771
+ counter?: {
2772
+ type: "NumberLineCounter";
2773
+ min: number;
2774
+ max: number;
2775
+ name?: string | undefined;
2776
+ default?: number | undefined;
2777
+ } | undefined;
2183
2778
  minorTicks?: number | undefined;
2184
2779
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
2780
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
2781
+ highlights?: {
2782
+ type: "NumberLineHighlight";
2783
+ from: number;
2784
+ to: number;
2785
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2786
+ label?: string | undefined;
2787
+ }[] | undefined;
2185
2788
  }, {
2186
2789
  type: "NumberLineBlock";
2187
2790
  min: number;
@@ -2219,11 +2822,33 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2219
2822
  name: string;
2220
2823
  digits: number;
2221
2824
  answer?: string | number | undefined;
2825
+ } | {
2826
+ type: "Fraction";
2827
+ name: string;
2828
+ answer?: string | undefined;
2829
+ numerator?: number | undefined;
2830
+ denominator?: number | undefined;
2831
+ simplified?: boolean | undefined;
2222
2832
  })[];
2223
2833
  }[];
2834
+ counter?: {
2835
+ type: "NumberLineCounter";
2836
+ min: number;
2837
+ max: number;
2838
+ name?: string | undefined;
2839
+ default?: number | undefined;
2840
+ } | undefined;
2224
2841
  step?: number | undefined;
2225
2842
  minorTicks?: number | undefined;
2226
2843
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
2844
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
2845
+ highlights?: {
2846
+ type: "NumberLineHighlight";
2847
+ from: number;
2848
+ to: number;
2849
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2850
+ label?: string | undefined;
2851
+ }[] | undefined;
2227
2852
  }>, {
2228
2853
  type: "NumberLineBlock";
2229
2854
  min: number;
@@ -2262,10 +2887,32 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2262
2887
  name: string;
2263
2888
  digits: number;
2264
2889
  answer?: string | number | undefined;
2890
+ } | {
2891
+ type: "Fraction";
2892
+ name: string;
2893
+ simplified: boolean;
2894
+ answer?: string | undefined;
2895
+ numerator?: number | undefined;
2896
+ denominator?: number | undefined;
2265
2897
  })[];
2266
2898
  }[];
2899
+ counter?: {
2900
+ type: "NumberLineCounter";
2901
+ min: number;
2902
+ max: number;
2903
+ name?: string | undefined;
2904
+ default?: number | undefined;
2905
+ } | undefined;
2267
2906
  minorTicks?: number | undefined;
2268
2907
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
2908
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
2909
+ highlights?: {
2910
+ type: "NumberLineHighlight";
2911
+ from: number;
2912
+ to: number;
2913
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2914
+ label?: string | undefined;
2915
+ }[] | undefined;
2269
2916
  }, {
2270
2917
  type: "NumberLineBlock";
2271
2918
  min: number;
@@ -2303,11 +2950,33 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2303
2950
  name: string;
2304
2951
  digits: number;
2305
2952
  answer?: string | number | undefined;
2953
+ } | {
2954
+ type: "Fraction";
2955
+ name: string;
2956
+ answer?: string | undefined;
2957
+ numerator?: number | undefined;
2958
+ denominator?: number | undefined;
2959
+ simplified?: boolean | undefined;
2306
2960
  })[];
2307
2961
  }[];
2962
+ counter?: {
2963
+ type: "NumberLineCounter";
2964
+ min: number;
2965
+ max: number;
2966
+ name?: string | undefined;
2967
+ default?: number | undefined;
2968
+ } | undefined;
2308
2969
  step?: number | undefined;
2309
2970
  minorTicks?: number | undefined;
2310
2971
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
2972
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
2973
+ highlights?: {
2974
+ type: "NumberLineHighlight";
2975
+ from: number;
2976
+ to: number;
2977
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
2978
+ label?: string | undefined;
2979
+ }[] | undefined;
2311
2980
  }>, {
2312
2981
  type: "NumberLineBlock";
2313
2982
  min: number;
@@ -2346,10 +3015,32 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2346
3015
  name: string;
2347
3016
  digits: number;
2348
3017
  answer?: string | number | undefined;
3018
+ } | {
3019
+ type: "Fraction";
3020
+ name: string;
3021
+ simplified: boolean;
3022
+ answer?: string | undefined;
3023
+ numerator?: number | undefined;
3024
+ denominator?: number | undefined;
2349
3025
  })[];
2350
3026
  }[];
3027
+ counter?: {
3028
+ type: "NumberLineCounter";
3029
+ min: number;
3030
+ max: number;
3031
+ name?: string | undefined;
3032
+ default?: number | undefined;
3033
+ } | undefined;
2351
3034
  minorTicks?: number | undefined;
2352
3035
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
3036
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
3037
+ highlights?: {
3038
+ type: "NumberLineHighlight";
3039
+ from: number;
3040
+ to: number;
3041
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
3042
+ label?: string | undefined;
3043
+ }[] | undefined;
2353
3044
  }, {
2354
3045
  type: "NumberLineBlock";
2355
3046
  min: number;
@@ -2387,11 +3078,33 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2387
3078
  name: string;
2388
3079
  digits: number;
2389
3080
  answer?: string | number | undefined;
3081
+ } | {
3082
+ type: "Fraction";
3083
+ name: string;
3084
+ answer?: string | undefined;
3085
+ numerator?: number | undefined;
3086
+ denominator?: number | undefined;
3087
+ simplified?: boolean | undefined;
2390
3088
  })[];
2391
3089
  }[];
3090
+ counter?: {
3091
+ type: "NumberLineCounter";
3092
+ min: number;
3093
+ max: number;
3094
+ name?: string | undefined;
3095
+ default?: number | undefined;
3096
+ } | undefined;
2392
3097
  step?: number | undefined;
2393
3098
  minorTicks?: number | undefined;
2394
3099
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
3100
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
3101
+ highlights?: {
3102
+ type: "NumberLineHighlight";
3103
+ from: number;
3104
+ to: number;
3105
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
3106
+ label?: string | undefined;
3107
+ }[] | undefined;
2395
3108
  }>]>, "many">;
2396
3109
  tools: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2397
3110
  type: z.ZodLiteral<"DragOptions">;
@@ -2465,6 +3178,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2465
3178
  name: string;
2466
3179
  digits: number;
2467
3180
  answer?: string | number | undefined;
3181
+ } | {
3182
+ type: "Fraction";
3183
+ name: string;
3184
+ simplified: boolean;
3185
+ answer?: string | undefined;
3186
+ numerator?: number | undefined;
3187
+ denominator?: number | undefined;
2468
3188
  })[];
2469
3189
  } | {
2470
3190
  type: "NumberLineBlock";
@@ -2504,10 +3224,32 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2504
3224
  name: string;
2505
3225
  digits: number;
2506
3226
  answer?: string | number | undefined;
3227
+ } | {
3228
+ type: "Fraction";
3229
+ name: string;
3230
+ simplified: boolean;
3231
+ answer?: string | undefined;
3232
+ numerator?: number | undefined;
3233
+ denominator?: number | undefined;
2507
3234
  })[];
2508
3235
  }[];
3236
+ counter?: {
3237
+ type: "NumberLineCounter";
3238
+ min: number;
3239
+ max: number;
3240
+ name?: string | undefined;
3241
+ default?: number | undefined;
3242
+ } | undefined;
2509
3243
  minorTicks?: number | undefined;
2510
3244
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
3245
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
3246
+ highlights?: {
3247
+ type: "NumberLineHighlight";
3248
+ from: number;
3249
+ to: number;
3250
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
3251
+ label?: string | undefined;
3252
+ }[] | undefined;
2511
3253
  } | {
2512
3254
  type: "TableBlock";
2513
3255
  cols: number;
@@ -2545,6 +3287,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2545
3287
  name: string;
2546
3288
  digits: number;
2547
3289
  answer?: string | number | undefined;
3290
+ } | {
3291
+ type: "Fraction";
3292
+ name: string;
3293
+ simplified: boolean;
3294
+ answer?: string | undefined;
3295
+ numerator?: number | undefined;
3296
+ denominator?: number | undefined;
2548
3297
  })[];
2549
3298
  colspan?: number | undefined;
2550
3299
  }[];
@@ -2607,6 +3356,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2607
3356
  name: string;
2608
3357
  digits: number;
2609
3358
  answer?: string | number | undefined;
3359
+ } | {
3360
+ type: "Fraction";
3361
+ name: string;
3362
+ answer?: string | undefined;
3363
+ numerator?: number | undefined;
3364
+ denominator?: number | undefined;
3365
+ simplified?: boolean | undefined;
2610
3366
  })[];
2611
3367
  } | {
2612
3368
  type: "NumberLineBlock";
@@ -2645,11 +3401,33 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2645
3401
  name: string;
2646
3402
  digits: number;
2647
3403
  answer?: string | number | undefined;
3404
+ } | {
3405
+ type: "Fraction";
3406
+ name: string;
3407
+ answer?: string | undefined;
3408
+ numerator?: number | undefined;
3409
+ denominator?: number | undefined;
3410
+ simplified?: boolean | undefined;
2648
3411
  })[];
2649
3412
  }[];
3413
+ counter?: {
3414
+ type: "NumberLineCounter";
3415
+ min: number;
3416
+ max: number;
3417
+ name?: string | undefined;
3418
+ default?: number | undefined;
3419
+ } | undefined;
2650
3420
  step?: number | undefined;
2651
3421
  minorTicks?: number | undefined;
2652
3422
  style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
3423
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
3424
+ highlights?: {
3425
+ type: "NumberLineHighlight";
3426
+ from: number;
3427
+ to: number;
3428
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
3429
+ label?: string | undefined;
3430
+ }[] | undefined;
2653
3431
  } | {
2654
3432
  type: "TableBlock";
2655
3433
  cols: number;
@@ -2687,6 +3465,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2687
3465
  name: string;
2688
3466
  digits: number;
2689
3467
  answer?: string | number | undefined;
3468
+ } | {
3469
+ type: "Fraction";
3470
+ name: string;
3471
+ answer?: string | undefined;
3472
+ numerator?: number | undefined;
3473
+ denominator?: number | undefined;
3474
+ simplified?: boolean | undefined;
2690
3475
  })[];
2691
3476
  colspan?: number | undefined;
2692
3477
  }[];
@@ -2777,6 +3562,21 @@ export declare const ExerciseJSONSchema: z.ZodObject<{
2777
3562
  type: "numeric-keypad";
2778
3563
  includeOperators?: boolean | undefined;
2779
3564
  includeDecimal?: boolean | undefined;
3565
+ }>, z.ZodObject<{
3566
+ type: z.ZodLiteral<"fraction">;
3567
+ numerator: z.ZodNullable<z.ZodNumber>;
3568
+ denominator: z.ZodNullable<z.ZodNumber>;
3569
+ simplified: z.ZodBoolean;
3570
+ }, "strip", z.ZodTypeAny, {
3571
+ type: "fraction";
3572
+ numerator: number | null;
3573
+ denominator: number | null;
3574
+ simplified: boolean;
3575
+ }, {
3576
+ type: "fraction";
3577
+ numerator: number | null;
3578
+ denominator: number | null;
3579
+ simplified: boolean;
2780
3580
  }>]>>;
2781
3581
  validation: z.ZodOptional<z.ZodObject<{
2782
3582
  mode: z.ZodEnum<["simple", "expression"]>;
@@ -2831,6 +3631,11 @@ export declare const ExerciseJSONSchema: z.ZodObject<{
2831
3631
  type: "numeric-keypad";
2832
3632
  includeOperators?: boolean | undefined;
2833
3633
  includeDecimal?: boolean | undefined;
3634
+ } | {
3635
+ type: "fraction";
3636
+ numerator: number | null;
3637
+ denominator: number | null;
3638
+ simplified: boolean;
2834
3639
  }>;
2835
3640
  validation?: {
2836
3641
  mode: "simple" | "expression";
@@ -2866,6 +3671,11 @@ export declare const ExerciseJSONSchema: z.ZodObject<{
2866
3671
  type: "numeric-keypad";
2867
3672
  includeOperators?: boolean | undefined;
2868
3673
  includeDecimal?: boolean | undefined;
3674
+ } | {
3675
+ type: "fraction";
3676
+ numerator: number | null;
3677
+ denominator: number | null;
3678
+ simplified: boolean;
2869
3679
  }>;
2870
3680
  validation?: {
2871
3681
  mode: "simple" | "expression";
@@ -2972,6 +3782,72 @@ export declare function findValidCombination(expression: string, ranges: Record<
2972
3782
  step?: number;
2973
3783
  }>): Record<string, number> | null;
2974
3784
 
3785
+ export declare type FractionInline = z.infer<typeof FractionInlineSchema>;
3786
+
3787
+ /**
3788
+ * Fraction inline widget schema
3789
+ *
3790
+ * Modes determined by presence of numerator/denominator:
3791
+ * - both provided → readonly display
3792
+ * - only numerator → denominator input
3793
+ * - only denominator → numerator input
3794
+ * - neither → both are inputs
3795
+ *
3796
+ * @example Readonly: { type: "Fraction", name: "x", numerator: 5, denominator: 3 }
3797
+ * @example Denominator input: { type: "Fraction", name: "y", numerator: 5, answer: "5/3" }
3798
+ * @example Both inputs: { type: "Fraction", name: "z", answer: "5/3" }
3799
+ */
3800
+ export declare const FractionInlineSchema: z.ZodObject<{
3801
+ type: z.ZodLiteral<"Fraction">;
3802
+ name: z.ZodString;
3803
+ numerator: z.ZodOptional<z.ZodNumber>;
3804
+ denominator: z.ZodOptional<z.ZodNumber>;
3805
+ answer: z.ZodOptional<z.ZodString>;
3806
+ simplified: z.ZodDefault<z.ZodBoolean>;
3807
+ }, "strip", z.ZodTypeAny, {
3808
+ type: "Fraction";
3809
+ name: string;
3810
+ simplified: boolean;
3811
+ answer?: string | undefined;
3812
+ numerator?: number | undefined;
3813
+ denominator?: number | undefined;
3814
+ }, {
3815
+ type: "Fraction";
3816
+ name: string;
3817
+ answer?: string | undefined;
3818
+ numerator?: number | undefined;
3819
+ denominator?: number | undefined;
3820
+ simplified?: boolean | undefined;
3821
+ }>;
3822
+
3823
+ export declare type FractionJSON = z.infer<typeof FractionJSONSchema>;
3824
+
3825
+ export declare const FractionJSONSchema: z.ZodObject<{
3826
+ type: z.ZodLiteral<"fraction">;
3827
+ numerator: z.ZodNullable<z.ZodNumber>;
3828
+ denominator: z.ZodNullable<z.ZodNumber>;
3829
+ simplified: z.ZodBoolean;
3830
+ }, "strip", z.ZodTypeAny, {
3831
+ type: "fraction";
3832
+ numerator: number | null;
3833
+ denominator: number | null;
3834
+ simplified: boolean;
3835
+ }, {
3836
+ type: "fraction";
3837
+ numerator: number | null;
3838
+ denominator: number | null;
3839
+ simplified: boolean;
3840
+ }>;
3841
+
3842
+ /**
3843
+ * Centralized fraction compound key utilities.
3844
+ *
3845
+ * Fraction widgets use compound keys (e.g., "x__num", "x__den") in the
3846
+ * UI values map for sub-inputs. These keys are UI-only — they never appear
3847
+ * in the widgets map or validation answers.
3848
+ */
3849
+ export declare type FractionPart = 'num' | 'den';
3850
+
2975
3851
  export declare type FreeTextInline = z.infer<typeof FreeTextInlineSchema>;
2976
3852
 
2977
3853
  /**
@@ -2994,6 +3870,8 @@ export declare const FreeTextInlineSchema: z.ZodObject<{
2994
3870
  type: "FreeText";
2995
3871
  }>;
2996
3872
 
3873
+ export declare function getFractionKey(widgetId: string, part: FractionPart): string;
3874
+
2997
3875
  /**
2998
3876
  * Check if all required inputs are provided
2999
3877
  *
@@ -3253,7 +4131,28 @@ export declare const InlineNodeSchema: z.ZodUnion<[z.ZodObject<{
3253
4131
  name: string;
3254
4132
  digits: number;
3255
4133
  answer?: string | number | undefined;
3256
- }>]>]>;
4134
+ }>]>, z.ZodObject<{
4135
+ type: z.ZodLiteral<"Fraction">;
4136
+ name: z.ZodString;
4137
+ numerator: z.ZodOptional<z.ZodNumber>;
4138
+ denominator: z.ZodOptional<z.ZodNumber>;
4139
+ answer: z.ZodOptional<z.ZodString>;
4140
+ simplified: z.ZodDefault<z.ZodBoolean>;
4141
+ }, "strip", z.ZodTypeAny, {
4142
+ type: "Fraction";
4143
+ name: string;
4144
+ simplified: boolean;
4145
+ answer?: string | undefined;
4146
+ numerator?: number | undefined;
4147
+ denominator?: number | undefined;
4148
+ }, {
4149
+ type: "Fraction";
4150
+ name: string;
4151
+ answer?: string | undefined;
4152
+ numerator?: number | undefined;
4153
+ denominator?: number | undefined;
4154
+ simplified?: boolean | undefined;
4155
+ }>]>;
3257
4156
 
3258
4157
  /**
3259
4158
  * Type guard for BoldText
@@ -3282,14 +4181,23 @@ export declare function isExerciseDocument(value: unknown): value is ExerciseDoc
3282
4181
 
3283
4182
  export declare function isExpressionValidation(value: unknown): value is ExpressionValidation;
3284
4183
 
4184
+ export declare function isFraction(value: unknown): value is FractionInline;
4185
+
4186
+ /**
4187
+ * Type guard for FractionJSON
4188
+ */
4189
+ export declare function isFractionJSON(widget: WidgetJSON): widget is Extract<WidgetJSON, {
4190
+ type: 'fraction';
4191
+ }>;
4192
+
4193
+ export declare function isFractionKey(key: string): boolean;
4194
+
3285
4195
  export declare function isFreeText(value: unknown): value is FreeTextInline;
3286
4196
 
3287
4197
  /**
3288
4198
  * Type guard for GroupItem
3289
4199
  */
3290
- export declare function isGroupItem(item: LayoutItem): item is Extract<LayoutItem, {
3291
- type: 'group';
3292
- }>;
4200
+ export declare function isGroupItem(item: LayoutItem): item is GroupItem;
3293
4201
 
3294
4202
  /**
3295
4203
  * Type guard for HighlightedText
@@ -3444,6 +4352,10 @@ export declare const JSON_TYPES: {
3444
4352
  readonly NUMBER_LINE: "number-line";
3445
4353
  /** Position marker within a number line */
3446
4354
  readonly NUMBER_LINE_POSITION: "number-line-position";
4355
+ /** Dynamic subdivision counter embedded in a number line */
4356
+ readonly NUMBER_LINE_COUNTER: "number-line-counter";
4357
+ /** Highlighted range within a number line */
4358
+ readonly NUMBER_LINE_HIGHLIGHT: "number-line-highlight";
3447
4359
  /** Inline input widget (string or numeric) */
3448
4360
  readonly INLINE_INPUT: "inline-input";
3449
4361
  /** Drag-and-drop options widget */
@@ -3452,6 +4364,8 @@ export declare const JSON_TYPES: {
3452
4364
  readonly RADIO_OPTIONS: "radio-options";
3453
4365
  /** Numeric keypad widget */
3454
4366
  readonly NUMERIC_KEYPAD: "numeric-keypad";
4367
+ /** Inline fraction widget */
4368
+ readonly FRACTION: "fraction";
3455
4369
  };
3456
4370
 
3457
4371
  /**
@@ -3473,6 +4387,7 @@ export declare interface LayoutRendererProps {
3473
4387
  widgets: Record<string, WidgetJSON>;
3474
4388
  values: Record<string, string>;
3475
4389
  droppedInputs: Set<string>;
4390
+ validationDetails?: Record<string, boolean> | null;
3476
4391
  onChange: (widgetId: string, value: string, fromDrop?: boolean, sourceOptionId?: string) => void;
3477
4392
  onInputFocus?: (widgetId: string) => void;
3478
4393
  }
@@ -3596,7 +4511,28 @@ export declare const LineBlockSchema: z.ZodObject<{
3596
4511
  name: string;
3597
4512
  digits: number;
3598
4513
  answer?: string | number | undefined;
3599
- }>]>]>, "many">;
4514
+ }>]>, z.ZodObject<{
4515
+ type: z.ZodLiteral<"Fraction">;
4516
+ name: z.ZodString;
4517
+ numerator: z.ZodOptional<z.ZodNumber>;
4518
+ denominator: z.ZodOptional<z.ZodNumber>;
4519
+ answer: z.ZodOptional<z.ZodString>;
4520
+ simplified: z.ZodDefault<z.ZodBoolean>;
4521
+ }, "strip", z.ZodTypeAny, {
4522
+ type: "Fraction";
4523
+ name: string;
4524
+ simplified: boolean;
4525
+ answer?: string | undefined;
4526
+ numerator?: number | undefined;
4527
+ denominator?: number | undefined;
4528
+ }, {
4529
+ type: "Fraction";
4530
+ name: string;
4531
+ answer?: string | undefined;
4532
+ numerator?: number | undefined;
4533
+ denominator?: number | undefined;
4534
+ simplified?: boolean | undefined;
4535
+ }>]>, "many">;
3600
4536
  }, "strip", z.ZodTypeAny, {
3601
4537
  type: "LineBlock";
3602
4538
  inlines: ({
@@ -3629,6 +4565,13 @@ export declare const LineBlockSchema: z.ZodObject<{
3629
4565
  name: string;
3630
4566
  digits: number;
3631
4567
  answer?: string | number | undefined;
4568
+ } | {
4569
+ type: "Fraction";
4570
+ name: string;
4571
+ simplified: boolean;
4572
+ answer?: string | undefined;
4573
+ numerator?: number | undefined;
4574
+ denominator?: number | undefined;
3632
4575
  })[];
3633
4576
  }, {
3634
4577
  type: "LineBlock";
@@ -3662,6 +4605,13 @@ export declare const LineBlockSchema: z.ZodObject<{
3662
4605
  name: string;
3663
4606
  digits: number;
3664
4607
  answer?: string | number | undefined;
4608
+ } | {
4609
+ type: "Fraction";
4610
+ name: string;
4611
+ answer?: string | undefined;
4612
+ numerator?: number | undefined;
4613
+ denominator?: number | undefined;
4614
+ simplified?: boolean | undefined;
3665
4615
  })[];
3666
4616
  }>;
3667
4617
 
@@ -3678,18 +4628,1184 @@ export declare const LinebreakSchema: z.ZodObject<{
3678
4628
  id: string;
3679
4629
  }>;
3680
4630
 
3681
- export declare type NumericKeypadJSON = z.infer<typeof NumericKeypadJSONSchema>;
4631
+ export declare type NumberLineBlock = z.infer<typeof NumberLineBlockSchema>;
3682
4632
 
3683
- export declare const NumericKeypadJSONSchema: z.ZodObject<{
3684
- type: z.ZodLiteral<"numeric-keypad">;
3685
- includeOperators: z.ZodOptional<z.ZodBoolean>;
3686
- includeDecimal: z.ZodOptional<z.ZodBoolean>;
3687
- }, "strip", z.ZodTypeAny, {
3688
- type: "numeric-keypad";
3689
- includeOperators?: boolean | undefined;
3690
- includeDecimal?: boolean | undefined;
3691
- }, {
3692
- type: "numeric-keypad";
4633
+ /**
4634
+ * Number line block schema — the root node for a number line exercise element.
4635
+ *
4636
+ * @example
4637
+ * {
4638
+ * type: "NumberLineBlock",
4639
+ * min: 0, max: 100, step: 10, minorTicks: 0, style: "arrow-right",
4640
+ * positions: [
4641
+ * { type: "NumberLinePosition", value: 20, inlines: [...] }
4642
+ * ]
4643
+ * }
4644
+ */
4645
+ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4646
+ type: z.ZodLiteral<"NumberLineBlock">;
4647
+ min: z.ZodNumber;
4648
+ max: z.ZodNumber;
4649
+ step: z.ZodDefault<z.ZodNumber>;
4650
+ minorTicks: z.ZodOptional<z.ZodNumber>;
4651
+ style: z.ZodOptional<z.ZodEnum<["arrow-right", "arrow-left", "arrow-both", "line"]>>;
4652
+ labelVisibility: z.ZodOptional<z.ZodEnum<["all", "extremes", "min-only", "max-only", "none"]>>;
4653
+ counter: z.ZodOptional<z.ZodEffects<z.ZodObject<{
4654
+ type: z.ZodLiteral<"NumberLineCounter">;
4655
+ min: z.ZodNumber;
4656
+ max: z.ZodNumber;
4657
+ default: z.ZodOptional<z.ZodNumber>;
4658
+ name: z.ZodOptional<z.ZodString>;
4659
+ }, "strip", z.ZodTypeAny, {
4660
+ type: "NumberLineCounter";
4661
+ min: number;
4662
+ max: number;
4663
+ name?: string | undefined;
4664
+ default?: number | undefined;
4665
+ }, {
4666
+ type: "NumberLineCounter";
4667
+ min: number;
4668
+ max: number;
4669
+ name?: string | undefined;
4670
+ default?: number | undefined;
4671
+ }>, {
4672
+ type: "NumberLineCounter";
4673
+ min: number;
4674
+ max: number;
4675
+ name?: string | undefined;
4676
+ default?: number | undefined;
4677
+ }, {
4678
+ type: "NumberLineCounter";
4679
+ min: number;
4680
+ max: number;
4681
+ name?: string | undefined;
4682
+ default?: number | undefined;
4683
+ }>>;
4684
+ highlights: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodObject<{
4685
+ type: z.ZodLiteral<"NumberLineHighlight">;
4686
+ from: z.ZodNumber;
4687
+ to: z.ZodNumber;
4688
+ color: z.ZodOptional<z.ZodEnum<["blue", "red", "green", "orange", "purple", "yellow"]>>;
4689
+ label: z.ZodOptional<z.ZodString>;
4690
+ }, "strip", z.ZodTypeAny, {
4691
+ type: "NumberLineHighlight";
4692
+ from: number;
4693
+ to: number;
4694
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
4695
+ label?: string | undefined;
4696
+ }, {
4697
+ type: "NumberLineHighlight";
4698
+ from: number;
4699
+ to: number;
4700
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
4701
+ label?: string | undefined;
4702
+ }>, {
4703
+ type: "NumberLineHighlight";
4704
+ from: number;
4705
+ to: number;
4706
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
4707
+ label?: string | undefined;
4708
+ }, {
4709
+ type: "NumberLineHighlight";
4710
+ from: number;
4711
+ to: number;
4712
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
4713
+ label?: string | undefined;
4714
+ }>, "many">>;
4715
+ positions: z.ZodArray<z.ZodObject<{
4716
+ type: z.ZodLiteral<"NumberLinePosition">;
4717
+ value: z.ZodNumber;
4718
+ inlines: z.ZodArray<z.ZodUnion<[z.ZodObject<{
4719
+ type: z.ZodLiteral<"FreeText">;
4720
+ value: z.ZodString;
4721
+ }, "strip", z.ZodTypeAny, {
4722
+ value: string;
4723
+ type: "FreeText";
4724
+ }, {
4725
+ value: string;
4726
+ type: "FreeText";
4727
+ }>, z.ZodObject<{
4728
+ type: z.ZodLiteral<"Space">;
4729
+ }, "strip", z.ZodTypeAny, {
4730
+ type: "Space";
4731
+ }, {
4732
+ type: "Space";
4733
+ }>, z.ZodObject<{
4734
+ type: z.ZodLiteral<"HighlightedText">;
4735
+ value: z.ZodString;
4736
+ highlight: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
4737
+ }, "strip", z.ZodTypeAny, {
4738
+ value: string;
4739
+ type: "HighlightedText";
4740
+ highlight?: [number, number] | undefined;
4741
+ }, {
4742
+ value: string;
4743
+ type: "HighlightedText";
4744
+ highlight?: [number, number] | undefined;
4745
+ }>, z.ZodObject<{
4746
+ type: z.ZodLiteral<"ColorText">;
4747
+ value: z.ZodString;
4748
+ color: z.ZodString;
4749
+ highlight: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
4750
+ }, "strip", z.ZodTypeAny, {
4751
+ value: string;
4752
+ type: "ColorText";
4753
+ color: string;
4754
+ highlight?: [number, number] | undefined;
4755
+ }, {
4756
+ value: string;
4757
+ type: "ColorText";
4758
+ color: string;
4759
+ highlight?: [number, number] | undefined;
4760
+ }>, z.ZodObject<{
4761
+ type: z.ZodLiteral<"BoldText">;
4762
+ value: z.ZodString;
4763
+ highlight: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
4764
+ }, "strip", z.ZodTypeAny, {
4765
+ value: string;
4766
+ type: "BoldText";
4767
+ highlight?: [number, number] | undefined;
4768
+ }, {
4769
+ value: string;
4770
+ type: "BoldText";
4771
+ highlight?: [number, number] | undefined;
4772
+ }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{
4773
+ type: z.ZodLiteral<"InlineInput">;
4774
+ name: z.ZodString;
4775
+ inputType: z.ZodLiteral<"string">;
4776
+ length: z.ZodNumber;
4777
+ answer: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
4778
+ }, "strip", z.ZodTypeAny, {
4779
+ length: number;
4780
+ type: "InlineInput";
4781
+ inputType: "string";
4782
+ name: string;
4783
+ answer?: string | number | undefined;
4784
+ }, {
4785
+ length: number;
4786
+ type: "InlineInput";
4787
+ inputType: "string";
4788
+ name: string;
4789
+ answer?: string | number | undefined;
4790
+ }>, z.ZodObject<{
4791
+ type: z.ZodLiteral<"InlineInput">;
4792
+ name: z.ZodString;
4793
+ inputType: z.ZodLiteral<"numeric">;
4794
+ digits: z.ZodNumber;
4795
+ answer: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
4796
+ }, "strip", z.ZodTypeAny, {
4797
+ type: "InlineInput";
4798
+ inputType: "numeric";
4799
+ name: string;
4800
+ digits: number;
4801
+ answer?: string | number | undefined;
4802
+ }, {
4803
+ type: "InlineInput";
4804
+ inputType: "numeric";
4805
+ name: string;
4806
+ digits: number;
4807
+ answer?: string | number | undefined;
4808
+ }>]>, z.ZodObject<{
4809
+ type: z.ZodLiteral<"Fraction">;
4810
+ name: z.ZodString;
4811
+ numerator: z.ZodOptional<z.ZodNumber>;
4812
+ denominator: z.ZodOptional<z.ZodNumber>;
4813
+ answer: z.ZodOptional<z.ZodString>;
4814
+ simplified: z.ZodDefault<z.ZodBoolean>;
4815
+ }, "strip", z.ZodTypeAny, {
4816
+ type: "Fraction";
4817
+ name: string;
4818
+ simplified: boolean;
4819
+ answer?: string | undefined;
4820
+ numerator?: number | undefined;
4821
+ denominator?: number | undefined;
4822
+ }, {
4823
+ type: "Fraction";
4824
+ name: string;
4825
+ answer?: string | undefined;
4826
+ numerator?: number | undefined;
4827
+ denominator?: number | undefined;
4828
+ simplified?: boolean | undefined;
4829
+ }>]>, "many">;
4830
+ }, "strip", z.ZodTypeAny, {
4831
+ value: number;
4832
+ type: "NumberLinePosition";
4833
+ inlines: ({
4834
+ value: string;
4835
+ type: "FreeText";
4836
+ } | {
4837
+ type: "Space";
4838
+ } | {
4839
+ value: string;
4840
+ type: "HighlightedText";
4841
+ highlight?: [number, number] | undefined;
4842
+ } | {
4843
+ value: string;
4844
+ type: "ColorText";
4845
+ color: string;
4846
+ highlight?: [number, number] | undefined;
4847
+ } | {
4848
+ value: string;
4849
+ type: "BoldText";
4850
+ highlight?: [number, number] | undefined;
4851
+ } | {
4852
+ length: number;
4853
+ type: "InlineInput";
4854
+ inputType: "string";
4855
+ name: string;
4856
+ answer?: string | number | undefined;
4857
+ } | {
4858
+ type: "InlineInput";
4859
+ inputType: "numeric";
4860
+ name: string;
4861
+ digits: number;
4862
+ answer?: string | number | undefined;
4863
+ } | {
4864
+ type: "Fraction";
4865
+ name: string;
4866
+ simplified: boolean;
4867
+ answer?: string | undefined;
4868
+ numerator?: number | undefined;
4869
+ denominator?: number | undefined;
4870
+ })[];
4871
+ }, {
4872
+ value: number;
4873
+ type: "NumberLinePosition";
4874
+ inlines: ({
4875
+ value: string;
4876
+ type: "FreeText";
4877
+ } | {
4878
+ type: "Space";
4879
+ } | {
4880
+ value: string;
4881
+ type: "HighlightedText";
4882
+ highlight?: [number, number] | undefined;
4883
+ } | {
4884
+ value: string;
4885
+ type: "ColorText";
4886
+ color: string;
4887
+ highlight?: [number, number] | undefined;
4888
+ } | {
4889
+ value: string;
4890
+ type: "BoldText";
4891
+ highlight?: [number, number] | undefined;
4892
+ } | {
4893
+ length: number;
4894
+ type: "InlineInput";
4895
+ inputType: "string";
4896
+ name: string;
4897
+ answer?: string | number | undefined;
4898
+ } | {
4899
+ type: "InlineInput";
4900
+ inputType: "numeric";
4901
+ name: string;
4902
+ digits: number;
4903
+ answer?: string | number | undefined;
4904
+ } | {
4905
+ type: "Fraction";
4906
+ name: string;
4907
+ answer?: string | undefined;
4908
+ numerator?: number | undefined;
4909
+ denominator?: number | undefined;
4910
+ simplified?: boolean | undefined;
4911
+ })[];
4912
+ }>, "many">;
4913
+ }, "strip", z.ZodTypeAny, {
4914
+ type: "NumberLineBlock";
4915
+ min: number;
4916
+ max: number;
4917
+ step: number;
4918
+ positions: {
4919
+ value: number;
4920
+ type: "NumberLinePosition";
4921
+ inlines: ({
4922
+ value: string;
4923
+ type: "FreeText";
4924
+ } | {
4925
+ type: "Space";
4926
+ } | {
4927
+ value: string;
4928
+ type: "HighlightedText";
4929
+ highlight?: [number, number] | undefined;
4930
+ } | {
4931
+ value: string;
4932
+ type: "ColorText";
4933
+ color: string;
4934
+ highlight?: [number, number] | undefined;
4935
+ } | {
4936
+ value: string;
4937
+ type: "BoldText";
4938
+ highlight?: [number, number] | undefined;
4939
+ } | {
4940
+ length: number;
4941
+ type: "InlineInput";
4942
+ inputType: "string";
4943
+ name: string;
4944
+ answer?: string | number | undefined;
4945
+ } | {
4946
+ type: "InlineInput";
4947
+ inputType: "numeric";
4948
+ name: string;
4949
+ digits: number;
4950
+ answer?: string | number | undefined;
4951
+ } | {
4952
+ type: "Fraction";
4953
+ name: string;
4954
+ simplified: boolean;
4955
+ answer?: string | undefined;
4956
+ numerator?: number | undefined;
4957
+ denominator?: number | undefined;
4958
+ })[];
4959
+ }[];
4960
+ counter?: {
4961
+ type: "NumberLineCounter";
4962
+ min: number;
4963
+ max: number;
4964
+ name?: string | undefined;
4965
+ default?: number | undefined;
4966
+ } | undefined;
4967
+ minorTicks?: number | undefined;
4968
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
4969
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
4970
+ highlights?: {
4971
+ type: "NumberLineHighlight";
4972
+ from: number;
4973
+ to: number;
4974
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
4975
+ label?: string | undefined;
4976
+ }[] | undefined;
4977
+ }, {
4978
+ type: "NumberLineBlock";
4979
+ min: number;
4980
+ max: number;
4981
+ positions: {
4982
+ value: number;
4983
+ type: "NumberLinePosition";
4984
+ inlines: ({
4985
+ value: string;
4986
+ type: "FreeText";
4987
+ } | {
4988
+ type: "Space";
4989
+ } | {
4990
+ value: string;
4991
+ type: "HighlightedText";
4992
+ highlight?: [number, number] | undefined;
4993
+ } | {
4994
+ value: string;
4995
+ type: "ColorText";
4996
+ color: string;
4997
+ highlight?: [number, number] | undefined;
4998
+ } | {
4999
+ value: string;
5000
+ type: "BoldText";
5001
+ highlight?: [number, number] | undefined;
5002
+ } | {
5003
+ length: number;
5004
+ type: "InlineInput";
5005
+ inputType: "string";
5006
+ name: string;
5007
+ answer?: string | number | undefined;
5008
+ } | {
5009
+ type: "InlineInput";
5010
+ inputType: "numeric";
5011
+ name: string;
5012
+ digits: number;
5013
+ answer?: string | number | undefined;
5014
+ } | {
5015
+ type: "Fraction";
5016
+ name: string;
5017
+ answer?: string | undefined;
5018
+ numerator?: number | undefined;
5019
+ denominator?: number | undefined;
5020
+ simplified?: boolean | undefined;
5021
+ })[];
5022
+ }[];
5023
+ counter?: {
5024
+ type: "NumberLineCounter";
5025
+ min: number;
5026
+ max: number;
5027
+ name?: string | undefined;
5028
+ default?: number | undefined;
5029
+ } | undefined;
5030
+ step?: number | undefined;
5031
+ minorTicks?: number | undefined;
5032
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5033
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5034
+ highlights?: {
5035
+ type: "NumberLineHighlight";
5036
+ from: number;
5037
+ to: number;
5038
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5039
+ label?: string | undefined;
5040
+ }[] | undefined;
5041
+ }>, {
5042
+ type: "NumberLineBlock";
5043
+ min: number;
5044
+ max: number;
5045
+ step: number;
5046
+ positions: {
5047
+ value: number;
5048
+ type: "NumberLinePosition";
5049
+ inlines: ({
5050
+ value: string;
5051
+ type: "FreeText";
5052
+ } | {
5053
+ type: "Space";
5054
+ } | {
5055
+ value: string;
5056
+ type: "HighlightedText";
5057
+ highlight?: [number, number] | undefined;
5058
+ } | {
5059
+ value: string;
5060
+ type: "ColorText";
5061
+ color: string;
5062
+ highlight?: [number, number] | undefined;
5063
+ } | {
5064
+ value: string;
5065
+ type: "BoldText";
5066
+ highlight?: [number, number] | undefined;
5067
+ } | {
5068
+ length: number;
5069
+ type: "InlineInput";
5070
+ inputType: "string";
5071
+ name: string;
5072
+ answer?: string | number | undefined;
5073
+ } | {
5074
+ type: "InlineInput";
5075
+ inputType: "numeric";
5076
+ name: string;
5077
+ digits: number;
5078
+ answer?: string | number | undefined;
5079
+ } | {
5080
+ type: "Fraction";
5081
+ name: string;
5082
+ simplified: boolean;
5083
+ answer?: string | undefined;
5084
+ numerator?: number | undefined;
5085
+ denominator?: number | undefined;
5086
+ })[];
5087
+ }[];
5088
+ counter?: {
5089
+ type: "NumberLineCounter";
5090
+ min: number;
5091
+ max: number;
5092
+ name?: string | undefined;
5093
+ default?: number | undefined;
5094
+ } | undefined;
5095
+ minorTicks?: number | undefined;
5096
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5097
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5098
+ highlights?: {
5099
+ type: "NumberLineHighlight";
5100
+ from: number;
5101
+ to: number;
5102
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5103
+ label?: string | undefined;
5104
+ }[] | undefined;
5105
+ }, {
5106
+ type: "NumberLineBlock";
5107
+ min: number;
5108
+ max: number;
5109
+ positions: {
5110
+ value: number;
5111
+ type: "NumberLinePosition";
5112
+ inlines: ({
5113
+ value: string;
5114
+ type: "FreeText";
5115
+ } | {
5116
+ type: "Space";
5117
+ } | {
5118
+ value: string;
5119
+ type: "HighlightedText";
5120
+ highlight?: [number, number] | undefined;
5121
+ } | {
5122
+ value: string;
5123
+ type: "ColorText";
5124
+ color: string;
5125
+ highlight?: [number, number] | undefined;
5126
+ } | {
5127
+ value: string;
5128
+ type: "BoldText";
5129
+ highlight?: [number, number] | undefined;
5130
+ } | {
5131
+ length: number;
5132
+ type: "InlineInput";
5133
+ inputType: "string";
5134
+ name: string;
5135
+ answer?: string | number | undefined;
5136
+ } | {
5137
+ type: "InlineInput";
5138
+ inputType: "numeric";
5139
+ name: string;
5140
+ digits: number;
5141
+ answer?: string | number | undefined;
5142
+ } | {
5143
+ type: "Fraction";
5144
+ name: string;
5145
+ answer?: string | undefined;
5146
+ numerator?: number | undefined;
5147
+ denominator?: number | undefined;
5148
+ simplified?: boolean | undefined;
5149
+ })[];
5150
+ }[];
5151
+ counter?: {
5152
+ type: "NumberLineCounter";
5153
+ min: number;
5154
+ max: number;
5155
+ name?: string | undefined;
5156
+ default?: number | undefined;
5157
+ } | undefined;
5158
+ step?: number | undefined;
5159
+ minorTicks?: number | undefined;
5160
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5161
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5162
+ highlights?: {
5163
+ type: "NumberLineHighlight";
5164
+ from: number;
5165
+ to: number;
5166
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5167
+ label?: string | undefined;
5168
+ }[] | undefined;
5169
+ }>, {
5170
+ type: "NumberLineBlock";
5171
+ min: number;
5172
+ max: number;
5173
+ step: number;
5174
+ positions: {
5175
+ value: number;
5176
+ type: "NumberLinePosition";
5177
+ inlines: ({
5178
+ value: string;
5179
+ type: "FreeText";
5180
+ } | {
5181
+ type: "Space";
5182
+ } | {
5183
+ value: string;
5184
+ type: "HighlightedText";
5185
+ highlight?: [number, number] | undefined;
5186
+ } | {
5187
+ value: string;
5188
+ type: "ColorText";
5189
+ color: string;
5190
+ highlight?: [number, number] | undefined;
5191
+ } | {
5192
+ value: string;
5193
+ type: "BoldText";
5194
+ highlight?: [number, number] | undefined;
5195
+ } | {
5196
+ length: number;
5197
+ type: "InlineInput";
5198
+ inputType: "string";
5199
+ name: string;
5200
+ answer?: string | number | undefined;
5201
+ } | {
5202
+ type: "InlineInput";
5203
+ inputType: "numeric";
5204
+ name: string;
5205
+ digits: number;
5206
+ answer?: string | number | undefined;
5207
+ } | {
5208
+ type: "Fraction";
5209
+ name: string;
5210
+ simplified: boolean;
5211
+ answer?: string | undefined;
5212
+ numerator?: number | undefined;
5213
+ denominator?: number | undefined;
5214
+ })[];
5215
+ }[];
5216
+ counter?: {
5217
+ type: "NumberLineCounter";
5218
+ min: number;
5219
+ max: number;
5220
+ name?: string | undefined;
5221
+ default?: number | undefined;
5222
+ } | undefined;
5223
+ minorTicks?: number | undefined;
5224
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5225
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5226
+ highlights?: {
5227
+ type: "NumberLineHighlight";
5228
+ from: number;
5229
+ to: number;
5230
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5231
+ label?: string | undefined;
5232
+ }[] | undefined;
5233
+ }, {
5234
+ type: "NumberLineBlock";
5235
+ min: number;
5236
+ max: number;
5237
+ positions: {
5238
+ value: number;
5239
+ type: "NumberLinePosition";
5240
+ inlines: ({
5241
+ value: string;
5242
+ type: "FreeText";
5243
+ } | {
5244
+ type: "Space";
5245
+ } | {
5246
+ value: string;
5247
+ type: "HighlightedText";
5248
+ highlight?: [number, number] | undefined;
5249
+ } | {
5250
+ value: string;
5251
+ type: "ColorText";
5252
+ color: string;
5253
+ highlight?: [number, number] | undefined;
5254
+ } | {
5255
+ value: string;
5256
+ type: "BoldText";
5257
+ highlight?: [number, number] | undefined;
5258
+ } | {
5259
+ length: number;
5260
+ type: "InlineInput";
5261
+ inputType: "string";
5262
+ name: string;
5263
+ answer?: string | number | undefined;
5264
+ } | {
5265
+ type: "InlineInput";
5266
+ inputType: "numeric";
5267
+ name: string;
5268
+ digits: number;
5269
+ answer?: string | number | undefined;
5270
+ } | {
5271
+ type: "Fraction";
5272
+ name: string;
5273
+ answer?: string | undefined;
5274
+ numerator?: number | undefined;
5275
+ denominator?: number | undefined;
5276
+ simplified?: boolean | undefined;
5277
+ })[];
5278
+ }[];
5279
+ counter?: {
5280
+ type: "NumberLineCounter";
5281
+ min: number;
5282
+ max: number;
5283
+ name?: string | undefined;
5284
+ default?: number | undefined;
5285
+ } | undefined;
5286
+ step?: number | undefined;
5287
+ minorTicks?: number | undefined;
5288
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5289
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5290
+ highlights?: {
5291
+ type: "NumberLineHighlight";
5292
+ from: number;
5293
+ to: number;
5294
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5295
+ label?: string | undefined;
5296
+ }[] | undefined;
5297
+ }>;
5298
+
5299
+ export declare type NumberLineCounter = z.infer<typeof NumberLineCounterSchema>;
5300
+
5301
+ export declare type NumberLineCounterItem = z.infer<typeof NumberLineCounterItemSchema>;
5302
+
5303
+ export declare const NumberLineCounterItemSchema: z.ZodObject<{
5304
+ id: z.ZodString;
5305
+ type: z.ZodLiteral<"number-line-counter">;
5306
+ min: z.ZodNumber;
5307
+ max: z.ZodNumber;
5308
+ default: z.ZodOptional<z.ZodNumber>;
5309
+ name: z.ZodOptional<z.ZodString>;
5310
+ }, "strip", z.ZodTypeAny, {
5311
+ type: "number-line-counter";
5312
+ min: number;
5313
+ max: number;
5314
+ id: string;
5315
+ name?: string | undefined;
5316
+ default?: number | undefined;
5317
+ }, {
5318
+ type: "number-line-counter";
5319
+ min: number;
5320
+ max: number;
5321
+ id: string;
5322
+ name?: string | undefined;
5323
+ default?: number | undefined;
5324
+ }>;
5325
+
5326
+ /**
5327
+ * Counter node — dynamic subdivision control embedded in a number line.
5328
+ * The number line step is recomputed as: (max - min) / counter_value.
5329
+ *
5330
+ * Invariant: min >= 1 (a subdivision of 0 is meaningless).
5331
+ * The `default` fallback lives only in createNumberLineCounter, not here,
5332
+ * to avoid Zod transform side-effects on the parsed shape.
5333
+ */
5334
+ declare const NumberLineCounterSchema: z.ZodEffects<z.ZodObject<{
5335
+ type: z.ZodLiteral<"NumberLineCounter">;
5336
+ min: z.ZodNumber;
5337
+ max: z.ZodNumber;
5338
+ default: z.ZodOptional<z.ZodNumber>;
5339
+ name: z.ZodOptional<z.ZodString>;
5340
+ }, "strip", z.ZodTypeAny, {
5341
+ type: "NumberLineCounter";
5342
+ min: number;
5343
+ max: number;
5344
+ name?: string | undefined;
5345
+ default?: number | undefined;
5346
+ }, {
5347
+ type: "NumberLineCounter";
5348
+ min: number;
5349
+ max: number;
5350
+ name?: string | undefined;
5351
+ default?: number | undefined;
5352
+ }>, {
5353
+ type: "NumberLineCounter";
5354
+ min: number;
5355
+ max: number;
5356
+ name?: string | undefined;
5357
+ default?: number | undefined;
5358
+ }, {
5359
+ type: "NumberLineCounter";
5360
+ min: number;
5361
+ max: number;
5362
+ name?: string | undefined;
5363
+ default?: number | undefined;
5364
+ }>;
5365
+
5366
+ export declare type NumberLineHighlight = z.infer<typeof NumberLineHighlightSchema>;
5367
+
5368
+ export declare type NumberLineHighlightItem = z.infer<typeof NumberLineHighlightItemSchema>;
5369
+
5370
+ export declare const NumberLineHighlightItemSchema: z.ZodObject<{
5371
+ id: z.ZodString;
5372
+ type: z.ZodLiteral<"number-line-highlight">;
5373
+ from: z.ZodNumber;
5374
+ to: z.ZodNumber;
5375
+ color: z.ZodOptional<z.ZodEnum<["blue", "red", "green", "orange", "purple", "yellow"]>>;
5376
+ label: z.ZodOptional<z.ZodString>;
5377
+ }, "strip", z.ZodTypeAny, {
5378
+ type: "number-line-highlight";
5379
+ from: number;
5380
+ to: number;
5381
+ id: string;
5382
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5383
+ label?: string | undefined;
5384
+ }, {
5385
+ type: "number-line-highlight";
5386
+ from: number;
5387
+ to: number;
5388
+ id: string;
5389
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5390
+ label?: string | undefined;
5391
+ }>;
5392
+
5393
+ /**
5394
+ * A highlighted range on the number line axis.
5395
+ *
5396
+ * `color` is constrained to the semantic set in NUMBER_LINE_HIGHLIGHT_COLORS
5397
+ * so renderers can safely map values to design tokens.
5398
+ */
5399
+ declare const NumberLineHighlightSchema: z.ZodEffects<z.ZodObject<{
5400
+ type: z.ZodLiteral<"NumberLineHighlight">;
5401
+ from: z.ZodNumber;
5402
+ to: z.ZodNumber;
5403
+ color: z.ZodOptional<z.ZodEnum<["blue", "red", "green", "orange", "purple", "yellow"]>>;
5404
+ label: z.ZodOptional<z.ZodString>;
5405
+ }, "strip", z.ZodTypeAny, {
5406
+ type: "NumberLineHighlight";
5407
+ from: number;
5408
+ to: number;
5409
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5410
+ label?: string | undefined;
5411
+ }, {
5412
+ type: "NumberLineHighlight";
5413
+ from: number;
5414
+ to: number;
5415
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5416
+ label?: string | undefined;
5417
+ }>, {
5418
+ type: "NumberLineHighlight";
5419
+ from: number;
5420
+ to: number;
5421
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5422
+ label?: string | undefined;
5423
+ }, {
5424
+ type: "NumberLineHighlight";
5425
+ from: number;
5426
+ to: number;
5427
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5428
+ label?: string | undefined;
5429
+ }>;
5430
+
5431
+ export declare type NumberLineItem = z.infer<typeof NumberLineItemSchema>;
5432
+
5433
+ export declare const NumberLineItemSchema: z.ZodObject<{
5434
+ id: z.ZodString;
5435
+ type: z.ZodLiteral<"number-line">;
5436
+ min: z.ZodNumber;
5437
+ max: z.ZodNumber;
5438
+ step: z.ZodNumber;
5439
+ minorTicks: z.ZodOptional<z.ZodNumber>;
5440
+ style: z.ZodOptional<z.ZodEnum<["arrow-right", "arrow-left", "arrow-both", "line"]>>;
5441
+ labelVisibility: z.ZodOptional<z.ZodEnum<["all", "extremes", "min-only", "max-only", "none"]>>;
5442
+ counter: z.ZodOptional<z.ZodObject<{
5443
+ id: z.ZodString;
5444
+ type: z.ZodLiteral<"number-line-counter">;
5445
+ min: z.ZodNumber;
5446
+ max: z.ZodNumber;
5447
+ default: z.ZodOptional<z.ZodNumber>;
5448
+ name: z.ZodOptional<z.ZodString>;
5449
+ }, "strip", z.ZodTypeAny, {
5450
+ type: "number-line-counter";
5451
+ min: number;
5452
+ max: number;
5453
+ id: string;
5454
+ name?: string | undefined;
5455
+ default?: number | undefined;
5456
+ }, {
5457
+ type: "number-line-counter";
5458
+ min: number;
5459
+ max: number;
5460
+ id: string;
5461
+ name?: string | undefined;
5462
+ default?: number | undefined;
5463
+ }>>;
5464
+ highlights: z.ZodOptional<z.ZodArray<z.ZodObject<{
5465
+ id: z.ZodString;
5466
+ type: z.ZodLiteral<"number-line-highlight">;
5467
+ from: z.ZodNumber;
5468
+ to: z.ZodNumber;
5469
+ color: z.ZodOptional<z.ZodEnum<["blue", "red", "green", "orange", "purple", "yellow"]>>;
5470
+ label: z.ZodOptional<z.ZodString>;
5471
+ }, "strip", z.ZodTypeAny, {
5472
+ type: "number-line-highlight";
5473
+ from: number;
5474
+ to: number;
5475
+ id: string;
5476
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5477
+ label?: string | undefined;
5478
+ }, {
5479
+ type: "number-line-highlight";
5480
+ from: number;
5481
+ to: number;
5482
+ id: string;
5483
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5484
+ label?: string | undefined;
5485
+ }>, "many">>;
5486
+ positions: z.ZodArray<z.ZodObject<{
5487
+ id: z.ZodString;
5488
+ type: z.ZodLiteral<"number-line-position">;
5489
+ value: z.ZodNumber;
5490
+ content: z.ZodArray<z.ZodType<any, z.ZodTypeDef, any>, "many">;
5491
+ }, "strip", z.ZodTypeAny, {
5492
+ value: number;
5493
+ type: "number-line-position";
5494
+ id: string;
5495
+ content: any[];
5496
+ }, {
5497
+ value: number;
5498
+ type: "number-line-position";
5499
+ id: string;
5500
+ content: any[];
5501
+ }>, "many">;
5502
+ }, "strip", z.ZodTypeAny, {
5503
+ type: "number-line";
5504
+ min: number;
5505
+ max: number;
5506
+ step: number;
5507
+ positions: {
5508
+ value: number;
5509
+ type: "number-line-position";
5510
+ id: string;
5511
+ content: any[];
5512
+ }[];
5513
+ id: string;
5514
+ counter?: {
5515
+ type: "number-line-counter";
5516
+ min: number;
5517
+ max: number;
5518
+ id: string;
5519
+ name?: string | undefined;
5520
+ default?: number | undefined;
5521
+ } | undefined;
5522
+ minorTicks?: number | undefined;
5523
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5524
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5525
+ highlights?: {
5526
+ type: "number-line-highlight";
5527
+ from: number;
5528
+ to: number;
5529
+ id: string;
5530
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5531
+ label?: string | undefined;
5532
+ }[] | undefined;
5533
+ }, {
5534
+ type: "number-line";
5535
+ min: number;
5536
+ max: number;
5537
+ step: number;
5538
+ positions: {
5539
+ value: number;
5540
+ type: "number-line-position";
5541
+ id: string;
5542
+ content: any[];
5543
+ }[];
5544
+ id: string;
5545
+ counter?: {
5546
+ type: "number-line-counter";
5547
+ min: number;
5548
+ max: number;
5549
+ id: string;
5550
+ name?: string | undefined;
5551
+ default?: number | undefined;
5552
+ } | undefined;
5553
+ minorTicks?: number | undefined;
5554
+ style?: "arrow-right" | "arrow-left" | "arrow-both" | "line" | undefined;
5555
+ labelVisibility?: "all" | "extremes" | "min-only" | "max-only" | "none" | undefined;
5556
+ highlights?: {
5557
+ type: "number-line-highlight";
5558
+ from: number;
5559
+ to: number;
5560
+ id: string;
5561
+ color?: "blue" | "red" | "green" | "orange" | "purple" | "yellow" | undefined;
5562
+ label?: string | undefined;
5563
+ }[] | undefined;
5564
+ }>;
5565
+
5566
+ export declare type NumberLinePosition = z.infer<typeof NumberLinePositionSchema>;
5567
+
5568
+ export declare type NumberLinePositionItem = z.infer<typeof NumberLinePositionItemSchema>;
5569
+
5570
+ export declare const NumberLinePositionItemSchema: z.ZodObject<{
5571
+ id: z.ZodString;
5572
+ type: z.ZodLiteral<"number-line-position">;
5573
+ value: z.ZodNumber;
5574
+ content: z.ZodArray<z.ZodType<any, z.ZodTypeDef, any>, "many">;
5575
+ }, "strip", z.ZodTypeAny, {
5576
+ value: number;
5577
+ type: "number-line-position";
5578
+ id: string;
5579
+ content: any[];
5580
+ }, {
5581
+ value: number;
5582
+ type: "number-line-position";
5583
+ id: string;
5584
+ content: any[];
5585
+ }>;
5586
+
5587
+ /**
5588
+ * A single position marker on the number line.
5589
+ * Contains at least one inline element (text, input, etc.).
5590
+ *
5591
+ * @example
5592
+ * {
5593
+ * type: "NumberLinePosition",
5594
+ * value: 20,
5595
+ * inlines: [{ type: "InlineInput", name: "a", digits: 3 }]
5596
+ * }
5597
+ */
5598
+ declare const NumberLinePositionSchema: z.ZodObject<{
5599
+ type: z.ZodLiteral<"NumberLinePosition">;
5600
+ value: z.ZodNumber;
5601
+ inlines: z.ZodArray<z.ZodUnion<[z.ZodObject<{
5602
+ type: z.ZodLiteral<"FreeText">;
5603
+ value: z.ZodString;
5604
+ }, "strip", z.ZodTypeAny, {
5605
+ value: string;
5606
+ type: "FreeText";
5607
+ }, {
5608
+ value: string;
5609
+ type: "FreeText";
5610
+ }>, z.ZodObject<{
5611
+ type: z.ZodLiteral<"Space">;
5612
+ }, "strip", z.ZodTypeAny, {
5613
+ type: "Space";
5614
+ }, {
5615
+ type: "Space";
5616
+ }>, z.ZodObject<{
5617
+ type: z.ZodLiteral<"HighlightedText">;
5618
+ value: z.ZodString;
5619
+ highlight: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
5620
+ }, "strip", z.ZodTypeAny, {
5621
+ value: string;
5622
+ type: "HighlightedText";
5623
+ highlight?: [number, number] | undefined;
5624
+ }, {
5625
+ value: string;
5626
+ type: "HighlightedText";
5627
+ highlight?: [number, number] | undefined;
5628
+ }>, z.ZodObject<{
5629
+ type: z.ZodLiteral<"ColorText">;
5630
+ value: z.ZodString;
5631
+ color: z.ZodString;
5632
+ highlight: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
5633
+ }, "strip", z.ZodTypeAny, {
5634
+ value: string;
5635
+ type: "ColorText";
5636
+ color: string;
5637
+ highlight?: [number, number] | undefined;
5638
+ }, {
5639
+ value: string;
5640
+ type: "ColorText";
5641
+ color: string;
5642
+ highlight?: [number, number] | undefined;
5643
+ }>, z.ZodObject<{
5644
+ type: z.ZodLiteral<"BoldText">;
5645
+ value: z.ZodString;
5646
+ highlight: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
5647
+ }, "strip", z.ZodTypeAny, {
5648
+ value: string;
5649
+ type: "BoldText";
5650
+ highlight?: [number, number] | undefined;
5651
+ }, {
5652
+ value: string;
5653
+ type: "BoldText";
5654
+ highlight?: [number, number] | undefined;
5655
+ }>, z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{
5656
+ type: z.ZodLiteral<"InlineInput">;
5657
+ name: z.ZodString;
5658
+ inputType: z.ZodLiteral<"string">;
5659
+ length: z.ZodNumber;
5660
+ answer: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
5661
+ }, "strip", z.ZodTypeAny, {
5662
+ length: number;
5663
+ type: "InlineInput";
5664
+ inputType: "string";
5665
+ name: string;
5666
+ answer?: string | number | undefined;
5667
+ }, {
5668
+ length: number;
5669
+ type: "InlineInput";
5670
+ inputType: "string";
5671
+ name: string;
5672
+ answer?: string | number | undefined;
5673
+ }>, z.ZodObject<{
5674
+ type: z.ZodLiteral<"InlineInput">;
5675
+ name: z.ZodString;
5676
+ inputType: z.ZodLiteral<"numeric">;
5677
+ digits: z.ZodNumber;
5678
+ answer: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
5679
+ }, "strip", z.ZodTypeAny, {
5680
+ type: "InlineInput";
5681
+ inputType: "numeric";
5682
+ name: string;
5683
+ digits: number;
5684
+ answer?: string | number | undefined;
5685
+ }, {
5686
+ type: "InlineInput";
5687
+ inputType: "numeric";
5688
+ name: string;
5689
+ digits: number;
5690
+ answer?: string | number | undefined;
5691
+ }>]>, z.ZodObject<{
5692
+ type: z.ZodLiteral<"Fraction">;
5693
+ name: z.ZodString;
5694
+ numerator: z.ZodOptional<z.ZodNumber>;
5695
+ denominator: z.ZodOptional<z.ZodNumber>;
5696
+ answer: z.ZodOptional<z.ZodString>;
5697
+ simplified: z.ZodDefault<z.ZodBoolean>;
5698
+ }, "strip", z.ZodTypeAny, {
5699
+ type: "Fraction";
5700
+ name: string;
5701
+ simplified: boolean;
5702
+ answer?: string | undefined;
5703
+ numerator?: number | undefined;
5704
+ denominator?: number | undefined;
5705
+ }, {
5706
+ type: "Fraction";
5707
+ name: string;
5708
+ answer?: string | undefined;
5709
+ numerator?: number | undefined;
5710
+ denominator?: number | undefined;
5711
+ simplified?: boolean | undefined;
5712
+ }>]>, "many">;
5713
+ }, "strip", z.ZodTypeAny, {
5714
+ value: number;
5715
+ type: "NumberLinePosition";
5716
+ inlines: ({
5717
+ value: string;
5718
+ type: "FreeText";
5719
+ } | {
5720
+ type: "Space";
5721
+ } | {
5722
+ value: string;
5723
+ type: "HighlightedText";
5724
+ highlight?: [number, number] | undefined;
5725
+ } | {
5726
+ value: string;
5727
+ type: "ColorText";
5728
+ color: string;
5729
+ highlight?: [number, number] | undefined;
5730
+ } | {
5731
+ value: string;
5732
+ type: "BoldText";
5733
+ highlight?: [number, number] | undefined;
5734
+ } | {
5735
+ length: number;
5736
+ type: "InlineInput";
5737
+ inputType: "string";
5738
+ name: string;
5739
+ answer?: string | number | undefined;
5740
+ } | {
5741
+ type: "InlineInput";
5742
+ inputType: "numeric";
5743
+ name: string;
5744
+ digits: number;
5745
+ answer?: string | number | undefined;
5746
+ } | {
5747
+ type: "Fraction";
5748
+ name: string;
5749
+ simplified: boolean;
5750
+ answer?: string | undefined;
5751
+ numerator?: number | undefined;
5752
+ denominator?: number | undefined;
5753
+ })[];
5754
+ }, {
5755
+ value: number;
5756
+ type: "NumberLinePosition";
5757
+ inlines: ({
5758
+ value: string;
5759
+ type: "FreeText";
5760
+ } | {
5761
+ type: "Space";
5762
+ } | {
5763
+ value: string;
5764
+ type: "HighlightedText";
5765
+ highlight?: [number, number] | undefined;
5766
+ } | {
5767
+ value: string;
5768
+ type: "ColorText";
5769
+ color: string;
5770
+ highlight?: [number, number] | undefined;
5771
+ } | {
5772
+ value: string;
5773
+ type: "BoldText";
5774
+ highlight?: [number, number] | undefined;
5775
+ } | {
5776
+ length: number;
5777
+ type: "InlineInput";
5778
+ inputType: "string";
5779
+ name: string;
5780
+ answer?: string | number | undefined;
5781
+ } | {
5782
+ type: "InlineInput";
5783
+ inputType: "numeric";
5784
+ name: string;
5785
+ digits: number;
5786
+ answer?: string | number | undefined;
5787
+ } | {
5788
+ type: "Fraction";
5789
+ name: string;
5790
+ answer?: string | undefined;
5791
+ numerator?: number | undefined;
5792
+ denominator?: number | undefined;
5793
+ simplified?: boolean | undefined;
5794
+ })[];
5795
+ }>;
5796
+
5797
+ export declare type NumericKeypadJSON = z.infer<typeof NumericKeypadJSONSchema>;
5798
+
5799
+ export declare const NumericKeypadJSONSchema: z.ZodObject<{
5800
+ type: z.ZodLiteral<"numeric-keypad">;
5801
+ includeOperators: z.ZodOptional<z.ZodBoolean>;
5802
+ includeDecimal: z.ZodOptional<z.ZodBoolean>;
5803
+ }, "strip", z.ZodTypeAny, {
5804
+ type: "numeric-keypad";
5805
+ includeOperators?: boolean | undefined;
5806
+ includeDecimal?: boolean | undefined;
5807
+ }, {
5808
+ type: "numeric-keypad";
3693
5809
  includeOperators?: boolean | undefined;
3694
5810
  includeDecimal?: boolean | undefined;
3695
5811
  }>;
@@ -3756,6 +5872,11 @@ export declare class ParseError extends EngineError {
3756
5872
  constructor(errors: IRecognitionException[]);
3757
5873
  }
3758
5874
 
5875
+ export declare function parseFractionKey(key: string): {
5876
+ widgetId: string;
5877
+ part: FractionPart;
5878
+ } | null;
5879
+
3759
5880
  /**
3760
5881
  * Parse DSL tokens into CST (safe version - returns errors instead of throwing)
3761
5882
  */
@@ -4028,7 +6149,28 @@ declare const TableBlockSchema: z.ZodObject<{
4028
6149
  name: string;
4029
6150
  digits: number;
4030
6151
  answer?: string | number | undefined;
4031
- }>]>]>, "many">;
6152
+ }>]>, z.ZodObject<{
6153
+ type: z.ZodLiteral<"Fraction">;
6154
+ name: z.ZodString;
6155
+ numerator: z.ZodOptional<z.ZodNumber>;
6156
+ denominator: z.ZodOptional<z.ZodNumber>;
6157
+ answer: z.ZodOptional<z.ZodString>;
6158
+ simplified: z.ZodDefault<z.ZodBoolean>;
6159
+ }, "strip", z.ZodTypeAny, {
6160
+ type: "Fraction";
6161
+ name: string;
6162
+ simplified: boolean;
6163
+ answer?: string | undefined;
6164
+ numerator?: number | undefined;
6165
+ denominator?: number | undefined;
6166
+ }, {
6167
+ type: "Fraction";
6168
+ name: string;
6169
+ answer?: string | undefined;
6170
+ numerator?: number | undefined;
6171
+ denominator?: number | undefined;
6172
+ simplified?: boolean | undefined;
6173
+ }>]>, "many">;
4032
6174
  }, "strip", z.ZodTypeAny, {
4033
6175
  type: "TableCell";
4034
6176
  inlines: ({
@@ -4061,6 +6203,13 @@ declare const TableBlockSchema: z.ZodObject<{
4061
6203
  name: string;
4062
6204
  digits: number;
4063
6205
  answer?: string | number | undefined;
6206
+ } | {
6207
+ type: "Fraction";
6208
+ name: string;
6209
+ simplified: boolean;
6210
+ answer?: string | undefined;
6211
+ numerator?: number | undefined;
6212
+ denominator?: number | undefined;
4064
6213
  })[];
4065
6214
  colspan?: number | undefined;
4066
6215
  }, {
@@ -4095,6 +6244,13 @@ declare const TableBlockSchema: z.ZodObject<{
4095
6244
  name: string;
4096
6245
  digits: number;
4097
6246
  answer?: string | number | undefined;
6247
+ } | {
6248
+ type: "Fraction";
6249
+ name: string;
6250
+ answer?: string | undefined;
6251
+ numerator?: number | undefined;
6252
+ denominator?: number | undefined;
6253
+ simplified?: boolean | undefined;
4098
6254
  })[];
4099
6255
  colspan?: number | undefined;
4100
6256
  }>, "many">;
@@ -4132,6 +6288,13 @@ declare const TableBlockSchema: z.ZodObject<{
4132
6288
  name: string;
4133
6289
  digits: number;
4134
6290
  answer?: string | number | undefined;
6291
+ } | {
6292
+ type: "Fraction";
6293
+ name: string;
6294
+ simplified: boolean;
6295
+ answer?: string | undefined;
6296
+ numerator?: number | undefined;
6297
+ denominator?: number | undefined;
4135
6298
  })[];
4136
6299
  colspan?: number | undefined;
4137
6300
  }[];
@@ -4169,6 +6332,13 @@ declare const TableBlockSchema: z.ZodObject<{
4169
6332
  name: string;
4170
6333
  digits: number;
4171
6334
  answer?: string | number | undefined;
6335
+ } | {
6336
+ type: "Fraction";
6337
+ name: string;
6338
+ answer?: string | undefined;
6339
+ numerator?: number | undefined;
6340
+ denominator?: number | undefined;
6341
+ simplified?: boolean | undefined;
4172
6342
  })[];
4173
6343
  colspan?: number | undefined;
4174
6344
  }[];
@@ -4210,6 +6380,13 @@ declare const TableBlockSchema: z.ZodObject<{
4210
6380
  name: string;
4211
6381
  digits: number;
4212
6382
  answer?: string | number | undefined;
6383
+ } | {
6384
+ type: "Fraction";
6385
+ name: string;
6386
+ simplified: boolean;
6387
+ answer?: string | undefined;
6388
+ numerator?: number | undefined;
6389
+ denominator?: number | undefined;
4213
6390
  })[];
4214
6391
  colspan?: number | undefined;
4215
6392
  }[];
@@ -4251,6 +6428,13 @@ declare const TableBlockSchema: z.ZodObject<{
4251
6428
  name: string;
4252
6429
  digits: number;
4253
6430
  answer?: string | number | undefined;
6431
+ } | {
6432
+ type: "Fraction";
6433
+ name: string;
6434
+ answer?: string | undefined;
6435
+ numerator?: number | undefined;
6436
+ denominator?: number | undefined;
6437
+ simplified?: boolean | undefined;
4254
6438
  })[];
4255
6439
  colspan?: number | undefined;
4256
6440
  }[];
@@ -4371,7 +6555,28 @@ declare const TableCellSchema: z.ZodObject<{
4371
6555
  name: string;
4372
6556
  digits: number;
4373
6557
  answer?: string | number | undefined;
4374
- }>]>]>, "many">;
6558
+ }>]>, z.ZodObject<{
6559
+ type: z.ZodLiteral<"Fraction">;
6560
+ name: z.ZodString;
6561
+ numerator: z.ZodOptional<z.ZodNumber>;
6562
+ denominator: z.ZodOptional<z.ZodNumber>;
6563
+ answer: z.ZodOptional<z.ZodString>;
6564
+ simplified: z.ZodDefault<z.ZodBoolean>;
6565
+ }, "strip", z.ZodTypeAny, {
6566
+ type: "Fraction";
6567
+ name: string;
6568
+ simplified: boolean;
6569
+ answer?: string | undefined;
6570
+ numerator?: number | undefined;
6571
+ denominator?: number | undefined;
6572
+ }, {
6573
+ type: "Fraction";
6574
+ name: string;
6575
+ answer?: string | undefined;
6576
+ numerator?: number | undefined;
6577
+ denominator?: number | undefined;
6578
+ simplified?: boolean | undefined;
6579
+ }>]>, "many">;
4375
6580
  }, "strip", z.ZodTypeAny, {
4376
6581
  type: "TableCell";
4377
6582
  inlines: ({
@@ -4404,6 +6609,13 @@ declare const TableCellSchema: z.ZodObject<{
4404
6609
  name: string;
4405
6610
  digits: number;
4406
6611
  answer?: string | number | undefined;
6612
+ } | {
6613
+ type: "Fraction";
6614
+ name: string;
6615
+ simplified: boolean;
6616
+ answer?: string | undefined;
6617
+ numerator?: number | undefined;
6618
+ denominator?: number | undefined;
4407
6619
  })[];
4408
6620
  colspan?: number | undefined;
4409
6621
  }, {
@@ -4438,6 +6650,13 @@ declare const TableCellSchema: z.ZodObject<{
4438
6650
  name: string;
4439
6651
  digits: number;
4440
6652
  answer?: string | number | undefined;
6653
+ } | {
6654
+ type: "Fraction";
6655
+ name: string;
6656
+ answer?: string | undefined;
6657
+ numerator?: number | undefined;
6658
+ denominator?: number | undefined;
6659
+ simplified?: boolean | undefined;
4441
6660
  })[];
4442
6661
  colspan?: number | undefined;
4443
6662
  }>;
@@ -4654,7 +6873,28 @@ declare const TableRowSchema: z.ZodObject<{
4654
6873
  name: string;
4655
6874
  digits: number;
4656
6875
  answer?: string | number | undefined;
4657
- }>]>]>, "many">;
6876
+ }>]>, z.ZodObject<{
6877
+ type: z.ZodLiteral<"Fraction">;
6878
+ name: z.ZodString;
6879
+ numerator: z.ZodOptional<z.ZodNumber>;
6880
+ denominator: z.ZodOptional<z.ZodNumber>;
6881
+ answer: z.ZodOptional<z.ZodString>;
6882
+ simplified: z.ZodDefault<z.ZodBoolean>;
6883
+ }, "strip", z.ZodTypeAny, {
6884
+ type: "Fraction";
6885
+ name: string;
6886
+ simplified: boolean;
6887
+ answer?: string | undefined;
6888
+ numerator?: number | undefined;
6889
+ denominator?: number | undefined;
6890
+ }, {
6891
+ type: "Fraction";
6892
+ name: string;
6893
+ answer?: string | undefined;
6894
+ numerator?: number | undefined;
6895
+ denominator?: number | undefined;
6896
+ simplified?: boolean | undefined;
6897
+ }>]>, "many">;
4658
6898
  }, "strip", z.ZodTypeAny, {
4659
6899
  type: "TableCell";
4660
6900
  inlines: ({
@@ -4687,6 +6927,13 @@ declare const TableRowSchema: z.ZodObject<{
4687
6927
  name: string;
4688
6928
  digits: number;
4689
6929
  answer?: string | number | undefined;
6930
+ } | {
6931
+ type: "Fraction";
6932
+ name: string;
6933
+ simplified: boolean;
6934
+ answer?: string | undefined;
6935
+ numerator?: number | undefined;
6936
+ denominator?: number | undefined;
4690
6937
  })[];
4691
6938
  colspan?: number | undefined;
4692
6939
  }, {
@@ -4721,6 +6968,13 @@ declare const TableRowSchema: z.ZodObject<{
4721
6968
  name: string;
4722
6969
  digits: number;
4723
6970
  answer?: string | number | undefined;
6971
+ } | {
6972
+ type: "Fraction";
6973
+ name: string;
6974
+ answer?: string | undefined;
6975
+ numerator?: number | undefined;
6976
+ denominator?: number | undefined;
6977
+ simplified?: boolean | undefined;
4724
6978
  })[];
4725
6979
  colspan?: number | undefined;
4726
6980
  }>, "many">;
@@ -4758,6 +7012,13 @@ declare const TableRowSchema: z.ZodObject<{
4758
7012
  name: string;
4759
7013
  digits: number;
4760
7014
  answer?: string | number | undefined;
7015
+ } | {
7016
+ type: "Fraction";
7017
+ name: string;
7018
+ simplified: boolean;
7019
+ answer?: string | undefined;
7020
+ numerator?: number | undefined;
7021
+ denominator?: number | undefined;
4761
7022
  })[];
4762
7023
  colspan?: number | undefined;
4763
7024
  }[];
@@ -4795,6 +7056,13 @@ declare const TableRowSchema: z.ZodObject<{
4795
7056
  name: string;
4796
7057
  digits: number;
4797
7058
  answer?: string | number | undefined;
7059
+ } | {
7060
+ type: "Fraction";
7061
+ name: string;
7062
+ answer?: string | undefined;
7063
+ numerator?: number | undefined;
7064
+ denominator?: number | undefined;
7065
+ simplified?: boolean | undefined;
4798
7066
  })[];
4799
7067
  colspan?: number | undefined;
4800
7068
  }[];
@@ -4986,6 +7254,11 @@ export declare function validateExerciseJSON(data: unknown): {
4986
7254
  type: "numeric-keypad";
4987
7255
  includeOperators?: boolean | undefined;
4988
7256
  includeDecimal?: boolean | undefined;
7257
+ } | {
7258
+ type: "fraction";
7259
+ numerator: number | null;
7260
+ denominator: number | null;
7261
+ simplified: boolean;
4989
7262
  }>;
4990
7263
  validation?: {
4991
7264
  mode: "simple" | "expression";
@@ -5039,6 +7312,11 @@ export declare function validateExerciseJSONSafe(data: unknown): z.SafeParseRetu
5039
7312
  type: "numeric-keypad";
5040
7313
  includeOperators?: boolean | undefined;
5041
7314
  includeDecimal?: boolean | undefined;
7315
+ } | {
7316
+ type: "fraction";
7317
+ numerator: number | null;
7318
+ denominator: number | null;
7319
+ simplified: boolean;
5042
7320
  }>;
5043
7321
  validation?: {
5044
7322
  mode: "simple" | "expression";
@@ -5074,6 +7352,11 @@ export declare function validateExerciseJSONSafe(data: unknown): z.SafeParseRetu
5074
7352
  type: "numeric-keypad";
5075
7353
  includeOperators?: boolean | undefined;
5076
7354
  includeDecimal?: boolean | undefined;
7355
+ } | {
7356
+ type: "fraction";
7357
+ numerator: number | null;
7358
+ denominator: number | null;
7359
+ simplified: boolean;
5077
7360
  }>;
5078
7361
  validation?: {
5079
7362
  mode: "simple" | "expression";
@@ -5143,6 +7426,11 @@ export declare function validateWidgetJSON(data: unknown): {
5143
7426
  type: "numeric-keypad";
5144
7427
  includeOperators?: boolean | undefined;
5145
7428
  includeDecimal?: boolean | undefined;
7429
+ } | {
7430
+ type: "fraction";
7431
+ numerator: number | null;
7432
+ denominator: number | null;
7433
+ simplified: boolean;
5146
7434
  };
5147
7435
 
5148
7436
  /**
@@ -5169,6 +7457,11 @@ export declare function validateWidgetJSONSafe(data: unknown): z.SafeParseReturn
5169
7457
  type: "numeric-keypad";
5170
7458
  includeOperators?: boolean | undefined;
5171
7459
  includeDecimal?: boolean | undefined;
7460
+ } | {
7461
+ type: "fraction";
7462
+ numerator: number | null;
7463
+ denominator: number | null;
7464
+ simplified: boolean;
5172
7465
  }, {
5173
7466
  length: number;
5174
7467
  type: "inline-input";
@@ -5187,6 +7480,11 @@ export declare function validateWidgetJSONSafe(data: unknown): z.SafeParseReturn
5187
7480
  type: "numeric-keypad";
5188
7481
  includeOperators?: boolean | undefined;
5189
7482
  includeDecimal?: boolean | undefined;
7483
+ } | {
7484
+ type: "fraction";
7485
+ numerator: number | null;
7486
+ denominator: number | null;
7487
+ simplified: boolean;
5190
7488
  }>;
5191
7489
 
5192
7490
  /**
@@ -5256,6 +7554,8 @@ export declare interface ValidationResult {
5256
7554
  error?: string;
5257
7555
  }
5258
7556
 
7557
+ declare type ValidationStatus = 'correct' | 'incorrect' | null;
7558
+
5259
7559
  export declare type WidgetJSON = z.infer<typeof WidgetJSONSchema>;
5260
7560
 
5261
7561
  export declare const WidgetJSONSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{
@@ -5312,6 +7612,21 @@ export declare const WidgetJSONSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"inpu
5312
7612
  type: "numeric-keypad";
5313
7613
  includeOperators?: boolean | undefined;
5314
7614
  includeDecimal?: boolean | undefined;
7615
+ }>, z.ZodObject<{
7616
+ type: z.ZodLiteral<"fraction">;
7617
+ numerator: z.ZodNullable<z.ZodNumber>;
7618
+ denominator: z.ZodNullable<z.ZodNumber>;
7619
+ simplified: z.ZodBoolean;
7620
+ }, "strip", z.ZodTypeAny, {
7621
+ type: "fraction";
7622
+ numerator: number | null;
7623
+ denominator: number | null;
7624
+ simplified: boolean;
7625
+ }, {
7626
+ type: "fraction";
7627
+ numerator: number | null;
7628
+ denominator: number | null;
7629
+ simplified: boolean;
5315
7630
  }>]>;
5316
7631
 
5317
7632
  export declare type WidgetRef = z.infer<typeof WidgetRefSchema>;
@@ -5341,7 +7656,10 @@ export declare interface WidgetRendererProps {
5341
7656
  widget: WidgetJSON;
5342
7657
  widgetId: string;
5343
7658
  value: string;
7659
+ values?: Record<string, string>;
5344
7660
  isDropped?: boolean;
7661
+ validationStatus?: ValidationStatus;
7662
+ droppedInputs?: Set<string>;
5345
7663
  onChange: (widgetId: string, value: string, fromDrop?: boolean, sourceOptionId?: string) => void;
5346
7664
  onInputFocus?: (widgetId: string) => void;
5347
7665
  onKeypadChange?: (value: string) => void;