@khanacademy/perseus-core 3.2.0 → 3.4.0

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.
Files changed (135) hide show
  1. package/dist/data-schema.d.ts +57 -12
  2. package/dist/es/index.js +2968 -280
  3. package/dist/es/index.js.map +1 -1
  4. package/dist/index.d.ts +80 -1
  5. package/dist/index.js +3027 -281
  6. package/dist/index.js.map +1 -1
  7. package/dist/parse-perseus-json/error-tracking-parse-context.d.ts +9 -0
  8. package/dist/parse-perseus-json/exhaustive-test-tool/index.d.ts +2 -0
  9. package/dist/parse-perseus-json/general-purpose-parsers/any.d.ts +2 -0
  10. package/dist/parse-perseus-json/general-purpose-parsers/array.d.ts +2 -0
  11. package/dist/parse-perseus-json/general-purpose-parsers/array.typetest.d.ts +1 -0
  12. package/dist/parse-perseus-json/general-purpose-parsers/boolean.d.ts +2 -0
  13. package/dist/parse-perseus-json/general-purpose-parsers/constant.d.ts +4 -0
  14. package/dist/parse-perseus-json/general-purpose-parsers/convert.d.ts +2 -0
  15. package/dist/parse-perseus-json/general-purpose-parsers/defaulted.d.ts +2 -0
  16. package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.d.ts +21 -0
  17. package/dist/parse-perseus-json/general-purpose-parsers/discriminated-union.typetest.d.ts +1 -0
  18. package/dist/parse-perseus-json/general-purpose-parsers/enumeration.d.ts +2 -0
  19. package/dist/parse-perseus-json/general-purpose-parsers/enumeration.typetest.d.ts +1 -0
  20. package/dist/parse-perseus-json/general-purpose-parsers/index.d.ts +17 -0
  21. package/dist/parse-perseus-json/general-purpose-parsers/is-object.d.ts +1 -0
  22. package/dist/parse-perseus-json/general-purpose-parsers/nullable.d.ts +2 -0
  23. package/dist/parse-perseus-json/general-purpose-parsers/number.d.ts +2 -0
  24. package/dist/parse-perseus-json/general-purpose-parsers/object.d.ts +6 -0
  25. package/dist/parse-perseus-json/general-purpose-parsers/optional.d.ts +2 -0
  26. package/dist/parse-perseus-json/general-purpose-parsers/pair.d.ts +2 -0
  27. package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.d.ts +7 -0
  28. package/dist/parse-perseus-json/general-purpose-parsers/pipe-parsers.typetest.d.ts +1 -0
  29. package/dist/parse-perseus-json/general-purpose-parsers/record.d.ts +2 -0
  30. package/dist/parse-perseus-json/general-purpose-parsers/string-to-number.d.ts +2 -0
  31. package/dist/parse-perseus-json/general-purpose-parsers/string.d.ts +2 -0
  32. package/dist/parse-perseus-json/general-purpose-parsers/test-helpers.d.ts +8 -0
  33. package/dist/parse-perseus-json/general-purpose-parsers/trio.d.ts +2 -0
  34. package/dist/parse-perseus-json/general-purpose-parsers/union.d.ts +7 -0
  35. package/dist/parse-perseus-json/general-purpose-parsers/union.typetest.d.ts +1 -0
  36. package/dist/parse-perseus-json/general-purpose-parsers/unknown.d.ts +2 -0
  37. package/dist/parse-perseus-json/index.d.ts +45 -0
  38. package/dist/parse-perseus-json/object-path.d.ts +2 -0
  39. package/dist/parse-perseus-json/parse-failure-detail.d.ts +2 -0
  40. package/dist/parse-perseus-json/parse.d.ts +3 -0
  41. package/dist/parse-perseus-json/parser-types.d.ts +30 -0
  42. package/dist/parse-perseus-json/perseus-parsers/categorizer-widget.d.ts +3 -0
  43. package/dist/parse-perseus-json/perseus-parsers/cs-program-widget.d.ts +3 -0
  44. package/dist/parse-perseus-json/perseus-parsers/definition-widget.d.ts +3 -0
  45. package/dist/parse-perseus-json/perseus-parsers/dropdown-widget.d.ts +3 -0
  46. package/dist/parse-perseus-json/perseus-parsers/explanation-widget.d.ts +3 -0
  47. package/dist/parse-perseus-json/perseus-parsers/expression-widget.d.ts +3 -0
  48. package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.d.ts +3 -0
  49. package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +16 -0
  50. package/dist/parse-perseus-json/perseus-parsers/grapher-widget.d.ts +3 -0
  51. package/dist/parse-perseus-json/perseus-parsers/group-widget.d.ts +3 -0
  52. package/dist/parse-perseus-json/perseus-parsers/hint.d.ts +3 -0
  53. package/dist/parse-perseus-json/perseus-parsers/iframe-widget.d.ts +3 -0
  54. package/dist/parse-perseus-json/perseus-parsers/image-widget.d.ts +3 -0
  55. package/dist/parse-perseus-json/perseus-parsers/images-map.d.ts +5 -0
  56. package/dist/parse-perseus-json/perseus-parsers/input-number-widget.d.ts +3 -0
  57. package/dist/parse-perseus-json/perseus-parsers/interaction-widget.d.ts +3 -0
  58. package/dist/parse-perseus-json/perseus-parsers/interactive-graph-widget.d.ts +3 -0
  59. package/dist/parse-perseus-json/perseus-parsers/label-image-widget.d.ts +3 -0
  60. package/dist/parse-perseus-json/perseus-parsers/matcher-widget.d.ts +3 -0
  61. package/dist/parse-perseus-json/perseus-parsers/matrix-widget.d.ts +3 -0
  62. package/dist/parse-perseus-json/perseus-parsers/measurer-widget.d.ts +3 -0
  63. package/dist/parse-perseus-json/perseus-parsers/molecule-renderer-widget.d.ts +3 -0
  64. package/dist/parse-perseus-json/perseus-parsers/number-line-widget.d.ts +3 -0
  65. package/dist/parse-perseus-json/perseus-parsers/numeric-input-widget.d.ts +3 -0
  66. package/dist/parse-perseus-json/perseus-parsers/orderer-widget.d.ts +3 -0
  67. package/dist/parse-perseus-json/perseus-parsers/passage-ref-widget.d.ts +3 -0
  68. package/dist/parse-perseus-json/perseus-parsers/passage-widget.d.ts +3 -0
  69. package/dist/parse-perseus-json/perseus-parsers/perseus-article.d.ts +3 -0
  70. package/dist/parse-perseus-json/perseus-parsers/perseus-image-background.d.ts +3 -0
  71. package/dist/parse-perseus-json/perseus-parsers/perseus-item.d.ts +3 -0
  72. package/dist/parse-perseus-json/perseus-parsers/perseus-renderer.d.ts +3 -0
  73. package/dist/parse-perseus-json/perseus-parsers/phet-simulation-widget.d.ts +3 -0
  74. package/dist/parse-perseus-json/perseus-parsers/plotter-widget.d.ts +3 -0
  75. package/dist/parse-perseus-json/perseus-parsers/python-program-widget.d.ts +3 -0
  76. package/dist/parse-perseus-json/perseus-parsers/radio-widget.d.ts +3 -0
  77. package/dist/parse-perseus-json/perseus-parsers/sorter-widget.d.ts +3 -0
  78. package/dist/parse-perseus-json/perseus-parsers/table-widget.d.ts +3 -0
  79. package/dist/parse-perseus-json/perseus-parsers/versioned-widget-options.d.ts +36 -0
  80. package/dist/parse-perseus-json/perseus-parsers/video-widget.d.ts +3 -0
  81. package/dist/parse-perseus-json/perseus-parsers/widget.d.ts +7 -0
  82. package/dist/parse-perseus-json/perseus-parsers/widgets-map.d.ts +3 -0
  83. package/dist/parse-perseus-json/result.d.ts +16 -0
  84. package/dist/types.d.ts +1 -0
  85. package/dist/utils/is-real-json-parse.d.ts +1 -0
  86. package/dist/utils/widget-id-utils.d.ts +38 -0
  87. package/dist/widgets/categorizer/categorizer-util.d.ts +17 -0
  88. package/dist/widgets/categorizer/index.d.ts +5 -0
  89. package/dist/widgets/core-widget-registry.d.ts +28 -0
  90. package/dist/widgets/cs-program/cs-program-util.d.ts +2 -0
  91. package/dist/widgets/cs-program/index.d.ts +5 -0
  92. package/dist/widgets/definition/index.d.ts +5 -0
  93. package/dist/widgets/dropdown/dropdown-util.d.ts +20 -0
  94. package/dist/widgets/dropdown/index.d.ts +5 -0
  95. package/dist/widgets/explanation/index.d.ts +5 -0
  96. package/dist/widgets/expression/expression-upgrade.d.ts +10 -0
  97. package/dist/widgets/expression/expression-util.d.ts +19 -0
  98. package/dist/widgets/expression/index.d.ts +4 -0
  99. package/dist/widgets/graded-group/index.d.ts +5 -0
  100. package/dist/widgets/graded-group-set/index.d.ts +5 -0
  101. package/dist/widgets/grapher/index.d.ts +5 -0
  102. package/dist/widgets/group/index.d.ts +5 -0
  103. package/dist/widgets/iframe/index.d.ts +5 -0
  104. package/dist/widgets/image/index.d.ts +5 -0
  105. package/dist/widgets/input-number/index.d.ts +5 -0
  106. package/dist/widgets/interaction/index.d.ts +5 -0
  107. package/dist/widgets/interactive-graph/index.d.ts +5 -0
  108. package/dist/widgets/label-image/index.d.ts +5 -0
  109. package/dist/widgets/label-image/label-image-util.d.ts +19 -0
  110. package/dist/widgets/logic-export.types.d.ts +13 -0
  111. package/dist/widgets/matcher/index.d.ts +5 -0
  112. package/dist/widgets/matrix/index.d.ts +5 -0
  113. package/dist/widgets/measurer/index.d.ts +4 -0
  114. package/dist/widgets/measurer/measurer-upgrade.d.ts +10 -0
  115. package/dist/widgets/number-line/index.d.ts +5 -0
  116. package/dist/widgets/number-line/number-line-util.d.ts +4 -0
  117. package/dist/widgets/numeric-input/index.d.ts +5 -0
  118. package/dist/widgets/numeric-input/numeric-input-util.d.ts +19 -0
  119. package/dist/widgets/orderer/index.d.ts +5 -0
  120. package/dist/widgets/orderer/orderer-util.d.ts +16 -0
  121. package/dist/widgets/passage/index.d.ts +5 -0
  122. package/dist/widgets/passage-ref/index.d.ts +4 -0
  123. package/dist/widgets/passage-ref/passage-ref-upgrade.d.ts +7 -0
  124. package/dist/widgets/passage-ref-target/index.d.ts +5 -0
  125. package/dist/widgets/phet-simulation/index.d.ts +5 -0
  126. package/dist/widgets/plotter/index.d.ts +5 -0
  127. package/dist/widgets/python-program/index.d.ts +5 -0
  128. package/dist/widgets/radio/index.d.ts +4 -0
  129. package/dist/widgets/radio/radio-upgrade.d.ts +10 -0
  130. package/dist/widgets/sorter/index.d.ts +5 -0
  131. package/dist/widgets/sorter/sorter-util.d.ts +16 -0
  132. package/dist/widgets/table/index.d.ts +5 -0
  133. package/dist/widgets/upgrade.d.ts +3 -0
  134. package/dist/widgets/video/index.d.ts +5 -0
  135. package/package.json +1 -1
@@ -33,6 +33,49 @@ export type Range = Interval;
33
33
  export type Size = [width: number, height: number];
34
34
  export type CollinearTuple = [Vector2, Vector2];
35
35
  export type ShowSolutions = "all" | "selected" | "none";
36
+ /**
37
+ * A utility type that constructs a widget map from a "registry interface".
38
+ * The keys of the registry should be the widget type (aka, "categorizer" or
39
+ * "radio", etc) and the value should be the option type stored in the value
40
+ * of the map.
41
+ *
42
+ * You can think of this as a type that generates another type. We use
43
+ * "registry interfaces" as a way to keep a set of widget types to their data
44
+ * type in several places in Perseus. This type then allows us to generate a
45
+ * map type that maps a widget id to its data type and keep strong typing by
46
+ * widget id.
47
+ *
48
+ * For example, given a fictitious registry such as this:
49
+ *
50
+ * ```
51
+ * interface DummyRegistry {
52
+ * categorizer: { categories: ReadonlyArray<string> };
53
+ * dropdown: { choices: ReadonlyArray<string> }:
54
+ * }
55
+ * ```
56
+ *
57
+ * If we create a DummyMap using this helper:
58
+ *
59
+ * ```
60
+ * type DummyMap = MakeWidgetMap<DummyRegistry>;
61
+ * ```
62
+ *
63
+ * We'll get a map that looks like this:
64
+ *
65
+ * ```
66
+ * type DummyMap = {
67
+ * `categorizer ${number}`: { categories: ReadonlyArray<string> };
68
+ * `dropdown ${number}`: { choices: ReadonlyArray<string> };
69
+ * }
70
+ * ```
71
+ *
72
+ * We use interfaces for the registries so that they can be extended in cases
73
+ * where the consuming app brings along their own widgets. Interfaces in
74
+ * TypeScript are always open (ie. you can extend them) whereas types aren't.
75
+ */
76
+ export type MakeWidgetMap<TRegistry> = {
77
+ [Property in keyof TRegistry as `${Property & string} ${number}`]: TRegistry[Property];
78
+ };
36
79
  /**
37
80
  * Our core set of Perseus widgets.
38
81
  *
@@ -54,7 +97,7 @@ export type ShowSolutions = "all" | "selected" | "none";
54
97
  * `PerseusWidgets` with the one defined below.
55
98
  *
56
99
  * ```typescript
57
- * declare module "@khanacademy/perseus" {
100
+ * declare module "@khanacademy/perseus-core" {
58
101
  * interface PerseusWidgetTypes {
59
102
  * // A new widget
60
103
  * "new-awesomeness": MyAwesomeNewWidget;
@@ -96,7 +139,6 @@ export interface PerseusWidgetTypes {
96
139
  matcher: MatcherWidget;
97
140
  matrix: MatrixWidget;
98
141
  measurer: MeasurerWidget;
99
- "mock-widget": MockWidget;
100
142
  "molecule-renderer": MoleculeRendererWidget;
101
143
  "number-line": NumberLineWidget;
102
144
  "numeric-input": NumericInputWidget;
@@ -128,9 +170,18 @@ export interface PerseusWidgetTypes {
128
170
  * @see {@link PerseusWidgetTypes} additional widgets can be added to this map type
129
171
  * by augmenting the PerseusWidgetTypes with new widget types!
130
172
  */
131
- export type PerseusWidgetsMap = {
132
- [Property in keyof PerseusWidgetTypes as `${Property} ${number}`]: PerseusWidgetTypes[Property];
133
- };
173
+ export type PerseusWidgetsMap = MakeWidgetMap<PerseusWidgetTypes>;
174
+ /**
175
+ * PerseusWidget is a union of all the different types of widget options that
176
+ * Perseus knows about.
177
+ *
178
+ * Thanks to it being based on PerseusWidgetTypes interface, this union is
179
+ * automatically extended to include widgets used in tests without those widget
180
+ * option types seeping into our production types.
181
+ *
182
+ * @see MockWidget for an example
183
+ */
184
+ export type PerseusWidget = PerseusWidgetTypes[keyof PerseusWidgetTypes];
134
185
  /**
135
186
  * A "PerseusItem" is a classic Perseus item. It is rendered by the
136
187
  * `ServerItemRenderer` and the layout is pre-set.
@@ -228,7 +279,6 @@ export type LabelImageWidget = WidgetOptions<'label-image', PerseusLabelImageWid
228
279
  export type MatcherWidget = WidgetOptions<'matcher', PerseusMatcherWidgetOptions>;
229
280
  export type MatrixWidget = WidgetOptions<'matrix', PerseusMatrixWidgetOptions>;
230
281
  export type MeasurerWidget = WidgetOptions<'measurer', PerseusMeasurerWidgetOptions>;
231
- export type MockWidget = WidgetOptions<'mock-widget', MockWidgetOptions>;
232
282
  export type NumberLineWidget = WidgetOptions<'number-line', PerseusNumberLineWidgetOptions>;
233
283
  export type NumericInputWidget = WidgetOptions<'numeric-input', PerseusNumericInputWidgetOptions>;
234
284
  export type OrdererWidget = WidgetOptions<'orderer', PerseusOrdererWidgetOptions>;
@@ -245,7 +295,6 @@ export type MoleculeRendererWidget = WidgetOptions<'molecule-renderer', PerseusM
245
295
  export type RefTargetWidget = WidgetOptions<'passage-ref-target', PerseusPassageRefTargetWidgetOptions>;
246
296
  export type VideoWidget = WidgetOptions<'video', PerseusVideoWidgetOptions>;
247
297
  export type DeprecatedStandinWidget = WidgetOptions<'deprecated-standin', object>;
248
- export type PerseusWidget = CategorizerWidget | CSProgramWidget | DefinitionWidget | DropdownWidget | ExplanationWidget | ExpressionWidget | GradedGroupSetWidget | GradedGroupWidget | GrapherWidget | GroupWidget | IFrameWidget | ImageWidget | InputNumberWidget | InteractionWidget | InteractiveGraphWidget | LabelImageWidget | MatcherWidget | MatrixWidget | MeasurerWidget | MockWidget | MoleculeRendererWidget | NumberLineWidget | NumericInputWidget | OrdererWidget | PassageRefWidget | PassageWidget | PhetSimulationWidget | PlotterWidget | PythonProgramWidget | RadioWidget | RefTargetWidget | SorterWidget | TableWidget | VideoWidget | DeprecatedStandinWidget;
249
298
  /**
250
299
  * A background image applied to various widgets.
251
300
  */
@@ -723,7 +772,7 @@ export type PerseusNumberLineWidgetOptions = {
723
772
  correctRel: string | null | undefined;
724
773
  correctX: number | null;
725
774
  initialX: number | null | undefined;
726
- showTooltip?: boolean;
775
+ showTooltips?: boolean;
727
776
  static: boolean;
728
777
  };
729
778
  export type PerseusOrdererWidgetOptions = {
@@ -955,10 +1004,6 @@ export type PerseusVideoWidgetOptions = {
955
1004
  location: string;
956
1005
  static?: boolean;
957
1006
  };
958
- export type MockWidgetOptions = {
959
- static?: boolean;
960
- value: string;
961
- };
962
1007
  export type PerseusInputNumberWidgetOptions = {
963
1008
  answerType?: "number" | "decimal" | "integer" | "rational" | "improper" | "mixed" | "percent" | "pi";
964
1009
  inexact?: boolean;