@khanacademy/perseus 7.2.1 → 9.0.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.
- package/CHANGELOG.md +47 -0
- package/dist/article-renderer.d.ts +27 -40
- package/dist/components/math-input.d.ts +1 -1
- package/dist/components/sortable.d.ts +1 -1
- package/dist/components/tex-buttons.d.ts +1 -1
- package/dist/dependencies.d.ts +7 -1
- package/dist/es/index.js +1205 -1218
- package/dist/es/index.js.map +1 -1
- package/dist/hints-renderer.d.ts +1 -1
- package/dist/index.js +1207 -1221
- package/dist/index.js.map +1 -1
- package/dist/interaction-tracker.d.ts +3 -3
- package/dist/item-renderer.d.ts +2 -1
- package/dist/mixins/provide-keypad.d.ts +15 -12
- package/dist/multi-items/multi-renderer.d.ts +2 -1
- package/dist/perseus-api.d.ts +2 -2
- package/dist/renderer.d.ts +1 -1
- package/dist/server-item-renderer.d.ts +3 -1
- package/dist/types.d.ts +32 -11
- package/dist/widgets/expression.d.ts +410 -13
- package/dist/widgets/graded-group.d.ts +3 -3
- package/dist/widgets/interactive-graph.d.ts +1 -1
- package/dist/widgets/sequence.d.ts +3 -3
- package/dist/widgets/table.d.ts +8 -1
- package/dist/widgets.d.ts +1 -1
- package/package.json +34 -34
- package/src/__stories__/article-renderer.stories.tsx +35 -2
- package/src/__testdata__/article-renderer.testdata.ts +74 -1
- package/src/__testdata__/item-renderer.testdata.ts +1 -1
- package/src/__testdata__/renderer.testdata.ts +1 -1
- package/src/__tests__/item-renderer.test.tsx +13 -2
- package/src/__tests__/mock-asset-loading-widget.tsx +1 -1
- package/src/__tests__/perseus-markdown.test.ts +17 -17
- package/src/__tests__/renderer-api.test.tsx +21 -21
- package/src/__tests__/renderer.test.tsx +13 -13
- package/src/__tests__/server-item-renderer.test.tsx +12 -4
- package/src/__tests__/tex-wrangler.test.ts +1 -1
- package/src/article-renderer.tsx +75 -66
- package/src/components/__tests__/number-input.test.tsx +4 -4
- package/src/components/__tests__/sortable.test.tsx +2 -2
- package/src/components/fixed-to-responsive.tsx +1 -1
- package/src/components/graph.tsx +11 -11
- package/src/components/graphie-classes.ts +7 -7
- package/src/components/graphie.tsx +14 -14
- package/src/components/highlighting/highlightable-content.tsx +1 -1
- package/src/components/highlighting/ui/highlight-renderer.tsx +1 -1
- package/src/components/highlighting/ui/util.ts +2 -2
- package/src/components/highlighting/word-indexer.tsx +4 -4
- package/src/components/icon.tsx +1 -1
- package/src/components/image-loader.tsx +4 -4
- package/src/components/input-with-examples.tsx +2 -2
- package/src/components/lint.tsx +1 -1
- package/src/components/math-input.tsx +5 -5
- package/src/components/math-output.tsx +1 -1
- package/src/components/multi-button-group.tsx +1 -1
- package/src/components/number-input.tsx +10 -10
- package/src/components/prop-check-box.tsx +1 -1
- package/src/components/simple-keypad-input.tsx +4 -4
- package/src/components/sortable.tsx +42 -41
- package/src/components/svg-image.tsx +12 -12
- package/src/components/tex-buttons.tsx +4 -3
- package/src/components/text-input.tsx +8 -8
- package/src/components/text-list-editor.tsx +11 -11
- package/src/components/visibility-observer/create-visibility-observer.ts +1 -1
- package/src/components/visibility-observer/visibility-observer.tsx +2 -2
- package/src/components/zoomable-tex.tsx +3 -3
- package/src/components/zoomable.tsx +8 -8
- package/src/dependencies.ts +16 -1
- package/src/hint-renderer.tsx +3 -3
- package/src/hints-renderer.tsx +11 -11
- package/src/init.ts +1 -1
- package/src/interaction-tracker.ts +7 -7
- package/src/interactive2/__tests__/movable-point.test.ts +1 -1
- package/src/interactive2/interactive-util.ts +6 -6
- package/src/interactive2/movable-helper-methods.ts +2 -2
- package/src/interactive2/movable-line-options.ts +37 -37
- package/src/interactive2/movable-line.ts +2 -2
- package/src/interactive2/movable-point-options.ts +29 -29
- package/src/interactive2/movable-point.tsx +2 -2
- package/src/interactive2/movable-polygon-options.ts +45 -45
- package/src/interactive2/movable-polygon.ts +2 -2
- package/src/interactive2/movable.ts +2 -2
- package/src/interactive2/objective_.ts +1 -1
- package/src/interactive2/wrapped-defaults.ts +2 -2
- package/src/interactive2/wrapped-ellipse.ts +9 -9
- package/src/interactive2/wrapped-line.ts +8 -8
- package/src/interactive2/wrapped-path.ts +5 -5
- package/src/item-renderer.tsx +66 -48
- package/src/mixins/changeable.ts +2 -2
- package/src/mixins/editor-jsonify.ts +1 -1
- package/src/mixins/provide-keypad.tsx +23 -37
- package/src/mixins/widget-jsonify-deprecated.ts +1 -1
- package/src/multi-items/__tests__/items.test.ts +1 -1
- package/src/multi-items/__tests__/multi-renderer.test.tsx +13 -8
- package/src/multi-items/__tests__/trees.test.ts +12 -12
- package/src/multi-items/item-types.ts +2 -2
- package/src/multi-items/items.ts +1 -1
- package/src/multi-items/multi-renderer.tsx +30 -18
- package/src/multi-items/prop-type-builders.ts +2 -2
- package/src/multi-items/tree-types.ts +4 -4
- package/src/multi-items/trees.ts +16 -16
- package/src/perseus-env.ts +2 -2
- package/src/perseus-markdown.tsx +5 -5
- package/src/renderer.tsx +39 -39
- package/src/server-item-renderer.tsx +26 -21
- package/src/sigfigs.ts +1 -1
- package/src/traversal.ts +1 -1
- package/src/types.ts +52 -16
- package/src/util/answer-types.ts +14 -14
- package/src/util/geometry.ts +7 -7
- package/src/util/graphie.ts +32 -32
- package/src/util/interactive.ts +118 -118
- package/src/util/math.ts +4 -4
- package/src/util/react-render.tsx +1 -1
- package/src/util/scroll-utils.ts +2 -2
- package/src/util/tex.ts +3 -3
- package/src/util.ts +15 -15
- package/src/widget-container.tsx +1 -1
- package/src/widgets/__stories__/definition.stories.tsx +8 -1
- package/src/widgets/__stories__/expression.stories.tsx +2 -2
- package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +3 -3
- package/src/widgets/__testdata__/numeric-input.testdata.ts +1 -1
- package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +2 -2
- package/src/widgets/__tests__/{expression.test.ts → expression.test.tsx} +77 -11
- package/src/widgets/__tests__/grapher.cypress.ts +32 -32
- package/src/widgets/__tests__/group.test.tsx +1 -1
- package/src/widgets/__tests__/interactive-graph.cypress.ts +40 -40
- package/src/widgets/__tests__/interactive-graph.test.ts +1 -1
- package/src/widgets/__tests__/numeric-input.test.ts +1 -1
- package/src/widgets/__tests__/passage.test.tsx +2 -2
- package/src/widgets/__tests__/plotter.test.tsx +2 -1
- package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
- package/src/widgets/__tests__/renderQuestion.tsx +29 -21
- package/src/widgets/categorizer.tsx +4 -4
- package/src/widgets/cs-program.tsx +2 -2
- package/src/widgets/dropdown.tsx +1 -1
- package/src/widgets/expression.tsx +92 -57
- package/src/widgets/graded-group-set.tsx +5 -5
- package/src/widgets/graded-group.tsx +29 -21
- package/src/widgets/grapher/util.tsx +6 -6
- package/src/widgets/grapher.tsx +10 -10
- package/src/widgets/group.tsx +3 -3
- package/src/widgets/iframe.tsx +2 -2
- package/src/widgets/image.tsx +1 -1
- package/src/widgets/input-number.tsx +4 -4
- package/src/widgets/interaction.tsx +77 -77
- package/src/widgets/interactive-graph.tsx +109 -107
- package/src/widgets/label-image/marker.tsx +2 -2
- package/src/widgets/label-image.test.ts +1 -1
- package/src/widgets/label-image.tsx +7 -7
- package/src/widgets/lights-puzzle.tsx +2 -2
- package/src/widgets/matcher.tsx +6 -6
- package/src/widgets/matrix.tsx +20 -20
- package/src/widgets/measurer.tsx +3 -3
- package/src/widgets/molecule/__tests__/layout.test.ts +4 -4
- package/src/widgets/molecule/__tests__/parser.test.ts +14 -14
- package/src/widgets/molecule/smiles-parser.ts +3 -3
- package/src/widgets/molecule.tsx +4 -4
- package/src/widgets/number-line.tsx +11 -11
- package/src/widgets/numeric-input.tsx +11 -11
- package/src/widgets/orderer.tsx +38 -38
- package/src/widgets/passage/__tests__/passage-markdown.test.ts +1 -1
- package/src/widgets/passage/passage-markdown.tsx +4 -4
- package/src/widgets/passage-ref-target.tsx +1 -1
- package/src/widgets/passage-ref.tsx +4 -6
- package/src/widgets/passage.tsx +11 -11
- package/src/widgets/plotter.tsx +9 -9
- package/src/widgets/radio/base-radio.tsx +11 -11
- package/src/widgets/radio/choice-icon/choice-icon.tsx +2 -2
- package/src/widgets/radio/choice.tsx +1 -1
- package/src/widgets/radio/option-status.tsx +1 -1
- package/src/widgets/radio/widget.tsx +6 -6
- package/src/widgets/radio.ts +1 -1
- package/src/widgets/reaction-diagram.tsx +8 -8
- package/src/widgets/sequence.tsx +12 -4
- package/src/widgets/simulator.tsx +14 -14
- package/src/widgets/sorter.tsx +4 -4
- package/src/widgets/table.tsx +8 -8
- package/src/widgets/transformer.tsx +92 -92
- package/src/widgets/unit.tsx +17 -17
- package/src/widgets/video-transcript-link.test.tsx +3 -3
- package/src/widgets/video-transcript-link.tsx +1 -1
- package/src/widgets/video.tsx +1 -1
- package/src/widgets.ts +5 -5
- package/src/zoom.ts +22 -22
- package/tsconfig-build.tsbuildinfo +1 -1
- package/dist/a11y.js.flow +0 -11
- package/dist/all-widgets.js.flow +0 -33
- package/dist/article-renderer.js.flow +0 -73
- package/dist/asset-context.js.flow +0 -15
- package/dist/basic-widgets.js.flow +0 -33
- package/dist/components/button-group.js.flow +0 -33
- package/dist/components/constants.js.flow +0 -13
- package/dist/components/fixed-to-responsive.js.flow +0 -34
- package/dist/components/graph.js.flow +0 -66
- package/dist/components/graphie-classes.js.flow +0 -19
- package/dist/components/graphie-movables.js.flow +0 -22
- package/dist/components/graphie.js.flow +0 -69
- package/dist/components/highlighting/highlightable-content.js.flow +0 -56
- package/dist/components/highlighting/highlights.js.flow +0 -54
- package/dist/components/highlighting/ranges.js.flow +0 -60
- package/dist/components/highlighting/types.js.flow +0 -70
- package/dist/components/highlighting/ui/highlight-renderer.js.flow +0 -43
- package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +0 -41
- package/dist/components/highlighting/ui/highlight-tooltip.js.flow +0 -22
- package/dist/components/highlighting/ui/highlighting-ui.js.flow +0 -30
- package/dist/components/highlighting/ui/selection-tracker.js.flow +0 -54
- package/dist/components/highlighting/ui/types.js.flow +0 -22
- package/dist/components/highlighting/ui/util.js.flow +0 -42
- package/dist/components/highlighting/word-indexer.js.flow +0 -21
- package/dist/components/hud.js.flow +0 -14
- package/dist/components/icon.js.flow +0 -31
- package/dist/components/image-loader.js.flow +0 -49
- package/dist/components/info-tip/info-tip.js.flow +0 -20
- package/dist/components/info-tip.js.flow +0 -18
- package/dist/components/inline-icon.js.flow +0 -39
- package/dist/components/input-with-examples.js.flow +0 -58
- package/dist/components/lint.js.flow +0 -58
- package/dist/components/math-input.js.flow +0 -49
- package/dist/components/math-output.js.flow +0 -33
- package/dist/components/multi-button-group.js.flow +0 -35
- package/dist/components/number-input.js.flow +0 -42
- package/dist/components/prop-check-box.js.flow +0 -8
- package/dist/components/range-input.js.flow +0 -20
- package/dist/components/simple-keypad-input.js.flow +0 -16
- package/dist/components/sortable.js.flow +0 -91
- package/dist/components/stub-tag-editor.js.flow +0 -18
- package/dist/components/svg-image.js.flow +0 -85
- package/dist/components/tex-buttons.js.flow +0 -26
- package/dist/components/tex.js.flow +0 -25
- package/dist/components/text-input.js.flow +0 -39
- package/dist/components/text-list-editor.js.flow +0 -22
- package/dist/components/tooltip.js.flow +0 -51
- package/dist/components/visibility-observer/create-visibility-observer.js.flow +0 -23
- package/dist/components/visibility-observer/get-scroll-parent.js.flow +0 -7
- package/dist/components/visibility-observer/visibility-observer.js.flow +0 -36
- package/dist/components/zoomable-tex.js.flow +0 -18
- package/dist/components/zoomable.js.flow +0 -70
- package/dist/components.js.flow +0 -22
- package/dist/definition-context.js.flow +0 -25
- package/dist/dependencies.js.flow +0 -9
- package/dist/error-boundary.js.flow +0 -19
- package/dist/extra-widgets.js.flow +0 -33
- package/dist/hint-renderer.js.flow +0 -32
- package/dist/hints-renderer.js.flow +0 -41
- package/dist/icon-paths.js.flow +0 -123
- package/dist/index.js.flow +0 -134
- package/dist/init.js.flow +0 -20
- package/dist/interaction-tracker.js.flow +0 -35
- package/dist/interactive2/interactive-util.js.flow +0 -50
- package/dist/interactive2/movable-helper-methods.js.flow +0 -15
- package/dist/interactive2/movable-line-options.js.flow +0 -44
- package/dist/interactive2/movable-line.js.flow +0 -8
- package/dist/interactive2/movable-point-options.js.flow +0 -44
- package/dist/interactive2/movable-point.js.flow +0 -8
- package/dist/interactive2/movable-polygon-options.js.flow +0 -47
- package/dist/interactive2/movable-polygon.js.flow +0 -8
- package/dist/interactive2/movable.js.flow +0 -8
- package/dist/interactive2/objective_.js.flow +0 -25
- package/dist/interactive2/types.js.flow +0 -8
- package/dist/interactive2/wrapped-defaults.js.flow +0 -11
- package/dist/interactive2/wrapped-ellipse.js.flow +0 -14
- package/dist/interactive2/wrapped-line.js.flow +0 -14
- package/dist/interactive2/wrapped-path.js.flow +0 -13
- package/dist/interactive2.js.flow +0 -16
- package/dist/item-renderer.js.flow +0 -132
- package/dist/item-version.js.flow +0 -11
- package/dist/jipt-paragraphs.js.flow +0 -14
- package/dist/loading-context.js.flow +0 -12
- package/dist/logging/log.js.flow +0 -62
- package/dist/mixins/changeable.js.flow +0 -33
- package/dist/mixins/editor-jsonify.js.flow +0 -10
- package/dist/mixins/provide-keypad.js.flow +0 -33
- package/dist/mixins/widget-jsonify-deprecated.js.flow +0 -11
- package/dist/mixins/widget-prop-denylist.js.flow +0 -20
- package/dist/multi-items/item-types.js.flow +0 -55
- package/dist/multi-items/items.js.flow +0 -66
- package/dist/multi-items/multi-renderer.js.flow +0 -213
- package/dist/multi-items/prop-type-builders.js.flow +0 -22
- package/dist/multi-items/shape-types.js.flow +0 -60
- package/dist/multi-items/shapes.js.flow +0 -25
- package/dist/multi-items/tree-types.js.flow +0 -45
- package/dist/multi-items/trees.js.flow +0 -147
- package/dist/multi-items.js.flow +0 -36
- package/dist/perseus-api.js.flow +0 -151
- package/dist/perseus-env.js.flow +0 -6
- package/dist/perseus-error.js.flow +0 -16
- package/dist/perseus-markdown.js.flow +0 -20
- package/dist/perseus-types.js.flow +0 -1041
- package/dist/question-paragraph.js.flow +0 -17
- package/dist/renderability.js.flow +0 -19
- package/dist/renderer.js.flow +0 -325
- package/dist/server-item-renderer.js.flow +0 -132
- package/dist/sigfigs.js.flow +0 -41
- package/dist/styles/constants.js.flow +0 -62
- package/dist/styles/global-constants.js.flow +0 -348
- package/dist/styles/global-styles.js.flow +0 -53
- package/dist/styles/media-queries.js.flow +0 -35
- package/dist/styles/shared.js.flow +0 -8
- package/dist/tex-wrangler.js.flow +0 -13
- package/dist/translation-linter.js.flow +0 -32
- package/dist/traversal.js.flow +0 -26
- package/dist/types.js.flow +0 -318
- package/dist/util/a11y.js.flow +0 -8
- package/dist/util/answer-types.js.flow +0 -49
- package/dist/util/colors.js.flow +0 -95
- package/dist/util/fix-passage-refs.js.flow +0 -8
- package/dist/util/geometry.js.flow +0 -37
- package/dist/util/graph-utils.js.flow +0 -9
- package/dist/util/graphie.js.flow +0 -8
- package/dist/util/interactive.js.flow +0 -11
- package/dist/util/katex-preprocess.js.flow +0 -12
- package/dist/util/math.js.flow +0 -62
- package/dist/util/mobile-native-utils.js.flow +0 -12
- package/dist/util/react-render.js.flow +0 -12
- package/dist/util/register-all-widgets-for-testing.js.flow +0 -7
- package/dist/util/scroll-utils.js.flow +0 -19
- package/dist/util/sizing-utils.js.flow +0 -20
- package/dist/util/tex.js.flow +0 -17
- package/dist/util/url-utils.js.flow +0 -11
- package/dist/util.graphie.js.flow +0 -14
- package/dist/util.js.flow +0 -319
- package/dist/version.js.flow +0 -17
- package/dist/widget-container.js.flow +0 -33
- package/dist/widgets/categorizer.js.flow +0 -70
- package/dist/widgets/cs-program.js.flow +0 -54
- package/dist/widgets/definition.js.flow +0 -57
- package/dist/widgets/dropdown.js.flow +0 -63
- package/dist/widgets/explanation.js.flow +0 -58
- package/dist/widgets/expression.js.flow +0 -116
- package/dist/widgets/graded-group-answer-bar.js.flow +0 -24
- package/dist/widgets/graded-group-set.js.flow +0 -65
- package/dist/widgets/graded-group.js.flow +0 -78
- package/dist/widgets/grapher/util.js.flow +0 -38
- package/dist/widgets/grapher.js.flow +0 -102
- package/dist/widgets/group.js.flow +0 -60
- package/dist/widgets/iframe.js.flow +0 -53
- package/dist/widgets/image.js.flow +0 -73
- package/dist/widgets/input-number.js.flow +0 -94
- package/dist/widgets/interaction/arrow-picker.js.flow +0 -21
- package/dist/widgets/interaction/color-picker.js.flow +0 -23
- package/dist/widgets/interaction/dash-picker.js.flow +0 -21
- package/dist/widgets/interaction/element-container.js.flow +0 -28
- package/dist/widgets/interaction.js.flow +0 -60
- package/dist/widgets/interactive-graph.js.flow +0 -239
- package/dist/widgets/label-image/answer-choices.js.flow +0 -55
- package/dist/widgets/label-image/marker.js.flow +0 -31
- package/dist/widgets/label-image/types.js.flow +0 -23
- package/dist/widgets/label-image.js.flow +0 -142
- package/dist/widgets/lights-puzzle.js.flow +0 -58
- package/dist/widgets/matcher.js.flow +0 -106
- package/dist/widgets/matrix.js.flow +0 -80
- package/dist/widgets/measurer.js.flow +0 -30
- package/dist/widgets/molecule/molecule-drawing.js.flow +0 -11
- package/dist/widgets/molecule/molecule-layout.js.flow +0 -96
- package/dist/widgets/molecule/smiles-parser.js.flow +0 -26
- package/dist/widgets/molecule.js.flow +0 -60
- package/dist/widgets/number-line.js.flow +0 -102
- package/dist/widgets/numeric-input.js.flow +0 -105
- package/dist/widgets/orderer.js.flow +0 -81
- package/dist/widgets/passage/passage-markdown.js.flow +0 -33
- package/dist/widgets/passage-ref-target.js.flow +0 -52
- package/dist/widgets/passage-ref.js.flow +0 -85
- package/dist/widgets/passage.js.flow +0 -157
- package/dist/widgets/plotter.js.flow +0 -112
- package/dist/widgets/radio/base-radio.js.flow +0 -50
- package/dist/widgets/radio/choice-a11y-text.js.flow +0 -14
- package/dist/widgets/radio/choice-icon/choice-icon.js.flow +0 -22
- package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +0 -16
- package/dist/widgets/radio/choice-icon/shared-styles.js.flow +0 -11
- package/dist/widgets/radio/choice-none-above.js.flow +0 -16
- package/dist/widgets/radio/choice.js.flow +0 -29
- package/dist/widgets/radio/choice.jsx.fixture.js.flow +0 -7
- package/dist/widgets/radio/focus-ring.js.flow +0 -22
- package/dist/widgets/radio/option-status.js.flow +0 -16
- package/dist/widgets/radio/util.js.flow +0 -12
- package/dist/widgets/radio/widget.js.flow +0 -80
- package/dist/widgets/radio.js.flow +0 -31
- package/dist/widgets/reaction-diagram.js.flow +0 -46
- package/dist/widgets/sequence.js.flow +0 -53
- package/dist/widgets/simulator.js.flow +0 -107
- package/dist/widgets/sorter.js.flow +0 -102
- package/dist/widgets/table.js.flow +0 -67
- package/dist/widgets/transformer.js.flow +0 -127
- package/dist/widgets/unit.js.flow +0 -93
- package/dist/widgets/video-transcript-link.js.flow +0 -15
- package/dist/widgets/video.js.flow +0 -57
- package/dist/widgets.js.flow +0 -108
- package/dist/zoom.js.flow +0 -7
- package/src/multi-items/item-types.js.flow +0 -55
package/src/util/math.ts
CHANGED
|
@@ -38,7 +38,7 @@ const KhanMath = {
|
|
|
38
38
|
// TODO(kevinb): rewrite using rest args instead of arguments
|
|
39
39
|
// eslint-disable-next-line prefer-rest-params
|
|
40
40
|
const rest = [].slice.call(arguments, 1);
|
|
41
|
-
// @ts-expect-error
|
|
41
|
+
// @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
|
|
42
42
|
return KhanMath.getGCD(a, KhanMath.getGCD(...rest));
|
|
43
43
|
}
|
|
44
44
|
let mod;
|
|
@@ -60,7 +60,7 @@ const KhanMath = {
|
|
|
60
60
|
// TODO(kevinb): rewrite using rest args instead of arguments
|
|
61
61
|
// eslint-disable-next-line prefer-rest-params
|
|
62
62
|
const rest = [].slice.call(arguments, 1);
|
|
63
|
-
// @ts-expect-error
|
|
63
|
+
// @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
|
|
64
64
|
return KhanMath.getLCM(a, KhanMath.getLCM(...rest));
|
|
65
65
|
}
|
|
66
66
|
return Math.abs(a * b) / KhanMath.getGCD(a, b);
|
|
@@ -91,7 +91,7 @@ const KhanMath = {
|
|
|
91
91
|
|
|
92
92
|
return true;
|
|
93
93
|
},
|
|
94
|
-
// @ts-expect-error
|
|
94
|
+
// @ts-expect-error - TS2366 - Function lacks ending return statement and return type does not include 'undefined'.
|
|
95
95
|
getPrimeFactorization: function (number: number): ReadonlyArray<number> {
|
|
96
96
|
if (number === 1) {
|
|
97
97
|
return [];
|
|
@@ -121,7 +121,7 @@ const KhanMath = {
|
|
|
121
121
|
// Round a number to a certain number of decimal places
|
|
122
122
|
roundTo: function (precision: number, num: number): number {
|
|
123
123
|
const factor = Math.pow(10, precision).toFixed(5);
|
|
124
|
-
// @ts-expect-error
|
|
124
|
+
// @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'number'. | TS2363 - The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. | TS2363 - The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
|
|
125
125
|
return Math.round((num * factor).toFixed(5)) / factor;
|
|
126
126
|
},
|
|
127
127
|
|
|
@@ -8,7 +8,7 @@ export default function render<ElementType extends React.ElementType>(
|
|
|
8
8
|
callback?: () => void,
|
|
9
9
|
): React.ElementRef<ElementType> {
|
|
10
10
|
// TODO(LP-11406): Replace this, or callers, with React Portal
|
|
11
|
-
// @ts-expect-error
|
|
11
|
+
// @ts-expect-error - TS2322 - Type 'void' is not assignable to type 'ElementRef<ElementType>'.
|
|
12
12
|
// eslint-disable-next-line no-restricted-syntax
|
|
13
13
|
return ReactDOM.render(
|
|
14
14
|
/**
|
package/src/util/scroll-utils.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
// Polyfill scrollTo if it doesn't exist
|
|
6
6
|
if (typeof HTMLElement !== "undefined" && !HTMLElement.prototype.scrollTo) {
|
|
7
|
-
// @ts-expect-error
|
|
7
|
+
// @ts-expect-error - TS2322 - Type '(left: number, top: any) => void' is not assignable to type '{ (options?: ScrollToOptions | undefined): void; (x: number, y: number): void; }'.
|
|
8
8
|
HTMLElement.prototype.scrollTo = function (left, top: any) {
|
|
9
9
|
this.scrollLeft = left;
|
|
10
10
|
this.scrollTop = top;
|
|
@@ -44,7 +44,7 @@ const scrollElementToOffset = (
|
|
|
44
44
|
const startPosition =
|
|
45
45
|
elementOrWindow === window
|
|
46
46
|
? window.pageYOffset
|
|
47
|
-
: // @ts-expect-error
|
|
47
|
+
: // @ts-expect-error - TS2551 - Property 'scrollTop' does not exist on type 'HTMLElement | Window'. Did you mean 'scrollTo'?
|
|
48
48
|
elementOrWindow.scrollTop;
|
|
49
49
|
const endPosition = offset;
|
|
50
50
|
const scrollDistance = endPosition - startPosition;
|
package/src/util/tex.ts
CHANGED
|
@@ -79,11 +79,11 @@ export default {
|
|
|
79
79
|
if (text == null) {
|
|
80
80
|
if ($elem.attr("data-math-formula")) {
|
|
81
81
|
// The old typeset formula
|
|
82
|
-
// @ts-expect-error
|
|
82
|
+
// @ts-expect-error - TS2322 - Type 'string | undefined' is not assignable to type 'string'.
|
|
83
83
|
text = $elem.attr("data-math-formula");
|
|
84
84
|
} else if (script) {
|
|
85
85
|
// The contents of the <script> tag
|
|
86
|
-
// @ts-expect-error
|
|
86
|
+
// @ts-expect-error - TS2339 - Property 'text' does not exist on type 'HTMLElement'.
|
|
87
87
|
text = script.text || script.textContent;
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -130,7 +130,7 @@ export default {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
// @ts-expect-error
|
|
133
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
134
134
|
$elem.text($elem.attr("data-math-formula"));
|
|
135
135
|
$elem.attr("data-math-formula", null);
|
|
136
136
|
$elem.attr("data-math-type", null);
|
package/src/util.ts
CHANGED
|
@@ -58,9 +58,9 @@ const nestedMap = function <T, M>(
|
|
|
58
58
|
context: unknown,
|
|
59
59
|
): M | ReadonlyArray<M> {
|
|
60
60
|
if (Array.isArray(children)) {
|
|
61
|
-
// @ts-expect-error
|
|
61
|
+
// @ts-expect-error - TS2322 - Type '(M | readonly M[])[]' is not assignable to type 'M | readonly M[]'.
|
|
62
62
|
return _.map(children, function (child) {
|
|
63
|
-
// @ts-expect-error
|
|
63
|
+
// @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.
|
|
64
64
|
return nestedMap(child, func);
|
|
65
65
|
});
|
|
66
66
|
}
|
|
@@ -149,9 +149,9 @@ function shuffle<T>(
|
|
|
149
149
|
const newEnd = Math.floor(random() * top),
|
|
150
150
|
temp = shuffled[newEnd];
|
|
151
151
|
|
|
152
|
-
// @ts-expect-error
|
|
152
|
+
// @ts-expect-error - TS2542 - Index signature in type 'readonly T[]' only permits reading.
|
|
153
153
|
shuffled[newEnd] = shuffled[top - 1];
|
|
154
|
-
// @ts-expect-error
|
|
154
|
+
// @ts-expect-error - TS2542 - Index signature in type 'readonly T[]' only permits reading.
|
|
155
155
|
shuffled[top - 1] = temp;
|
|
156
156
|
}
|
|
157
157
|
} while (ensurePermuted && _.isEqual(array, shuffled));
|
|
@@ -179,14 +179,14 @@ const split: (str: string, r: RegExp) => ReadonlyArray<string> = "x".split(
|
|
|
179
179
|
|
|
180
180
|
while ((match = r.exec(str))) {
|
|
181
181
|
const m = match;
|
|
182
|
-
// @ts-expect-error
|
|
182
|
+
// @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'.
|
|
183
183
|
output.push(str.slice(lastIndex, m.index));
|
|
184
|
-
// @ts-expect-error
|
|
184
|
+
// @ts-expect-error - TS2345 - Argument of type 'any' is not assignable to parameter of type 'never'.
|
|
185
185
|
output.push(...m.slice(1));
|
|
186
186
|
lastIndex = m.index + m[0].length;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
// @ts-expect-error
|
|
189
|
+
// @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'.
|
|
190
190
|
output.push(str.slice(lastIndex));
|
|
191
191
|
return output;
|
|
192
192
|
};
|
|
@@ -287,7 +287,7 @@ function keScoreFromPerseusScore(
|
|
|
287
287
|
};
|
|
288
288
|
}
|
|
289
289
|
throw new PerseusError(
|
|
290
|
-
// @ts-expect-error
|
|
290
|
+
// @ts-expect-error - TS2339 - Property 'type' does not exist on type 'never'.
|
|
291
291
|
"Invalid score type: " + score.type,
|
|
292
292
|
Errors.InvalidInput,
|
|
293
293
|
{
|
|
@@ -375,7 +375,7 @@ function getGridStep(
|
|
|
375
375
|
step: Coordinates,
|
|
376
376
|
boxSize: number,
|
|
377
377
|
): Coordinates {
|
|
378
|
-
// @ts-expect-error
|
|
378
|
+
// @ts-expect-error - TS2322 - Type '(number | null | undefined)[]' is not assignable to type 'Coordinates'.
|
|
379
379
|
return _(2).times(function (i) {
|
|
380
380
|
const scale = scaleFromExtent(range[i], boxSize);
|
|
381
381
|
const gridStep = gridStepFromTickStep(step[i], scale);
|
|
@@ -542,9 +542,9 @@ const DeprecationMixin: any = {
|
|
|
542
542
|
_.each(
|
|
543
543
|
this.deprecatedProps,
|
|
544
544
|
function (func, prop) {
|
|
545
|
-
// @ts-expect-error
|
|
545
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
546
546
|
if (_.has(this.props, prop)) {
|
|
547
|
-
// @ts-expect-error
|
|
547
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
548
548
|
_.extend(newProps, func(this.props));
|
|
549
549
|
}
|
|
550
550
|
},
|
|
@@ -605,11 +605,11 @@ function deepEq<T>(x: T, y: T): boolean {
|
|
|
605
605
|
return (
|
|
606
606
|
x === y ||
|
|
607
607
|
(_.all(x, function (v, k) {
|
|
608
|
-
// @ts-expect-error
|
|
608
|
+
// @ts-expect-error - TS2536 - Type 'CollectionKey<T>' cannot be used to index type 'T'.
|
|
609
609
|
return deepEq(y[k], v);
|
|
610
610
|
}) &&
|
|
611
611
|
_.all(y, function (v, k) {
|
|
612
|
-
// @ts-expect-error
|
|
612
|
+
// @ts-expect-error - TS2536 - Type 'CollectionKey<T>' cannot be used to index type 'T'.
|
|
613
613
|
return deepEq(x[k], v);
|
|
614
614
|
}))
|
|
615
615
|
);
|
|
@@ -813,9 +813,9 @@ const supportsPassiveEvents: () => boolean = () => {
|
|
|
813
813
|
supportsPassive = true;
|
|
814
814
|
},
|
|
815
815
|
});
|
|
816
|
-
// @ts-expect-error
|
|
816
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
817
817
|
window.addEventListener("testPassive", null, opts);
|
|
818
|
-
// @ts-expect-error
|
|
818
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
819
819
|
window.removeEventListener("testPassive", null, opts);
|
|
820
820
|
} catch (e: any) {
|
|
821
821
|
// Intentionally left empty!
|
package/src/widget-container.tsx
CHANGED
|
@@ -45,7 +45,7 @@ class WidgetContainer extends React.Component<Props, State> {
|
|
|
45
45
|
// Only relay size class changes for mobile right now. We may want to
|
|
46
46
|
// this for desktop as well at some point in the future.
|
|
47
47
|
if (this.state.widgetProps.apiOptions.isMobile) {
|
|
48
|
-
// @ts-expect-error
|
|
48
|
+
// @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'offsetWidth' does not exist on type 'Element | Text'.
|
|
49
49
|
const containerWidth = ReactDOM.findDOMNode(this).offsetWidth;
|
|
50
50
|
|
|
51
51
|
// NOTE(benkomalo): in the common case, this won't change anything.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
|
|
3
3
|
import {RendererWithDebugUI} from "../../../../../testing/renderer-with-debug-ui";
|
|
4
|
+
import {storybookDependenciesV2} from "../../../../../testing/test-dependencies";
|
|
4
5
|
import ArticleRenderer from "../../article-renderer";
|
|
5
6
|
|
|
6
7
|
export default {
|
|
@@ -103,5 +104,11 @@ export const MultipleDefinitions = (args: StoryArgs): React.ReactElement => {
|
|
|
103
104
|
};
|
|
104
105
|
|
|
105
106
|
export const ArticleDefintion = (args: StoryArgs): React.ReactElement => {
|
|
106
|
-
return
|
|
107
|
+
return (
|
|
108
|
+
<ArticleRenderer
|
|
109
|
+
json={article}
|
|
110
|
+
useNewStyles
|
|
111
|
+
dependencies={storybookDependenciesV2}
|
|
112
|
+
/>
|
|
113
|
+
);
|
|
107
114
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {KeypadContext} from "@khanacademy/math-input";
|
|
1
|
+
import {KeypadContext, KeypadType} from "@khanacademy/math-input";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
|
|
4
4
|
import {ItemRendererWithDebugUI} from "../../../../../testing/item-renderer-with-debug-ui";
|
|
@@ -62,7 +62,7 @@ export const DesktopKitchenSink = (args: StoryArgs): React.ReactElement => {
|
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
const keypadConfiguration = {
|
|
65
|
-
keypadType:
|
|
65
|
+
keypadType: KeypadType.EXPRESSION,
|
|
66
66
|
extraKeys: ["x", "y", "z"],
|
|
67
67
|
};
|
|
68
68
|
|
|
@@ -33,13 +33,13 @@ const TestKeypadContextWrapper = (props: Props): React.ReactElement => {
|
|
|
33
33
|
return (
|
|
34
34
|
<KeypadContext.Provider
|
|
35
35
|
value={{
|
|
36
|
-
// @ts-expect-error
|
|
36
|
+
// @ts-expect-error - TS2322 - Type 'Dispatch<SetStateAction<HTMLElement>>' is not assignable to type '(scrollableElement?: HTMLElement | null | undefined) => void'.
|
|
37
37
|
setKeypadElement,
|
|
38
38
|
keypadElement,
|
|
39
|
-
// @ts-expect-error
|
|
39
|
+
// @ts-expect-error - TS2322 - Type 'Dispatch<SetStateAction<HTMLElement>>' is not assignable to type '(scrollableElement?: HTMLElement | null | undefined) => void'.
|
|
40
40
|
setRenderer,
|
|
41
41
|
renderer,
|
|
42
|
-
// @ts-expect-error
|
|
42
|
+
// @ts-expect-error - TS2322 - Type 'Dispatch<SetStateAction<HTMLElement>>' is not assignable to type '(scrollableElement?: HTMLElement | null | undefined) => void'.
|
|
43
43
|
setScrollableElement,
|
|
44
44
|
scrollableElement,
|
|
45
45
|
}}
|
|
@@ -70,7 +70,7 @@ export const percentageProblem: PerseusRenderer = {
|
|
|
70
70
|
content: "$5008 \\div 4 =$ [[\u2603 numeric-input 1]] ",
|
|
71
71
|
images: {},
|
|
72
72
|
widgets: {
|
|
73
|
-
// @ts-expect-error
|
|
73
|
+
// @ts-expect-error - TS2352 - Conversion of type '{ graded: true; version: { major: number; minor: number; }; static: false; type: "numeric-input"; options: { coefficient: false; static: false; answers: { status: string; maxError: null; strict: false; value: string; simplify: string; message: string; }[]; labelText: string; size: string; }; alignment: string; }' to type 'NumericInputWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
|
|
74
74
|
"numeric-input 1": {
|
|
75
75
|
graded: true,
|
|
76
76
|
version: {
|
|
@@ -60,7 +60,7 @@ exports[`video widget should snapshot on mobile: first mobile render 1`] = `
|
|
|
60
60
|
class="default_xu2jcg-o_O-inlineStyles_sc01dy"
|
|
61
61
|
/>
|
|
62
62
|
<a
|
|
63
|
-
class="
|
|
63
|
+
class="shared_17fj7pd-o_O-resting_nelfll visited-no-recolor"
|
|
64
64
|
href="/transcript/videoNotFound"
|
|
65
65
|
rel="noopener noreferrer"
|
|
66
66
|
target="_blank"
|
|
@@ -136,7 +136,7 @@ exports[`video widget should snapshot: first render 1`] = `
|
|
|
136
136
|
class="default_xu2jcg-o_O-inlineStyles_sc01dy"
|
|
137
137
|
/>
|
|
138
138
|
<a
|
|
139
|
-
class="
|
|
139
|
+
class="shared_17fj7pd-o_O-resting_nelfll visited-no-recolor"
|
|
140
140
|
href="/transcript/videoNotFound"
|
|
141
141
|
rel="noopener noreferrer"
|
|
142
142
|
target="_blank"
|
|
@@ -3,9 +3,11 @@ import {screen, fireEvent} from "@testing-library/react";
|
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import "@testing-library/jest-dom";
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
testDependencies,
|
|
8
|
+
testDependenciesV2,
|
|
9
|
+
} from "../../../../../testing/test-dependencies";
|
|
7
10
|
import * as Dependencies from "../../dependencies";
|
|
8
|
-
import {PerseusItem} from "../../perseus-types";
|
|
9
11
|
import {
|
|
10
12
|
expressionItem2,
|
|
11
13
|
expressionItem3,
|
|
@@ -15,7 +17,14 @@ import {Expression} from "../expression";
|
|
|
15
17
|
|
|
16
18
|
import {renderQuestion} from "./renderQuestion";
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
import type {PerseusItem} from "../../perseus-types";
|
|
21
|
+
import type {APIOptions} from "../../types";
|
|
22
|
+
|
|
23
|
+
const assertComplete = (
|
|
24
|
+
itemData: PerseusItem,
|
|
25
|
+
input: string,
|
|
26
|
+
isCorrect: boolean,
|
|
27
|
+
) => {
|
|
19
28
|
const {renderer} = renderQuestion(itemData.question);
|
|
20
29
|
userEvent.type(screen.getByRole("textbox"), input);
|
|
21
30
|
const [_, score] = renderer.guessAndScore();
|
|
@@ -26,13 +35,14 @@ const assertComplete = (itemData: PerseusItem, input, isCorrect: boolean) => {
|
|
|
26
35
|
});
|
|
27
36
|
};
|
|
28
37
|
|
|
29
|
-
const assertCorrect = (itemData: PerseusItem, input) => {
|
|
38
|
+
const assertCorrect = (itemData: PerseusItem, input: string) => {
|
|
30
39
|
assertComplete(itemData, input, true);
|
|
31
40
|
|
|
32
|
-
expect(
|
|
41
|
+
expect(testDependenciesV2.analytics.onAnalyticsEvent).toHaveBeenCalledWith({
|
|
33
42
|
type: "perseus:expression-evaluated",
|
|
34
43
|
payload: {
|
|
35
44
|
result: "correct",
|
|
45
|
+
virtualKeypadVersion: "PERSEUS_MATH_INPUT",
|
|
36
46
|
},
|
|
37
47
|
});
|
|
38
48
|
};
|
|
@@ -40,16 +50,21 @@ const assertCorrect = (itemData: PerseusItem, input) => {
|
|
|
40
50
|
const assertIncorrect = (itemData: PerseusItem, input: string) => {
|
|
41
51
|
assertComplete(itemData, input, false);
|
|
42
52
|
|
|
43
|
-
expect(
|
|
53
|
+
expect(testDependenciesV2.analytics.onAnalyticsEvent).toHaveBeenCalledWith({
|
|
44
54
|
type: "perseus:expression-evaluated",
|
|
45
55
|
payload: {
|
|
46
56
|
result: "incorrect",
|
|
57
|
+
virtualKeypadVersion: "PERSEUS_MATH_INPUT",
|
|
47
58
|
},
|
|
48
59
|
});
|
|
49
60
|
};
|
|
50
61
|
|
|
51
62
|
// TODO: actually Assert that message is being set on the score object.
|
|
52
|
-
const assertInvalid = (
|
|
63
|
+
const assertInvalid = (
|
|
64
|
+
itemData: PerseusItem,
|
|
65
|
+
input: string,
|
|
66
|
+
message?: string,
|
|
67
|
+
) => {
|
|
53
68
|
const {renderer} = renderQuestion(itemData.question);
|
|
54
69
|
if (input.length) {
|
|
55
70
|
userEvent.type(screen.getByRole("textbox"), input);
|
|
@@ -57,17 +72,18 @@ const assertInvalid = (itemData: PerseusItem, input, message?: string) => {
|
|
|
57
72
|
const [_, score] = renderer.guessAndScore();
|
|
58
73
|
expect(score).toMatchObject({type: "invalid"});
|
|
59
74
|
|
|
60
|
-
expect(
|
|
75
|
+
expect(testDependenciesV2.analytics.onAnalyticsEvent).toHaveBeenCalledWith({
|
|
61
76
|
type: "perseus:expression-evaluated",
|
|
62
77
|
payload: {
|
|
63
78
|
result: "invalid",
|
|
79
|
+
virtualKeypadVersion: "PERSEUS_MATH_INPUT",
|
|
64
80
|
},
|
|
65
81
|
});
|
|
66
82
|
};
|
|
67
83
|
|
|
68
84
|
describe("Expression Widget", function () {
|
|
69
85
|
beforeEach(() => {
|
|
70
|
-
jest.spyOn(
|
|
86
|
+
jest.spyOn(testDependenciesV2.analytics, "onAnalyticsEvent");
|
|
71
87
|
jest.spyOn(Dependencies, "getDependencies").mockReturnValue(
|
|
72
88
|
testDependencies,
|
|
73
89
|
);
|
|
@@ -170,6 +186,56 @@ describe("Expression Widget", function () {
|
|
|
170
186
|
expect(err).toStrictEqual({message: null, type: "invalid"});
|
|
171
187
|
});
|
|
172
188
|
});
|
|
189
|
+
|
|
190
|
+
describe("analytics", () => {
|
|
191
|
+
const assertKeypadVersion = (
|
|
192
|
+
apiOptions: APIOptions,
|
|
193
|
+
virtualKeypadVersion: string,
|
|
194
|
+
) => {
|
|
195
|
+
const {renderer} = renderQuestion(
|
|
196
|
+
expressionItem2.question,
|
|
197
|
+
apiOptions,
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
renderer.guessAndScore();
|
|
201
|
+
|
|
202
|
+
expect(
|
|
203
|
+
testDependenciesV2.analytics.onAnalyticsEvent,
|
|
204
|
+
).toHaveBeenCalledWith({
|
|
205
|
+
type: "perseus:expression-evaluated",
|
|
206
|
+
payload: {
|
|
207
|
+
// We're not interested in validating that the expression
|
|
208
|
+
// widget did anything useful or that the keypad worked. We
|
|
209
|
+
// just want to make sure the code that derives which
|
|
210
|
+
// keypad version it detected is correct.
|
|
211
|
+
result: "invalid",
|
|
212
|
+
virtualKeypadVersion,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
it("should set the virtual keypad version to REACT_NATIVE_KEYPAD when nativeKeypadProxy is provided", () => {
|
|
218
|
+
assertKeypadVersion(
|
|
219
|
+
{nativeKeypadProxy: jest.fn()},
|
|
220
|
+
"REACT_NATIVE_KEYPAD",
|
|
221
|
+
);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("should set the virtual keypad version to MATH_INPUT_KEYPAD_V1 when customKeypad is set and useV2Keypad is unset", () => {
|
|
225
|
+
assertKeypadVersion({customKeypad: true}, "MATH_INPUT_KEYPAD_V1");
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
it("should set the virtual keypad version to MATH_INPUT_KEYPAD_V2 when customKeypad is set and useV2Keypad is true", () => {
|
|
229
|
+
assertKeypadVersion(
|
|
230
|
+
{customKeypad: true, useV2Keypad: true},
|
|
231
|
+
"MATH_INPUT_KEYPAD_V2",
|
|
232
|
+
);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it("should default the virtual keypad version to PERSEUS_MATH_INPUT", () => {
|
|
236
|
+
assertKeypadVersion(Object.freeze({}), "PERSEUS_MATH_INPUT");
|
|
237
|
+
});
|
|
238
|
+
});
|
|
173
239
|
});
|
|
174
240
|
|
|
175
241
|
describe("getOneCorrectAnswerFromRubric", () => {
|
|
@@ -334,7 +400,7 @@ describe("interaction", () => {
|
|
|
334
400
|
expect(score.type).toBe("points");
|
|
335
401
|
// Score.total doesn't exist if the input is invalid
|
|
336
402
|
// In this case we know that it'll be valid so we can assert directly
|
|
337
|
-
// @ts-expect-error
|
|
403
|
+
// @ts-expect-error - TS2339 - Property 'earned' does not exist on type 'PerseusScore'. | TS2339 - Property 'total' does not exist on type 'PerseusScore'.
|
|
338
404
|
expect(score.earned).toBe(score.total);
|
|
339
405
|
});
|
|
340
406
|
|
|
@@ -350,7 +416,7 @@ describe("interaction", () => {
|
|
|
350
416
|
// Assert
|
|
351
417
|
// Score.total doesn't exist if the input is invalid
|
|
352
418
|
// In this case we know that it'll be valid so we can assert directly
|
|
353
|
-
// @ts-expect-error
|
|
419
|
+
// @ts-expect-error - TS2339 - Property 'total' does not exist on type 'PerseusScore'.
|
|
354
420
|
expect(score.total).toBe(1);
|
|
355
421
|
});
|
|
356
422
|
});
|