@khanacademy/perseus-core 9.0.0 → 10.1.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 (100) hide show
  1. package/dist/data-schema.d.ts +20 -22
  2. package/dist/es/index.js +66 -52
  3. package/dist/es/index.js.map +1 -1
  4. package/dist/index.d.ts +9 -1
  5. package/dist/index.js +70 -51
  6. package/dist/index.js.map +1 -1
  7. package/dist/parse-perseus-json/general-purpose-parsers/defaulted.d.ts +1 -1
  8. package/dist/parse-perseus-json/general-purpose-parsers/index.d.ts +1 -1
  9. package/dist/parse-perseus-json/general-purpose-parsers/is-plain-object.d.ts +8 -0
  10. package/dist/parse-perseus-json/general-purpose-parsers/test-helpers.d.ts +5 -0
  11. package/dist/parse-perseus-json/perseus-parsers/categorizer-widget.d.ts +13 -3
  12. package/dist/parse-perseus-json/perseus-parsers/categorizer-widget.typetest.d.ts +1 -0
  13. package/dist/parse-perseus-json/perseus-parsers/cs-program-widget.d.ts +12 -3
  14. package/dist/parse-perseus-json/perseus-parsers/cs-program-widget.typetest.d.ts +1 -0
  15. package/dist/parse-perseus-json/perseus-parsers/definition-widget.d.ts +5 -3
  16. package/dist/parse-perseus-json/perseus-parsers/definition-widget.typetest.d.ts +1 -0
  17. package/dist/parse-perseus-json/perseus-parsers/dropdown-widget.d.ts +10 -3
  18. package/dist/parse-perseus-json/perseus-parsers/dropdown-widget.typetest.d.ts +1 -0
  19. package/dist/parse-perseus-json/perseus-parsers/explanation-widget.d.ts +7 -3
  20. package/dist/parse-perseus-json/perseus-parsers/explanation-widget.typetest.d.ts +1 -0
  21. package/dist/parse-perseus-json/perseus-parsers/expression-widget.d.ts +16 -3
  22. package/dist/parse-perseus-json/perseus-parsers/expression-widget.typetest.d.ts +1 -0
  23. package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.d.ts +15 -3
  24. package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.typetest.d.ts +1 -0
  25. package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +14 -4
  26. package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.typetest.d.ts +1 -0
  27. package/dist/parse-perseus-json/perseus-parsers/grapher-widget.d.ts +51 -3
  28. package/dist/parse-perseus-json/perseus-parsers/grapher-widget.typetest.d.ts +1 -0
  29. package/dist/parse-perseus-json/perseus-parsers/group-widget.d.ts +1 -3
  30. package/dist/parse-perseus-json/perseus-parsers/group-widget.typetest.d.ts +1 -0
  31. package/dist/parse-perseus-json/perseus-parsers/hint.d.ts +9 -3
  32. package/dist/parse-perseus-json/perseus-parsers/hint.typetest.d.ts +1 -0
  33. package/dist/parse-perseus-json/perseus-parsers/iframe-widget.d.ts +12 -3
  34. package/dist/parse-perseus-json/perseus-parsers/iframe-widget.typetest.d.ts +1 -0
  35. package/dist/parse-perseus-json/perseus-parsers/image-widget.d.ts +22 -3
  36. package/dist/parse-perseus-json/perseus-parsers/image-widget.typetest.d.ts +1 -0
  37. package/dist/parse-perseus-json/perseus-parsers/input-number-widget.d.ts +10 -2
  38. package/dist/parse-perseus-json/perseus-parsers/input-number-widget.typetest.d.ts +1 -0
  39. package/dist/parse-perseus-json/perseus-parsers/interaction-widget.d.ts +125 -3
  40. package/dist/parse-perseus-json/perseus-parsers/interaction-widget.typetest.d.ts +1 -0
  41. package/dist/parse-perseus-json/perseus-parsers/interactive-graph-user-input.d.ts +60 -1
  42. package/dist/parse-perseus-json/perseus-parsers/interactive-graph-widget.d.ts +326 -5
  43. package/dist/parse-perseus-json/perseus-parsers/interactive-graph-widget.typetest.d.ts +1 -0
  44. package/dist/parse-perseus-json/perseus-parsers/label-image-widget.d.ts +16 -3
  45. package/dist/parse-perseus-json/perseus-parsers/label-image-widget.typetest.d.ts +1 -0
  46. package/dist/parse-perseus-json/perseus-parsers/legacy-button-sets.d.ts +1 -3
  47. package/dist/parse-perseus-json/perseus-parsers/matcher-widget.d.ts +7 -3
  48. package/dist/parse-perseus-json/perseus-parsers/matcher-widget.typetest.d.ts +1 -0
  49. package/dist/parse-perseus-json/perseus-parsers/matrix-widget.d.ts +8 -3
  50. package/dist/parse-perseus-json/perseus-parsers/matrix-widget.typetest.d.ts +1 -0
  51. package/dist/parse-perseus-json/perseus-parsers/measurer-widget.d.ts +18 -3
  52. package/dist/parse-perseus-json/perseus-parsers/measurer-widget.typetest.d.ts +1 -0
  53. package/dist/parse-perseus-json/perseus-parsers/molecule-renderer-widget.d.ts +5 -3
  54. package/dist/parse-perseus-json/perseus-parsers/molecule-renderer-widget.typetest.d.ts +1 -0
  55. package/dist/parse-perseus-json/perseus-parsers/number-line-widget.d.ts +17 -3
  56. package/dist/parse-perseus-json/perseus-parsers/number-line-widget.typetest.d.ts +1 -0
  57. package/dist/parse-perseus-json/perseus-parsers/numeric-input-widget.d.ts +21 -4
  58. package/dist/parse-perseus-json/perseus-parsers/numeric-input-widget.typetest.d.ts +1 -0
  59. package/dist/parse-perseus-json/perseus-parsers/orderer-widget.d.ts +7 -3
  60. package/dist/parse-perseus-json/perseus-parsers/orderer-widget.typetest.d.ts +1 -0
  61. package/dist/parse-perseus-json/perseus-parsers/passage-ref-widget.d.ts +5 -3
  62. package/dist/parse-perseus-json/perseus-parsers/passage-ref-widget.typetest.d.ts +1 -0
  63. package/dist/parse-perseus-json/perseus-parsers/passage-widget.d.ts +7 -3
  64. package/dist/parse-perseus-json/perseus-parsers/passage-widget.typetest.d.ts +1 -0
  65. package/dist/parse-perseus-json/perseus-parsers/perseus-answer-area.d.ts +11 -2
  66. package/dist/parse-perseus-json/perseus-parsers/perseus-answer-area.typetest.d.ts +1 -0
  67. package/dist/parse-perseus-json/perseus-parsers/perseus-image-background.d.ts +9 -3
  68. package/dist/parse-perseus-json/perseus-parsers/perseus-image-background.typetest.d.ts +1 -0
  69. package/dist/parse-perseus-json/perseus-parsers/perseus-image-detail.d.ts +4 -0
  70. package/dist/parse-perseus-json/perseus-parsers/perseus-image-detail.typetest.d.ts +1 -0
  71. package/dist/parse-perseus-json/perseus-parsers/phet-simulation-widget.d.ts +4 -3
  72. package/dist/parse-perseus-json/perseus-parsers/phet-simulation-widget.typetest.d.ts +1 -0
  73. package/dist/parse-perseus-json/perseus-parsers/plotter-widget.d.ts +15 -3
  74. package/dist/parse-perseus-json/perseus-parsers/plotter-widget.typetest.d.ts +1 -0
  75. package/dist/parse-perseus-json/perseus-parsers/python-program-widget.d.ts +4 -3
  76. package/dist/parse-perseus-json/perseus-parsers/python-program-widget.typetest.d.ts +1 -0
  77. package/dist/parse-perseus-json/perseus-parsers/sorter-widget.d.ts +5 -3
  78. package/dist/parse-perseus-json/perseus-parsers/sorter-widget.typetest.d.ts +1 -0
  79. package/dist/parse-perseus-json/perseus-parsers/table-widget.d.ts +6 -3
  80. package/dist/parse-perseus-json/perseus-parsers/table-widget.typetest.d.ts +1 -0
  81. package/dist/parse-perseus-json/perseus-parsers/video-widget.d.ts +4 -3
  82. package/dist/parse-perseus-json/perseus-parsers/video-widget.typetest.d.ts +1 -0
  83. package/dist/types.d.ts +1 -1
  84. package/dist/utils/deep-clone.d.ts +1 -2
  85. package/dist/utils/item-has-hints.d.ts +5 -0
  86. package/dist/utils/item-has-rationales.d.ts +5 -0
  87. package/dist/utils/split-perseus-item.d.ts +3 -3
  88. package/dist/utils/split-perseus-renderer.d.ts +7 -0
  89. package/dist/utils/test-utils.d.ts +2 -1
  90. package/dist/widgets/core-widget-registry.d.ts +8 -0
  91. package/dist/widgets/grapher/grapher-util.d.ts +1 -2
  92. package/dist/widgets/group/group-util.d.ts +12 -0
  93. package/dist/widgets/input-number/input-number-util.d.ts +12 -0
  94. package/dist/widgets/logic-export.types.d.ts +3 -1
  95. package/dist/widgets/matrix/matrix-util.d.ts +1 -2
  96. package/dist/widgets/number-line/number-line-util.d.ts +1 -2
  97. package/dist/widgets/orderer/orderer-util.d.ts +2 -6
  98. package/dist/widgets/plotter/plotter-util.d.ts +1 -1
  99. package/package.json +4 -3
  100. package/dist/parse-perseus-json/general-purpose-parsers/is-object.d.ts +0 -1
@@ -1,3 +1,4 @@
1
- import type { PythonProgramWidget } from "../../data-schema";
2
- import type { Parser } from "../parser-types";
3
- export declare const parsePythonProgramWidget: Parser<PythonProgramWidget>;
1
+ export declare const parsePythonProgramWidget: import("../parser-types").Parser<import("../..").WidgetOptions<"python-program", import("../general-purpose-parsers/object-types").OptionalizeProperties<{
2
+ programID: string;
3
+ height: number;
4
+ }>>>;
@@ -1,3 +1,5 @@
1
- import type { SorterWidget } from "../../data-schema";
2
- import type { Parser } from "../parser-types";
3
- export declare const parseSorterWidget: Parser<SorterWidget>;
1
+ export declare const parseSorterWidget: import("../parser-types").Parser<import("../..").WidgetOptions<"sorter", import("../general-purpose-parsers/object-types").OptionalizeProperties<{
2
+ correct: string[];
3
+ padding: boolean;
4
+ layout: "horizontal" | "vertical";
5
+ }>>>;
@@ -1,3 +1,6 @@
1
- import type { TableWidget } from "../../data-schema";
2
- import type { Parser } from "../parser-types";
3
- export declare const parseTableWidget: Parser<TableWidget>;
1
+ export declare const parseTableWidget: import("../parser-types").Parser<import("../..").WidgetOptions<"table", import("../general-purpose-parsers/object-types").OptionalizeProperties<{
2
+ headers: string[];
3
+ rows: number;
4
+ columns: number;
5
+ answers: string[][];
6
+ }>>>;
@@ -1,3 +1,4 @@
1
- import type { VideoWidget } from "../../data-schema";
2
- import type { Parser } from "../parser-types";
3
- export declare const parseVideoWidget: Parser<VideoWidget>;
1
+ export declare const parseVideoWidget: import("../parser-types").Parser<import("../..").WidgetOptions<"video", import("../general-purpose-parsers/object-types").OptionalizeProperties<{
2
+ location: string;
3
+ static: boolean | undefined;
4
+ }>>>;
package/dist/types.d.ts CHANGED
@@ -25,7 +25,7 @@ export type InteractiveMarkerType = MarkerType & {
25
25
  showCorrectness?: "correct" | "incorrect";
26
26
  focused?: boolean;
27
27
  };
28
- export type Relationship = "lt" | "gt" | "le" | "ge";
28
+ export type Relationship = "eq" | "lt" | "gt" | "le" | "ge";
29
29
  export type Alignment = "default" | "block" | "inline-block" | "inline" | "float-left" | "float-right" | "full-width";
30
30
  export type RecursiveReadonly<T> = {
31
31
  readonly [K in keyof T]: RecursiveReadonly<T[K]>;
@@ -1,3 +1,2 @@
1
- type Cloneable = null | undefined | boolean | string | number | Cloneable[] | readonly Cloneable[];
2
- declare function deepClone<T extends Cloneable>(obj: T): T;
1
+ declare function deepClone<T>(obj: T): T;
3
2
  export default deepClone;
@@ -0,0 +1,5 @@
1
+ import type { PerseusItem } from "../data-schema";
2
+ /**
3
+ * Returns true if the item has hints
4
+ */
5
+ export declare const itemHasHints: (item: PerseusItem) => boolean;
@@ -0,0 +1,5 @@
1
+ import type { PerseusItem } from "../data-schema";
2
+ /**
3
+ * Returns true if a Perseus item contains any widget with rationales.
4
+ */
5
+ export declare const itemHasRationales: (item: PerseusItem) => boolean;
@@ -1,7 +1,7 @@
1
1
  import type { PerseusItem } from "../data-schema";
2
2
  /**
3
- * Return a copy of a Perseus item with rubric data removed (ie answers)
3
+ * Return a copy of a PerseusItem with rubric data removed (ie answers)
4
4
  *
5
- * @param originalItem - the original, full Perseus item (which includes the rubric - aka answer data)
5
+ * @param original - the original, full PerseusItem (which includes the rubric - aka answer data)
6
6
  */
7
- export default function splitPerseusItem(originalItem: PerseusItem): PerseusItem;
7
+ export default function splitPerseusItem(original: PerseusItem): PerseusItem;
@@ -0,0 +1,7 @@
1
+ import type { PerseusRenderer } from "../data-schema";
2
+ /**
3
+ * Return a copy of a PerseusRenderer with rubric data removed (ie answers)
4
+ *
5
+ * @param original - the original, full PerseusRenderer (which includes the rubric - aka answer data)
6
+ */
7
+ export default function splitPerseusRenderer(original: PerseusRenderer): PerseusRenderer;
@@ -1,4 +1,5 @@
1
- import type { PerseusItem } from "../data-schema";
1
+ import type { PerseusItem, PerseusRenderer } from "../data-schema";
2
+ export declare function generateTestPerseusRenderer(customFields?: Partial<PerseusRenderer>): PerseusRenderer;
2
3
  /**
3
4
  * Generate a Perseus item object for testing purposes.
4
5
  *
@@ -28,3 +28,11 @@ export declare const getSupportedAlignments: (type: string) => ReadonlyArray<Ali
28
28
  * the exports of a widget's module.
29
29
  */
30
30
  export declare const getDefaultAlignment: (type: string) => Alignment;
31
+ /**
32
+ * We use a function here rather than registering widgets
33
+ * at the top-level of the file to avoid circular dependencies.
34
+ * Logic that needs core widget functionality
35
+ * (like a prod or in tests)
36
+ * need to call this function before trying to use that logic.
37
+ */
38
+ export declare function registerCoreWidgets(): void;
@@ -1,4 +1,3 @@
1
1
  import type { PerseusGrapherWidgetOptions } from "../../data-schema";
2
- type GrapherPublicWidgetOptions = Pick<PerseusGrapherWidgetOptions, "availableTypes" | "graph">;
2
+ export type GrapherPublicWidgetOptions = Pick<PerseusGrapherWidgetOptions, "availableTypes" | "graph">;
3
3
  export default function getGrapherPublicWidgetOptions(options: PerseusGrapherWidgetOptions): GrapherPublicWidgetOptions;
4
- export {};
@@ -0,0 +1,12 @@
1
+ import type { PerseusGroupWidgetOptions, PerseusRenderer } from "../../data-schema";
2
+ /**
3
+ * For details on the individual options, see the
4
+ * PerseusGroupWidgetOptions type
5
+ */
6
+ export type GroupPublicWidgetOptions = PerseusRenderer;
7
+ /**
8
+ * Given a PerseusGroupWidgetOptions object, return a new object with only
9
+ * the public options that should be exposed to the client.
10
+ */
11
+ declare function getGroupPublicWidgetOptions(options: PerseusGroupWidgetOptions): GroupPublicWidgetOptions;
12
+ export default getGroupPublicWidgetOptions;
@@ -0,0 +1,12 @@
1
+ import type { PerseusInputNumberWidgetOptions } from "../../data-schema";
2
+ /**
3
+ * For details on the individual options, see the
4
+ * PerseusInputNumberWidgetOptions type
5
+ */
6
+ type InputNumberPublicWidgetOptions = Pick<PerseusInputNumberWidgetOptions, "answerType" | "inexact" | "maxError" | "rightAlign" | "simplify" | "size" | "customKeypad">;
7
+ /**
8
+ * Given a PerseusInputNumberWidgetOptions object, return a new object with only
9
+ * the public options that should be exposed to the client.
10
+ */
11
+ declare function getInputNumberPublicWidgetOptions(options: PerseusInputNumberWidgetOptions): InputNumberPublicWidgetOptions;
12
+ export default getInputNumberPublicWidgetOptions;
@@ -3,7 +3,9 @@ import type getCSProgramPublicWidgetOptions from "./cs-program/cs-program-util";
3
3
  import type getDropdownPublicWidgetOptions from "./dropdown/dropdown-util";
4
4
  import type getExpressionPublicWidgetOptions from "./expression/expression-util";
5
5
  import type getGrapherPublicWidgetOptions from "./grapher/grapher-util";
6
+ import type getGroupPublicWidgetOptions from "./group/group-util";
6
7
  import type getIFramePublicWidgetOptions from "./iframe/iframe-util";
8
+ import type getInputNumberPublicWidgetOptions from "./input-number/input-number-util";
7
9
  import type getInteractiveGraphPublicWidgetOptions from "./interactive-graph/interactive-graph-util";
8
10
  import type getLabelImagePublicWidgetOptions from "./label-image/label-image-util";
9
11
  import type getMatcherPublicWidgetOptions from "./matcher/matcher-util";
@@ -26,7 +28,7 @@ export type WidgetOptionsUpgradeMap = {
26
28
  * TODO(LEMS-2870): figure out how to make this generic so we don't need to be
27
29
  * so reliant on a set group of widgets
28
30
  */
29
- export type PublicWidgetOptionsFunction = typeof getMatcherPublicWidgetOptions | typeof getPlotterPublicWidgetOptions | typeof getIFramePublicWidgetOptions | typeof getRadioPublicWidgetOptions | typeof getNumericInputPublicWidgetOptions | typeof getDropdownPublicWidgetOptions | typeof getCategorizerPublicWidgetOptions | typeof getOrdererPublicWidgetOptions | typeof getExpressionPublicWidgetOptions | typeof getInteractiveGraphPublicWidgetOptions | typeof getLabelImagePublicWidgetOptions | typeof getSorterPublicWidgetOptions | typeof getCSProgramPublicWidgetOptions | typeof getNumberLinePublicWidgetOptions | typeof getTablePublicWidgetOptions | typeof getGrapherPublicWidgetOptions | typeof getMatrixPublicWidgetOptions;
31
+ export type PublicWidgetOptionsFunction = typeof getCategorizerPublicWidgetOptions | typeof getCSProgramPublicWidgetOptions | typeof getDropdownPublicWidgetOptions | typeof getExpressionPublicWidgetOptions | typeof getGrapherPublicWidgetOptions | typeof getGroupPublicWidgetOptions | typeof getIFramePublicWidgetOptions | typeof getInputNumberPublicWidgetOptions | typeof getInteractiveGraphPublicWidgetOptions | typeof getLabelImagePublicWidgetOptions | typeof getMatcherPublicWidgetOptions | typeof getMatrixPublicWidgetOptions | typeof getNumberLinePublicWidgetOptions | typeof getNumericInputPublicWidgetOptions | typeof getOrdererPublicWidgetOptions | typeof getPlotterPublicWidgetOptions | typeof getRadioPublicWidgetOptions | typeof getSorterPublicWidgetOptions | typeof getTablePublicWidgetOptions;
30
32
  export type WidgetLogic = {
31
33
  name: string;
32
34
  version?: Version;
@@ -1,4 +1,3 @@
1
1
  import type { PerseusMatrixWidgetOptions } from "../../data-schema";
2
- type MatrixPublicWidgetOptions = Pick<PerseusMatrixWidgetOptions, "prefix" | "suffix" | "cursorPosition" | "matrixBoardSize" | "static">;
2
+ export type MatrixPublicWidgetOptions = Pick<PerseusMatrixWidgetOptions, "prefix" | "suffix" | "cursorPosition" | "matrixBoardSize" | "static">;
3
3
  export default function getMatrixPublicWidgetOptions(options: PerseusMatrixWidgetOptions): MatrixPublicWidgetOptions;
4
- export {};
@@ -1,4 +1,3 @@
1
1
  import type { PerseusNumberLineWidgetOptions } from "../../data-schema";
2
- type NumberLinePublicWidgetOptions = Pick<PerseusNumberLineWidgetOptions, "range" | "labelRange" | "labelStyle" | "labelTicks" | "isTickCtrl" | "divisionRange" | "numDivisions" | "snapDivisions" | "tickStep" | "initialX" | "showTooltips" | "static">;
2
+ export type NumberLinePublicWidgetOptions = Pick<PerseusNumberLineWidgetOptions, "range" | "labelRange" | "labelStyle" | "labelTicks" | "isTickCtrl" | "isInequality" | "divisionRange" | "numDivisions" | "snapDivisions" | "tickStep" | "initialX" | "showTooltips" | "static">;
3
3
  export default function getNumberLinePublicWidgetOptions(options: PerseusNumberLineWidgetOptions): NumberLinePublicWidgetOptions;
4
- export {};
@@ -3,14 +3,10 @@ import type { PerseusOrdererWidgetOptions } from "../../data-schema";
3
3
  * For details on the individual options, see the
4
4
  * PerseusOrdererWidgetOptions type
5
5
  */
6
- type OrdererPublicWidgetOptions = {
7
- options: PerseusOrdererWidgetOptions["options"];
8
- height: PerseusOrdererWidgetOptions["height"];
9
- layout: PerseusOrdererWidgetOptions["layout"];
10
- };
6
+ export type OrdererPublicWidgetOptions = Pick<PerseusOrdererWidgetOptions, "options" | "height" | "layout">;
11
7
  /**
12
8
  * Given a PerseusOrdererWidgetOptions object, return a new object with only
13
9
  * the public options that should be exposed to the client.
14
10
  */
15
- declare function getOrdererPublicWidgetOptions(options: PerseusOrdererWidgetOptions): OrdererPublicWidgetOptions;
11
+ declare function getOrdererPublicWidgetOptions(fullOptions: PerseusOrdererWidgetOptions): OrdererPublicWidgetOptions;
16
12
  export default getOrdererPublicWidgetOptions;
@@ -3,7 +3,7 @@ import type { PerseusPlotterWidgetOptions } from "../../data-schema";
3
3
  * For details on the individual options, see the
4
4
  * PerseusPlotterWidgetOptions type
5
5
  */
6
- type PlotterPublicWidgetOptions = Omit<PerseusPlotterWidgetOptions, "correct">;
6
+ export type PlotterPublicWidgetOptions = Omit<PerseusPlotterWidgetOptions, "correct">;
7
7
  /**
8
8
  * Given a PerseusPlotterWidgetOptions object, return a new object with only
9
9
  * the public options that should be exposed to the client.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Shared Perseus infrastructure",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "9.0.0",
6
+ "version": "10.1.0",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -22,8 +22,9 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@khanacademy/kas": "2.0.2",
26
- "@khanacademy/perseus-utils": "2.0.1"
25
+ "tiny-invariant": "^1.3.1",
26
+ "@khanacademy/kas": "2.0.3",
27
+ "@khanacademy/perseus-utils": "2.0.2"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@khanacademy/wonder-stuff-core": "1.5.4",
@@ -1 +0,0 @@
1
- export declare function isObject(x: unknown): x is Record<keyof any, unknown>;