@mathscan/math-exercise-engine 1.0.12 → 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 */
@@ -228,6 +230,13 @@ export declare function compileWithAST(dsl: string): {
228
230
  name: string;
229
231
  digits: number;
230
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;
231
240
  })[];
232
241
  } | {
233
242
  type: "NumberLineBlock";
@@ -267,6 +276,13 @@ export declare function compileWithAST(dsl: string): {
267
276
  name: string;
268
277
  digits: number;
269
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;
270
286
  })[];
271
287
  }[];
272
288
  counter?: {
@@ -323,6 +339,13 @@ export declare function compileWithAST(dsl: string): {
323
339
  name: string;
324
340
  digits: number;
325
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;
326
349
  })[];
327
350
  colspan?: number | undefined;
328
351
  }[];
@@ -373,6 +396,11 @@ export declare function compileWithAST(dsl: string): {
373
396
  type: "numeric-keypad";
374
397
  includeOperators?: boolean | undefined;
375
398
  includeDecimal?: boolean | undefined;
399
+ } | {
400
+ type: "fraction";
401
+ numerator: number | null;
402
+ denominator: number | null;
403
+ simplified: boolean;
376
404
  }>;
377
405
  validation?: {
378
406
  mode: "simple" | "expression";
@@ -484,7 +512,28 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
484
512
  name: string;
485
513
  digits: number;
486
514
  answer?: string | number | undefined;
487
- }>]>]>, "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">;
488
537
  }, "strip", z.ZodTypeAny, {
489
538
  type: "LineBlock";
490
539
  inlines: ({
@@ -517,6 +566,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
517
566
  name: string;
518
567
  digits: number;
519
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;
520
576
  })[];
521
577
  }, {
522
578
  type: "LineBlock";
@@ -550,6 +606,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
550
606
  name: string;
551
607
  digits: number;
552
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;
553
616
  })[];
554
617
  }>, z.ZodObject<{
555
618
  type: z.ZodLiteral<"TableBlock">;
@@ -649,7 +712,28 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
649
712
  name: string;
650
713
  digits: number;
651
714
  answer?: string | number | undefined;
652
- }>]>]>, "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">;
653
737
  }, "strip", z.ZodTypeAny, {
654
738
  type: "TableCell";
655
739
  inlines: ({
@@ -682,6 +766,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
682
766
  name: string;
683
767
  digits: number;
684
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;
685
776
  })[];
686
777
  colspan?: number | undefined;
687
778
  }, {
@@ -716,6 +807,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
716
807
  name: string;
717
808
  digits: number;
718
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;
719
817
  })[];
720
818
  colspan?: number | undefined;
721
819
  }>, "many">;
@@ -753,6 +851,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
753
851
  name: string;
754
852
  digits: number;
755
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;
756
861
  })[];
757
862
  colspan?: number | undefined;
758
863
  }[];
@@ -790,6 +895,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
790
895
  name: string;
791
896
  digits: number;
792
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;
793
905
  })[];
794
906
  colspan?: number | undefined;
795
907
  }[];
@@ -831,6 +943,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
831
943
  name: string;
832
944
  digits: number;
833
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;
834
953
  })[];
835
954
  colspan?: number | undefined;
836
955
  }[];
@@ -872,6 +991,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
872
991
  name: string;
873
992
  digits: number;
874
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;
875
1001
  })[];
876
1002
  colspan?: number | undefined;
877
1003
  }[];
@@ -1054,7 +1180,28 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1054
1180
  name: string;
1055
1181
  digits: number;
1056
1182
  answer?: string | number | undefined;
1057
- }>]>]>, "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">;
1058
1205
  }, "strip", z.ZodTypeAny, {
1059
1206
  value: number;
1060
1207
  type: "NumberLinePosition";
@@ -1088,6 +1235,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1088
1235
  name: string;
1089
1236
  digits: number;
1090
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;
1091
1245
  })[];
1092
1246
  }, {
1093
1247
  value: number;
@@ -1122,6 +1276,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1122
1276
  name: string;
1123
1277
  digits: number;
1124
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;
1125
1286
  })[];
1126
1287
  }>, "many">;
1127
1288
  }, "strip", z.ZodTypeAny, {
@@ -1162,6 +1323,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1162
1323
  name: string;
1163
1324
  digits: number;
1164
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;
1165
1333
  })[];
1166
1334
  }[];
1167
1335
  counter?: {
@@ -1218,6 +1386,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1218
1386
  name: string;
1219
1387
  digits: number;
1220
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;
1221
1396
  })[];
1222
1397
  }[];
1223
1398
  counter?: {
@@ -1276,6 +1451,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1276
1451
  name: string;
1277
1452
  digits: number;
1278
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;
1279
1461
  })[];
1280
1462
  }[];
1281
1463
  counter?: {
@@ -1332,6 +1514,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1332
1514
  name: string;
1333
1515
  digits: number;
1334
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;
1335
1524
  })[];
1336
1525
  }[];
1337
1526
  counter?: {
@@ -1390,6 +1579,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1390
1579
  name: string;
1391
1580
  digits: number;
1392
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;
1393
1589
  })[];
1394
1590
  }[];
1395
1591
  counter?: {
@@ -1446,6 +1642,13 @@ export declare const ContentBlockSchema: z.ZodUnion<[z.ZodObject<{
1446
1642
  name: string;
1447
1643
  digits: number;
1448
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;
1449
1652
  })[];
1450
1653
  }[];
1451
1654
  counter?: {
@@ -1493,6 +1696,16 @@ export declare function createExerciseDocument(question: z.infer<typeof TextBloc
1493
1696
  */
1494
1697
  export declare function createExpressionValidation(expression: string): ExpressionValidation;
1495
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
+
1496
1709
  /**
1497
1710
  * Create a free text inline element
1498
1711
  */
@@ -1735,7 +1948,28 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1735
1948
  name: string;
1736
1949
  digits: number;
1737
1950
  answer?: string | number | undefined;
1738
- }>]>]>, "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">;
1739
1973
  }, "strip", z.ZodTypeAny, {
1740
1974
  type: "LineBlock";
1741
1975
  inlines: ({
@@ -1768,6 +2002,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1768
2002
  name: string;
1769
2003
  digits: number;
1770
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;
1771
2012
  })[];
1772
2013
  }, {
1773
2014
  type: "LineBlock";
@@ -1801,6 +2042,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1801
2042
  name: string;
1802
2043
  digits: number;
1803
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;
1804
2052
  })[];
1805
2053
  }>, z.ZodObject<{
1806
2054
  type: z.ZodLiteral<"TableBlock">;
@@ -1900,7 +2148,28 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1900
2148
  name: string;
1901
2149
  digits: number;
1902
2150
  answer?: string | number | undefined;
1903
- }>]>]>, "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">;
1904
2173
  }, "strip", z.ZodTypeAny, {
1905
2174
  type: "TableCell";
1906
2175
  inlines: ({
@@ -1933,6 +2202,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1933
2202
  name: string;
1934
2203
  digits: number;
1935
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;
1936
2212
  })[];
1937
2213
  colspan?: number | undefined;
1938
2214
  }, {
@@ -1967,6 +2243,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
1967
2243
  name: string;
1968
2244
  digits: number;
1969
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;
1970
2253
  })[];
1971
2254
  colspan?: number | undefined;
1972
2255
  }>, "many">;
@@ -2004,6 +2287,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2004
2287
  name: string;
2005
2288
  digits: number;
2006
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;
2007
2297
  })[];
2008
2298
  colspan?: number | undefined;
2009
2299
  }[];
@@ -2041,6 +2331,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2041
2331
  name: string;
2042
2332
  digits: number;
2043
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;
2044
2341
  })[];
2045
2342
  colspan?: number | undefined;
2046
2343
  }[];
@@ -2082,6 +2379,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2082
2379
  name: string;
2083
2380
  digits: number;
2084
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;
2085
2389
  })[];
2086
2390
  colspan?: number | undefined;
2087
2391
  }[];
@@ -2123,6 +2427,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2123
2427
  name: string;
2124
2428
  digits: number;
2125
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;
2126
2437
  })[];
2127
2438
  colspan?: number | undefined;
2128
2439
  }[];
@@ -2305,7 +2616,28 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2305
2616
  name: string;
2306
2617
  digits: number;
2307
2618
  answer?: string | number | undefined;
2308
- }>]>]>, "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">;
2309
2641
  }, "strip", z.ZodTypeAny, {
2310
2642
  value: number;
2311
2643
  type: "NumberLinePosition";
@@ -2339,6 +2671,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2339
2671
  name: string;
2340
2672
  digits: number;
2341
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;
2342
2681
  })[];
2343
2682
  }, {
2344
2683
  value: number;
@@ -2373,6 +2712,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2373
2712
  name: string;
2374
2713
  digits: number;
2375
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;
2376
2722
  })[];
2377
2723
  }>, "many">;
2378
2724
  }, "strip", z.ZodTypeAny, {
@@ -2413,6 +2759,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2413
2759
  name: string;
2414
2760
  digits: number;
2415
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;
2416
2769
  })[];
2417
2770
  }[];
2418
2771
  counter?: {
@@ -2469,6 +2822,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2469
2822
  name: string;
2470
2823
  digits: number;
2471
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;
2472
2832
  })[];
2473
2833
  }[];
2474
2834
  counter?: {
@@ -2527,6 +2887,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2527
2887
  name: string;
2528
2888
  digits: number;
2529
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;
2530
2897
  })[];
2531
2898
  }[];
2532
2899
  counter?: {
@@ -2583,6 +2950,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2583
2950
  name: string;
2584
2951
  digits: number;
2585
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;
2586
2960
  })[];
2587
2961
  }[];
2588
2962
  counter?: {
@@ -2641,6 +3015,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2641
3015
  name: string;
2642
3016
  digits: number;
2643
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;
2644
3025
  })[];
2645
3026
  }[];
2646
3027
  counter?: {
@@ -2697,6 +3078,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2697
3078
  name: string;
2698
3079
  digits: number;
2699
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;
2700
3088
  })[];
2701
3089
  }[];
2702
3090
  counter?: {
@@ -2790,6 +3178,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2790
3178
  name: string;
2791
3179
  digits: number;
2792
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;
2793
3188
  })[];
2794
3189
  } | {
2795
3190
  type: "NumberLineBlock";
@@ -2829,6 +3224,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2829
3224
  name: string;
2830
3225
  digits: number;
2831
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;
2832
3234
  })[];
2833
3235
  }[];
2834
3236
  counter?: {
@@ -2885,6 +3287,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2885
3287
  name: string;
2886
3288
  digits: number;
2887
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;
2888
3297
  })[];
2889
3298
  colspan?: number | undefined;
2890
3299
  }[];
@@ -2947,6 +3356,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2947
3356
  name: string;
2948
3357
  digits: number;
2949
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;
2950
3366
  })[];
2951
3367
  } | {
2952
3368
  type: "NumberLineBlock";
@@ -2985,6 +3401,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
2985
3401
  name: string;
2986
3402
  digits: number;
2987
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;
2988
3411
  })[];
2989
3412
  }[];
2990
3413
  counter?: {
@@ -3042,6 +3465,13 @@ export declare const ExerciseDocumentSchema: z.ZodObject<{
3042
3465
  name: string;
3043
3466
  digits: number;
3044
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;
3045
3475
  })[];
3046
3476
  colspan?: number | undefined;
3047
3477
  }[];
@@ -3132,6 +3562,21 @@ export declare const ExerciseJSONSchema: z.ZodObject<{
3132
3562
  type: "numeric-keypad";
3133
3563
  includeOperators?: boolean | undefined;
3134
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;
3135
3580
  }>]>>;
3136
3581
  validation: z.ZodOptional<z.ZodObject<{
3137
3582
  mode: z.ZodEnum<["simple", "expression"]>;
@@ -3186,6 +3631,11 @@ export declare const ExerciseJSONSchema: z.ZodObject<{
3186
3631
  type: "numeric-keypad";
3187
3632
  includeOperators?: boolean | undefined;
3188
3633
  includeDecimal?: boolean | undefined;
3634
+ } | {
3635
+ type: "fraction";
3636
+ numerator: number | null;
3637
+ denominator: number | null;
3638
+ simplified: boolean;
3189
3639
  }>;
3190
3640
  validation?: {
3191
3641
  mode: "simple" | "expression";
@@ -3221,6 +3671,11 @@ export declare const ExerciseJSONSchema: z.ZodObject<{
3221
3671
  type: "numeric-keypad";
3222
3672
  includeOperators?: boolean | undefined;
3223
3673
  includeDecimal?: boolean | undefined;
3674
+ } | {
3675
+ type: "fraction";
3676
+ numerator: number | null;
3677
+ denominator: number | null;
3678
+ simplified: boolean;
3224
3679
  }>;
3225
3680
  validation?: {
3226
3681
  mode: "simple" | "expression";
@@ -3327,6 +3782,72 @@ export declare function findValidCombination(expression: string, ranges: Record<
3327
3782
  step?: number;
3328
3783
  }>): Record<string, number> | null;
3329
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
+
3330
3851
  export declare type FreeTextInline = z.infer<typeof FreeTextInlineSchema>;
3331
3852
 
3332
3853
  /**
@@ -3349,6 +3870,8 @@ export declare const FreeTextInlineSchema: z.ZodObject<{
3349
3870
  type: "FreeText";
3350
3871
  }>;
3351
3872
 
3873
+ export declare function getFractionKey(widgetId: string, part: FractionPart): string;
3874
+
3352
3875
  /**
3353
3876
  * Check if all required inputs are provided
3354
3877
  *
@@ -3608,7 +4131,28 @@ export declare const InlineNodeSchema: z.ZodUnion<[z.ZodObject<{
3608
4131
  name: string;
3609
4132
  digits: number;
3610
4133
  answer?: string | number | undefined;
3611
- }>]>]>;
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
+ }>]>;
3612
4156
 
3613
4157
  /**
3614
4158
  * Type guard for BoldText
@@ -3637,6 +4181,17 @@ export declare function isExerciseDocument(value: unknown): value is ExerciseDoc
3637
4181
 
3638
4182
  export declare function isExpressionValidation(value: unknown): value is ExpressionValidation;
3639
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
+
3640
4195
  export declare function isFreeText(value: unknown): value is FreeTextInline;
3641
4196
 
3642
4197
  /**
@@ -3809,6 +4364,8 @@ export declare const JSON_TYPES: {
3809
4364
  readonly RADIO_OPTIONS: "radio-options";
3810
4365
  /** Numeric keypad widget */
3811
4366
  readonly NUMERIC_KEYPAD: "numeric-keypad";
4367
+ /** Inline fraction widget */
4368
+ readonly FRACTION: "fraction";
3812
4369
  };
3813
4370
 
3814
4371
  /**
@@ -3830,6 +4387,7 @@ export declare interface LayoutRendererProps {
3830
4387
  widgets: Record<string, WidgetJSON>;
3831
4388
  values: Record<string, string>;
3832
4389
  droppedInputs: Set<string>;
4390
+ validationDetails?: Record<string, boolean> | null;
3833
4391
  onChange: (widgetId: string, value: string, fromDrop?: boolean, sourceOptionId?: string) => void;
3834
4392
  onInputFocus?: (widgetId: string) => void;
3835
4393
  }
@@ -3953,7 +4511,28 @@ export declare const LineBlockSchema: z.ZodObject<{
3953
4511
  name: string;
3954
4512
  digits: number;
3955
4513
  answer?: string | number | undefined;
3956
- }>]>]>, "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">;
3957
4536
  }, "strip", z.ZodTypeAny, {
3958
4537
  type: "LineBlock";
3959
4538
  inlines: ({
@@ -3986,6 +4565,13 @@ export declare const LineBlockSchema: z.ZodObject<{
3986
4565
  name: string;
3987
4566
  digits: number;
3988
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;
3989
4575
  })[];
3990
4576
  }, {
3991
4577
  type: "LineBlock";
@@ -4019,6 +4605,13 @@ export declare const LineBlockSchema: z.ZodObject<{
4019
4605
  name: string;
4020
4606
  digits: number;
4021
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;
4022
4615
  })[];
4023
4616
  }>;
4024
4617
 
@@ -4212,7 +4805,28 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4212
4805
  name: string;
4213
4806
  digits: number;
4214
4807
  answer?: string | number | undefined;
4215
- }>]>]>, "many">;
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">;
4216
4830
  }, "strip", z.ZodTypeAny, {
4217
4831
  value: number;
4218
4832
  type: "NumberLinePosition";
@@ -4246,6 +4860,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4246
4860
  name: string;
4247
4861
  digits: number;
4248
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;
4249
4870
  })[];
4250
4871
  }, {
4251
4872
  value: number;
@@ -4280,6 +4901,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4280
4901
  name: string;
4281
4902
  digits: number;
4282
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;
4283
4911
  })[];
4284
4912
  }>, "many">;
4285
4913
  }, "strip", z.ZodTypeAny, {
@@ -4320,6 +4948,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4320
4948
  name: string;
4321
4949
  digits: number;
4322
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;
4323
4958
  })[];
4324
4959
  }[];
4325
4960
  counter?: {
@@ -4376,6 +5011,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4376
5011
  name: string;
4377
5012
  digits: number;
4378
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;
4379
5021
  })[];
4380
5022
  }[];
4381
5023
  counter?: {
@@ -4434,6 +5076,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4434
5076
  name: string;
4435
5077
  digits: number;
4436
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;
4437
5086
  })[];
4438
5087
  }[];
4439
5088
  counter?: {
@@ -4490,6 +5139,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4490
5139
  name: string;
4491
5140
  digits: number;
4492
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;
4493
5149
  })[];
4494
5150
  }[];
4495
5151
  counter?: {
@@ -4548,6 +5204,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4548
5204
  name: string;
4549
5205
  digits: number;
4550
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;
4551
5214
  })[];
4552
5215
  }[];
4553
5216
  counter?: {
@@ -4604,6 +5267,13 @@ declare const NumberLineBlockSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
4604
5267
  name: string;
4605
5268
  digits: number;
4606
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;
4607
5277
  })[];
4608
5278
  }[];
4609
5279
  counter?: {
@@ -5018,7 +5688,28 @@ declare const NumberLinePositionSchema: z.ZodObject<{
5018
5688
  name: string;
5019
5689
  digits: number;
5020
5690
  answer?: string | number | undefined;
5021
- }>]>]>, "many">;
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">;
5022
5713
  }, "strip", z.ZodTypeAny, {
5023
5714
  value: number;
5024
5715
  type: "NumberLinePosition";
@@ -5052,6 +5743,13 @@ declare const NumberLinePositionSchema: z.ZodObject<{
5052
5743
  name: string;
5053
5744
  digits: number;
5054
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;
5055
5753
  })[];
5056
5754
  }, {
5057
5755
  value: number;
@@ -5086,6 +5784,13 @@ declare const NumberLinePositionSchema: z.ZodObject<{
5086
5784
  name: string;
5087
5785
  digits: number;
5088
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;
5089
5794
  })[];
5090
5795
  }>;
5091
5796
 
@@ -5167,6 +5872,11 @@ export declare class ParseError extends EngineError {
5167
5872
  constructor(errors: IRecognitionException[]);
5168
5873
  }
5169
5874
 
5875
+ export declare function parseFractionKey(key: string): {
5876
+ widgetId: string;
5877
+ part: FractionPart;
5878
+ } | null;
5879
+
5170
5880
  /**
5171
5881
  * Parse DSL tokens into CST (safe version - returns errors instead of throwing)
5172
5882
  */
@@ -5439,7 +6149,28 @@ declare const TableBlockSchema: z.ZodObject<{
5439
6149
  name: string;
5440
6150
  digits: number;
5441
6151
  answer?: string | number | undefined;
5442
- }>]>]>, "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">;
5443
6174
  }, "strip", z.ZodTypeAny, {
5444
6175
  type: "TableCell";
5445
6176
  inlines: ({
@@ -5472,6 +6203,13 @@ declare const TableBlockSchema: z.ZodObject<{
5472
6203
  name: string;
5473
6204
  digits: number;
5474
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;
5475
6213
  })[];
5476
6214
  colspan?: number | undefined;
5477
6215
  }, {
@@ -5506,6 +6244,13 @@ declare const TableBlockSchema: z.ZodObject<{
5506
6244
  name: string;
5507
6245
  digits: number;
5508
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;
5509
6254
  })[];
5510
6255
  colspan?: number | undefined;
5511
6256
  }>, "many">;
@@ -5543,6 +6288,13 @@ declare const TableBlockSchema: z.ZodObject<{
5543
6288
  name: string;
5544
6289
  digits: number;
5545
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;
5546
6298
  })[];
5547
6299
  colspan?: number | undefined;
5548
6300
  }[];
@@ -5580,6 +6332,13 @@ declare const TableBlockSchema: z.ZodObject<{
5580
6332
  name: string;
5581
6333
  digits: number;
5582
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;
5583
6342
  })[];
5584
6343
  colspan?: number | undefined;
5585
6344
  }[];
@@ -5621,6 +6380,13 @@ declare const TableBlockSchema: z.ZodObject<{
5621
6380
  name: string;
5622
6381
  digits: number;
5623
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;
5624
6390
  })[];
5625
6391
  colspan?: number | undefined;
5626
6392
  }[];
@@ -5662,6 +6428,13 @@ declare const TableBlockSchema: z.ZodObject<{
5662
6428
  name: string;
5663
6429
  digits: number;
5664
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;
5665
6438
  })[];
5666
6439
  colspan?: number | undefined;
5667
6440
  }[];
@@ -5782,7 +6555,28 @@ declare const TableCellSchema: z.ZodObject<{
5782
6555
  name: string;
5783
6556
  digits: number;
5784
6557
  answer?: string | number | undefined;
5785
- }>]>]>, "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">;
5786
6580
  }, "strip", z.ZodTypeAny, {
5787
6581
  type: "TableCell";
5788
6582
  inlines: ({
@@ -5815,6 +6609,13 @@ declare const TableCellSchema: z.ZodObject<{
5815
6609
  name: string;
5816
6610
  digits: number;
5817
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;
5818
6619
  })[];
5819
6620
  colspan?: number | undefined;
5820
6621
  }, {
@@ -5849,6 +6650,13 @@ declare const TableCellSchema: z.ZodObject<{
5849
6650
  name: string;
5850
6651
  digits: number;
5851
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;
5852
6660
  })[];
5853
6661
  colspan?: number | undefined;
5854
6662
  }>;
@@ -6065,7 +6873,28 @@ declare const TableRowSchema: z.ZodObject<{
6065
6873
  name: string;
6066
6874
  digits: number;
6067
6875
  answer?: string | number | undefined;
6068
- }>]>]>, "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">;
6069
6898
  }, "strip", z.ZodTypeAny, {
6070
6899
  type: "TableCell";
6071
6900
  inlines: ({
@@ -6098,6 +6927,13 @@ declare const TableRowSchema: z.ZodObject<{
6098
6927
  name: string;
6099
6928
  digits: number;
6100
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;
6101
6937
  })[];
6102
6938
  colspan?: number | undefined;
6103
6939
  }, {
@@ -6132,6 +6968,13 @@ declare const TableRowSchema: z.ZodObject<{
6132
6968
  name: string;
6133
6969
  digits: number;
6134
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;
6135
6978
  })[];
6136
6979
  colspan?: number | undefined;
6137
6980
  }>, "many">;
@@ -6169,6 +7012,13 @@ declare const TableRowSchema: z.ZodObject<{
6169
7012
  name: string;
6170
7013
  digits: number;
6171
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;
6172
7022
  })[];
6173
7023
  colspan?: number | undefined;
6174
7024
  }[];
@@ -6206,6 +7056,13 @@ declare const TableRowSchema: z.ZodObject<{
6206
7056
  name: string;
6207
7057
  digits: number;
6208
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;
6209
7066
  })[];
6210
7067
  colspan?: number | undefined;
6211
7068
  }[];
@@ -6397,6 +7254,11 @@ export declare function validateExerciseJSON(data: unknown): {
6397
7254
  type: "numeric-keypad";
6398
7255
  includeOperators?: boolean | undefined;
6399
7256
  includeDecimal?: boolean | undefined;
7257
+ } | {
7258
+ type: "fraction";
7259
+ numerator: number | null;
7260
+ denominator: number | null;
7261
+ simplified: boolean;
6400
7262
  }>;
6401
7263
  validation?: {
6402
7264
  mode: "simple" | "expression";
@@ -6450,6 +7312,11 @@ export declare function validateExerciseJSONSafe(data: unknown): z.SafeParseRetu
6450
7312
  type: "numeric-keypad";
6451
7313
  includeOperators?: boolean | undefined;
6452
7314
  includeDecimal?: boolean | undefined;
7315
+ } | {
7316
+ type: "fraction";
7317
+ numerator: number | null;
7318
+ denominator: number | null;
7319
+ simplified: boolean;
6453
7320
  }>;
6454
7321
  validation?: {
6455
7322
  mode: "simple" | "expression";
@@ -6485,6 +7352,11 @@ export declare function validateExerciseJSONSafe(data: unknown): z.SafeParseRetu
6485
7352
  type: "numeric-keypad";
6486
7353
  includeOperators?: boolean | undefined;
6487
7354
  includeDecimal?: boolean | undefined;
7355
+ } | {
7356
+ type: "fraction";
7357
+ numerator: number | null;
7358
+ denominator: number | null;
7359
+ simplified: boolean;
6488
7360
  }>;
6489
7361
  validation?: {
6490
7362
  mode: "simple" | "expression";
@@ -6554,6 +7426,11 @@ export declare function validateWidgetJSON(data: unknown): {
6554
7426
  type: "numeric-keypad";
6555
7427
  includeOperators?: boolean | undefined;
6556
7428
  includeDecimal?: boolean | undefined;
7429
+ } | {
7430
+ type: "fraction";
7431
+ numerator: number | null;
7432
+ denominator: number | null;
7433
+ simplified: boolean;
6557
7434
  };
6558
7435
 
6559
7436
  /**
@@ -6580,6 +7457,11 @@ export declare function validateWidgetJSONSafe(data: unknown): z.SafeParseReturn
6580
7457
  type: "numeric-keypad";
6581
7458
  includeOperators?: boolean | undefined;
6582
7459
  includeDecimal?: boolean | undefined;
7460
+ } | {
7461
+ type: "fraction";
7462
+ numerator: number | null;
7463
+ denominator: number | null;
7464
+ simplified: boolean;
6583
7465
  }, {
6584
7466
  length: number;
6585
7467
  type: "inline-input";
@@ -6598,6 +7480,11 @@ export declare function validateWidgetJSONSafe(data: unknown): z.SafeParseReturn
6598
7480
  type: "numeric-keypad";
6599
7481
  includeOperators?: boolean | undefined;
6600
7482
  includeDecimal?: boolean | undefined;
7483
+ } | {
7484
+ type: "fraction";
7485
+ numerator: number | null;
7486
+ denominator: number | null;
7487
+ simplified: boolean;
6601
7488
  }>;
6602
7489
 
6603
7490
  /**
@@ -6667,6 +7554,8 @@ export declare interface ValidationResult {
6667
7554
  error?: string;
6668
7555
  }
6669
7556
 
7557
+ declare type ValidationStatus = 'correct' | 'incorrect' | null;
7558
+
6670
7559
  export declare type WidgetJSON = z.infer<typeof WidgetJSONSchema>;
6671
7560
 
6672
7561
  export declare const WidgetJSONSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"inputType", [z.ZodObject<{
@@ -6723,6 +7612,21 @@ export declare const WidgetJSONSchema: z.ZodUnion<[z.ZodDiscriminatedUnion<"inpu
6723
7612
  type: "numeric-keypad";
6724
7613
  includeOperators?: boolean | undefined;
6725
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;
6726
7630
  }>]>;
6727
7631
 
6728
7632
  export declare type WidgetRef = z.infer<typeof WidgetRefSchema>;
@@ -6752,7 +7656,10 @@ export declare interface WidgetRendererProps {
6752
7656
  widget: WidgetJSON;
6753
7657
  widgetId: string;
6754
7658
  value: string;
7659
+ values?: Record<string, string>;
6755
7660
  isDropped?: boolean;
7661
+ validationStatus?: ValidationStatus;
7662
+ droppedInputs?: Set<string>;
6756
7663
  onChange: (widgetId: string, value: string, fromDrop?: boolean, sourceOptionId?: string) => void;
6757
7664
  onInputFocus?: (widgetId: string) => void;
6758
7665
  onKeypadChange?: (value: string) => void;