@khanacademy/perseus 7.2.0 → 8.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 +38 -0
- package/dist/article-renderer.d.ts +26 -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/es/index.css +61 -61
- package/dist/es/index.js +1189 -1308
- package/dist/es/index.js.map +1 -1
- package/dist/hints-renderer.d.ts +1 -1
- package/dist/index.css +61 -61
- package/dist/index.js +1180 -1269
- package/dist/index.js.map +1 -1
- package/dist/mixins/provide-keypad.d.ts +15 -12
- package/dist/perseus-api.d.ts +1 -1
- package/dist/types.d.ts +3 -2
- package/dist/widgets/expression.d.ts +1 -1
- package/dist/widgets/graded-group.d.ts +1 -1
- package/dist/widgets/interactive-graph.d.ts +1 -1
- package/dist/widgets/plotter.d.ts +47 -13
- package/dist/widgets/sequence.d.ts +1 -1
- package/dist/widgets/table.d.ts +8 -1
- package/dist/widgets.d.ts +1 -1
- package/package.json +33 -33
- package/src/__testdata__/article-renderer.testdata.ts +3 -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 +2 -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 +3 -3
- package/src/__tests__/tex-wrangler.test.ts +1 -1
- package/src/article-renderer.tsx +39 -38
- package/src/components/__stories__/image-loader.stories.tsx +1 -0
- 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 +12 -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 +2 -1
- package/src/components/image-loader.tsx +5 -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 +11 -10
- package/src/components/prop-check-box.tsx +1 -1
- package/src/components/simple-keypad-input.tsx +4 -4
- package/src/components/sortable.tsx +43 -41
- package/src/components/svg-image.tsx +13 -12
- package/src/components/tex-buttons.tsx +5 -3
- package/src/components/text-input.tsx +9 -8
- package/src/components/text-list-editor.tsx +12 -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 +9 -8
- package/src/hint-renderer.tsx +3 -3
- package/src/hints-renderer.tsx +12 -11
- package/src/index.ts +1 -0
- package/src/init.ts +1 -1
- package/src/interaction-tracker.ts +4 -4
- 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 +6 -5
- package/src/mixins/changeable.ts +2 -2
- package/src/mixins/editor-jsonify.ts +1 -1
- package/src/mixins/provide-keypad.tsx +24 -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 +7 -7
- 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 +15 -14
- 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 -38
- package/src/server-item-renderer.tsx +6 -5
- package/src/sigfigs.ts +1 -1
- package/src/styles/articles.less +8 -4
- package/src/styles/perseus-renderer.less +47 -38
- package/src/styles/util.less +1 -1
- package/src/styles/variables.boostrap.less +158 -182
- package/src/styles/variables.less +20 -20
- package/src/styles/variables.shared.less +162 -168
- package/src/styles/widgets/categorizer.less +1 -2
- package/src/styles/widgets/expression.less +7 -4
- package/src/styles/widgets/grapher.less +2 -1
- package/src/styles/widgets/image.less +3 -2
- package/src/styles/widgets/interactive-graph.less +4 -2
- package/src/styles/widgets/label-image.less +2 -1
- package/src/styles/widgets/matrix.less +11 -7
- package/src/styles/widgets/orderer.less +2 -1
- package/src/styles/widgets/passage.less +2 -1
- package/src/styles/widgets/plotter.less +4 -3
- package/src/styles/widgets/radio.less +4 -2
- package/src/styles/widgets/sortable.less +1 -1
- package/src/styles/widgets/table.less +2 -1
- package/src/styles/widgets/transformer.less +2 -1
- package/src/styles/widgets/unit.less +2 -1
- package/src/traversal.ts +1 -1
- package/src/types.ts +3 -3
- 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__/plotter.stories.tsx +27 -0
- package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +3 -3
- package/src/widgets/__testdata__/numeric-input.testdata.ts +1 -1
- package/src/widgets/__testdata__/plotter.testdata.ts +36 -0
- package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +863 -0
- package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +2 -2
- package/src/widgets/__tests__/expression.test.ts +4 -3
- 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 +66 -0
- package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
- package/src/widgets/__tests__/renderQuestion.tsx +3 -3
- package/src/widgets/categorizer.tsx +5 -4
- package/src/widgets/cs-program.tsx +2 -2
- package/src/widgets/dropdown.tsx +1 -1
- package/src/widgets/expression.tsx +10 -9
- package/src/widgets/graded-group-set.tsx +6 -5
- package/src/widgets/graded-group.tsx +19 -19
- 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 +78 -77
- package/src/widgets/interactive-graph.tsx +109 -107
- package/src/widgets/label-image/marker.tsx +3 -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 +7 -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 +39 -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 +2 -1
- package/src/widgets/passage-ref.tsx +4 -6
- package/src/widgets/passage.tsx +11 -11
- package/src/widgets/plotter.tsx +117 -107
- package/src/widgets/radio/base-radio.tsx +12 -11
- package/src/widgets/radio/choice-icon/choice-icon.tsx +3 -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 +2 -2
- package/src/widgets/simulator.tsx +14 -14
- package/src/widgets/sorter.tsx +5 -4
- package/src/widgets/table.tsx +8 -8
- package/src/widgets/transformer.tsx +93 -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 -78
- 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
|
@@ -56,7 +56,7 @@ describe("Perseus API", function () {
|
|
|
56
56
|
|
|
57
57
|
describe("setInputValue", function () {
|
|
58
58
|
it("should be able to produce a correctly graded value", function () {
|
|
59
|
-
// @ts-expect-error
|
|
59
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
60
60
|
const renderer = renderQuestionArea(inputNumber1Item);
|
|
61
61
|
renderer.setInputValue(["input-number 1"], "5");
|
|
62
62
|
const score = renderer.guessAndScore()[1];
|
|
@@ -65,7 +65,7 @@ describe("Perseus API", function () {
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
it("should be able to produce a wrong value", function () {
|
|
68
|
-
// @ts-expect-error
|
|
68
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
69
69
|
const renderer = renderQuestionArea(inputNumber1Item);
|
|
70
70
|
renderer.setInputValue(["input-number 1"], "3", () => {});
|
|
71
71
|
const score = renderer.guessAndScore()[1];
|
|
@@ -74,7 +74,7 @@ describe("Perseus API", function () {
|
|
|
74
74
|
});
|
|
75
75
|
|
|
76
76
|
it("should be able to produce an empty score", function () {
|
|
77
|
-
// @ts-expect-error
|
|
77
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
78
78
|
const renderer = renderQuestionArea(inputNumber1Item);
|
|
79
79
|
renderer.setInputValue(["input-number 1"], "3");
|
|
80
80
|
let score = renderer.guessAndScore()[1];
|
|
@@ -86,7 +86,7 @@ describe("Perseus API", function () {
|
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
it("should be able to accept a callback", function (done) {
|
|
89
|
-
// @ts-expect-error
|
|
89
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
90
90
|
const renderer = renderQuestionArea(inputNumber1Item);
|
|
91
91
|
renderer.setInputValue(["input-number 1"], "3", function () {
|
|
92
92
|
const guess = renderer.getUserInput()[0];
|
|
@@ -99,14 +99,14 @@ describe("Perseus API", function () {
|
|
|
99
99
|
|
|
100
100
|
describe("getInputPaths", function () {
|
|
101
101
|
it("should be able to find all the input widgets", function () {
|
|
102
|
-
// @ts-expect-error
|
|
102
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
103
103
|
const renderer = renderQuestionArea(inputNumber2Item);
|
|
104
104
|
const numPaths = renderer.getInputPaths().length;
|
|
105
105
|
expect(numPaths).toBe(2);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
it("should be able to find all inputs within widgets", function () {
|
|
109
|
-
// @ts-expect-error
|
|
109
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
110
110
|
const renderer = renderQuestionArea(tableItem);
|
|
111
111
|
const numPaths = renderer.getInputPaths().length;
|
|
112
112
|
expect(numPaths).toBe(8);
|
|
@@ -115,7 +115,7 @@ describe("Perseus API", function () {
|
|
|
115
115
|
|
|
116
116
|
describe("getDOMNodeForPath", function () {
|
|
117
117
|
it("should find one DOM node per <input>", function () {
|
|
118
|
-
// @ts-expect-error
|
|
118
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
119
119
|
const renderer = renderQuestionArea(inputNumber2Item);
|
|
120
120
|
const inputPaths = renderer.getInputPaths();
|
|
121
121
|
const allInputs = TestUtils.scryRenderedDOMComponentsWithTag(
|
|
@@ -126,7 +126,7 @@ describe("Perseus API", function () {
|
|
|
126
126
|
});
|
|
127
127
|
|
|
128
128
|
it("should find the right DOM nodes for the <input>s", function () {
|
|
129
|
-
// @ts-expect-error
|
|
129
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
130
130
|
const renderer = renderQuestionArea(inputNumber2Item);
|
|
131
131
|
const inputPaths = renderer.getInputPaths();
|
|
132
132
|
const allInputs = TestUtils.scryRenderedDOMComponentsWithTag(
|
|
@@ -135,9 +135,9 @@ describe("Perseus API", function () {
|
|
|
135
135
|
);
|
|
136
136
|
_.each(inputPaths, (inputPath, i) => {
|
|
137
137
|
const $node = $(renderer.getDOMNodeForPath(inputPath));
|
|
138
|
-
// @ts-expect-error
|
|
138
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
139
139
|
const $input = $(ReactDOM.findDOMNode(allInputs[i]));
|
|
140
|
-
// @ts-expect-error
|
|
140
|
+
// @ts-expect-error - TS2339 - Property 'closest' does not exist on type 'JQueryStatic'.
|
|
141
141
|
expect($input.closest($node).length).toBeTruthy();
|
|
142
142
|
});
|
|
143
143
|
});
|
|
@@ -172,18 +172,18 @@ describe("Perseus API", function () {
|
|
|
172
172
|
});
|
|
173
173
|
|
|
174
174
|
const input =
|
|
175
|
-
// @ts-expect-error
|
|
175
|
+
// @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelector' does not exist on type 'Element | Text'.
|
|
176
176
|
ReactDOM.findDOMNode(renderer).querySelector("input");
|
|
177
177
|
|
|
178
|
-
// @ts-expect-error
|
|
178
|
+
// @ts-expect-error - TS2532 - Object is possibly 'undefined'.
|
|
179
179
|
expect($(input).attr("class").includes("focused")).toBe(false);
|
|
180
180
|
|
|
181
181
|
TestUtils.Simulate.focus(input);
|
|
182
|
-
// @ts-expect-error
|
|
182
|
+
// @ts-expect-error - TS2532 - Object is possibly 'undefined'.
|
|
183
183
|
expect($(input).attr("class").includes("focused")).toBe(true);
|
|
184
184
|
|
|
185
185
|
TestUtils.Simulate.blur(input);
|
|
186
|
-
// @ts-expect-error
|
|
186
|
+
// @ts-expect-error - TS2532 - Object is possibly 'undefined'.
|
|
187
187
|
expect($(input).attr("class").includes("focused")).toBe(false);
|
|
188
188
|
});
|
|
189
189
|
});
|
|
@@ -204,7 +204,7 @@ describe("Perseus API", function () {
|
|
|
204
204
|
},
|
|
205
205
|
});
|
|
206
206
|
|
|
207
|
-
// @ts-expect-error
|
|
207
|
+
// @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelector' does not exist on type 'Element | Text'.
|
|
208
208
|
const input = ReactDOM.findDOMNode(renderer).querySelector("input");
|
|
209
209
|
|
|
210
210
|
callCount = 0;
|
|
@@ -215,7 +215,7 @@ describe("Perseus API", function () {
|
|
|
215
215
|
// result here. This also means that this test should
|
|
216
216
|
// continue to pass if we decide it makes more sense for
|
|
217
217
|
// this callback to be async, which could reasonably happen
|
|
218
|
-
// @ts-expect-error
|
|
218
|
+
// @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
|
|
219
219
|
return delayedPromise()
|
|
220
220
|
.then(() => {
|
|
221
221
|
expect(callCount).toBe(1);
|
|
@@ -224,7 +224,7 @@ describe("Perseus API", function () {
|
|
|
224
224
|
|
|
225
225
|
callCount = 0;
|
|
226
226
|
TestUtils.Simulate.blur(input);
|
|
227
|
-
// @ts-expect-error
|
|
227
|
+
// @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
|
|
228
228
|
return delayedPromise();
|
|
229
229
|
})
|
|
230
230
|
.then(() => {
|
|
@@ -249,7 +249,7 @@ describe("Perseus API", function () {
|
|
|
249
249
|
});
|
|
250
250
|
|
|
251
251
|
const inputs =
|
|
252
|
-
// @ts-expect-error
|
|
252
|
+
// @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'querySelectorAll' does not exist on type 'Element | Text'.
|
|
253
253
|
ReactDOM.findDOMNode(renderer).querySelectorAll("input");
|
|
254
254
|
const input1 = inputs[0];
|
|
255
255
|
const input2 = inputs[1];
|
|
@@ -263,7 +263,7 @@ describe("Perseus API", function () {
|
|
|
263
263
|
// result here. This also means that this test should
|
|
264
264
|
// continue to pass if we decide it makes more sense for
|
|
265
265
|
// this callback to be async, which could reasonably happen
|
|
266
|
-
// @ts-expect-error
|
|
266
|
+
// @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
|
|
267
267
|
return delayedPromise().then(() => {
|
|
268
268
|
expect(callCount).toBe(1);
|
|
269
269
|
expect(oldFocusResult).toEqual(["input-number 1"]);
|
|
@@ -289,7 +289,7 @@ describe("Perseus API", function () {
|
|
|
289
289
|
);
|
|
290
290
|
|
|
291
291
|
const spans = TestUtils.scryRenderedDOMComponentsWithTag(
|
|
292
|
-
// @ts-expect-error
|
|
292
|
+
// @ts-expect-error - TS2345 - Argument of type 'void' is not assignable to parameter of type 'Component<any, {}, any>'.
|
|
293
293
|
renderer,
|
|
294
294
|
"span",
|
|
295
295
|
);
|
|
@@ -313,7 +313,7 @@ describe("Perseus API", function () {
|
|
|
313
313
|
);
|
|
314
314
|
|
|
315
315
|
const spans = TestUtils.scryRenderedDOMComponentsWithTag(
|
|
316
|
-
// @ts-expect-error
|
|
316
|
+
// @ts-expect-error - TS2345 - Argument of type 'void' is not assignable to parameter of type 'Component<any, {}, any>'.
|
|
317
317
|
renderer,
|
|
318
318
|
"span",
|
|
319
319
|
);
|
|
@@ -149,7 +149,7 @@ describe("renderer", () => {
|
|
|
149
149
|
mockRunLinter.mockClear();
|
|
150
150
|
|
|
151
151
|
// Act
|
|
152
|
-
// @ts-expect-error
|
|
152
|
+
// @ts-expect-error - TS2345 - Argument of type '{ problemNum: number; linterContext: { readonly contentType: "exercise"; readonly highlightLint: true; readonly paths: readonly []; readonly stack: readonly []; }; }' is not assignable to parameter of type 'Pick<{}, never> & InexactPartial<Pick<{}, never>> & InexactPartial<Pick<DefaultProps, keyof DefaultProps>>'.
|
|
153
153
|
rerender(question1, {...extraProps, problemNum: 1});
|
|
154
154
|
|
|
155
155
|
// Assert
|
|
@@ -192,7 +192,7 @@ describe("renderer", () => {
|
|
|
192
192
|
...question1.widgets,
|
|
193
193
|
// $FlowIgnore[prop-missing]
|
|
194
194
|
// $FlowIgnore[incompatible-cast]
|
|
195
|
-
// @ts-expect-error
|
|
195
|
+
// @ts-expect-error - TS2352 - Conversion of type '{ type: undefined; static?: boolean | undefined; graded?: boolean | undefined; alignment?: string | undefined; options: PerseusCategorizerWidgetOptions | null | undefined; key?: number | undefined; version?: Version | undefined; } | ... 38 more ... | { ...; }' to type 'DropdownWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
|
|
196
196
|
"dropdown 1": {
|
|
197
197
|
...question1.widgets["dropdown 1"],
|
|
198
198
|
// $FlowIgnore[incompatible-cast]
|
|
@@ -298,7 +298,7 @@ describe("renderer", () => {
|
|
|
298
298
|
originalImage = window.Image;
|
|
299
299
|
// Mock HTML Image so we can trigger onLoad callbacks and see full
|
|
300
300
|
// image rendering.
|
|
301
|
-
// @ts-expect-error
|
|
301
|
+
// @ts-expect-error - TS2322 - Type 'Mock<Record<string, any>, [], any>' is not assignable to type 'new (width?: number | undefined, height?: number | undefined) => HTMLImageElement'.
|
|
302
302
|
window.Image = jest.fn(() => {
|
|
303
303
|
const img: Record<string, any> = {};
|
|
304
304
|
images.push(img);
|
|
@@ -426,7 +426,7 @@ describe("renderer", () => {
|
|
|
426
426
|
|
|
427
427
|
const wrapperStyle = getComputedStyle(
|
|
428
428
|
// $FlowIgnore[incompatible-call]
|
|
429
|
-
// @ts-expect-error
|
|
429
|
+
// @ts-expect-error - TS2345 - Argument of type 'HTMLElement | null' is not assignable to parameter of type 'Element'.
|
|
430
430
|
screen.getByAltText("This image has dimensions").parentElement, // eslint-disable-line testing-library/no-node-access
|
|
431
431
|
);
|
|
432
432
|
expect(wrapperStyle.maxWidth).toBe("420px");
|
|
@@ -452,7 +452,7 @@ describe("renderer", () => {
|
|
|
452
452
|
|
|
453
453
|
const wrapperStyle = getComputedStyle(
|
|
454
454
|
// $FlowIgnore[incompatible-call]
|
|
455
|
-
// @ts-expect-error
|
|
455
|
+
// @ts-expect-error - TS2345 - Argument of type 'HTMLElement | null' is not assignable to parameter of type 'Element'.
|
|
456
456
|
screen.getByAltText("This image doesn't").parentElement, // eslint-disable-line testing-library/no-node-access
|
|
457
457
|
);
|
|
458
458
|
expect(wrapperStyle.maxWidth).toBe("");
|
|
@@ -683,11 +683,11 @@ describe("renderer", () => {
|
|
|
683
683
|
);
|
|
684
684
|
expect(zoomable).not.toBeUndefined();
|
|
685
685
|
expect(zoomable).not.toBeNull();
|
|
686
|
-
// @ts-expect-error
|
|
686
|
+
// @ts-expect-error - TS2339 - Property 'style' does not exist on type 'Element'.
|
|
687
687
|
expect(zoomable.style.transform).not.toBe("");
|
|
688
688
|
|
|
689
689
|
/* eslint-disable testing-library/no-node-access */
|
|
690
|
-
// @ts-expect-error
|
|
690
|
+
// @ts-expect-error - TS2531 - Object is possibly 'null'.
|
|
691
691
|
expect(zoomable.parentElement.style.transform).not.toBe("");
|
|
692
692
|
/* eslint-enable testing-library/no-node-access */
|
|
693
693
|
});
|
|
@@ -1139,7 +1139,7 @@ describe("renderer", () => {
|
|
|
1139
1139
|
|
|
1140
1140
|
const {renderer} = renderQuestion(mockedItem);
|
|
1141
1141
|
const [widget1, widget2, widget3] = renderer.findWidgets(
|
|
1142
|
-
// @ts-expect-error
|
|
1142
|
+
// @ts-expect-error - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
|
|
1143
1143
|
(_, info) => info.type === "mock-widget",
|
|
1144
1144
|
);
|
|
1145
1145
|
widget1.restoreSerializedState = makeRestoreSerializedStateMock;
|
|
@@ -1311,7 +1311,7 @@ describe("renderer", () => {
|
|
|
1311
1311
|
break;
|
|
1312
1312
|
}
|
|
1313
1313
|
// eslint-disable-next-line testing-library/no-node-access
|
|
1314
|
-
// @ts-expect-error
|
|
1314
|
+
// @ts-expect-error - TS2322 - Type 'HTMLElement | null' is not assignable to type 'HTMLElement'.
|
|
1315
1315
|
// eslint-disable-next-line testing-library/no-node-access
|
|
1316
1316
|
el = el.parentElement;
|
|
1317
1317
|
}
|
|
@@ -1334,7 +1334,7 @@ describe("renderer", () => {
|
|
|
1334
1334
|
},
|
|
1335
1335
|
},
|
|
1336
1336
|
{},
|
|
1337
|
-
// @ts-expect-error
|
|
1337
|
+
// @ts-expect-error - TS2345 - Argument of type '{ problemNum: number; }' is not assignable to parameter of type 'Pick<{}, never> & InexactPartial<Pick<{}, never>> & InexactPartial<Pick<DefaultProps, keyof DefaultProps>>'.
|
|
1338
1338
|
{problemNum: 1},
|
|
1339
1339
|
);
|
|
1340
1340
|
|
|
@@ -1349,7 +1349,7 @@ describe("renderer", () => {
|
|
|
1349
1349
|
// Arrange
|
|
1350
1350
|
const {renderer} = renderQuestion(mockedItem);
|
|
1351
1351
|
const widgets = renderer.findWidgets(
|
|
1352
|
-
// @ts-expect-error
|
|
1352
|
+
// @ts-expect-error - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
|
|
1353
1353
|
(_, info) => info.type === "mock-widget",
|
|
1354
1354
|
);
|
|
1355
1355
|
widgets.forEach(
|
|
@@ -1376,7 +1376,7 @@ describe("renderer", () => {
|
|
|
1376
1376
|
// Arrange
|
|
1377
1377
|
const {renderer} = renderQuestion(mockedItem);
|
|
1378
1378
|
const widgets = renderer.findWidgets(
|
|
1379
|
-
// @ts-expect-error
|
|
1379
|
+
// @ts-expect-error - TS2367 - This condition will always return 'false' since the types '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"' and '"mock-widget"' have no overlap.
|
|
1380
1380
|
(_, info) => info.type === "mock-widget",
|
|
1381
1381
|
);
|
|
1382
1382
|
widgets.forEach(
|
|
@@ -1489,7 +1489,7 @@ describe("renderer", () => {
|
|
|
1489
1489
|
|
|
1490
1490
|
// Assert
|
|
1491
1491
|
// "button" role is the WB dropdown's "opener" element
|
|
1492
|
-
// @ts-expect-error
|
|
1492
|
+
// @ts-expect-error - TS2345 - Argument of type 'Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement'.
|
|
1493
1493
|
expect(within(node).queryAllByRole("button")).toHaveLength(1);
|
|
1494
1494
|
});
|
|
1495
1495
|
|
|
@@ -18,13 +18,13 @@ import InputNumberExport from "../widgets/input-number";
|
|
|
18
18
|
import RadioWidgetExport from "../widgets/radio";
|
|
19
19
|
|
|
20
20
|
import MockAssetLoadingWidgetExport, {
|
|
21
|
-
MockAssetLoadingWidget,
|
|
22
21
|
mockedAssetItem,
|
|
23
22
|
} from "./mock-asset-loading-widget";
|
|
24
23
|
import MockWidgetExport from "./mock-widget";
|
|
25
24
|
|
|
26
25
|
import type {PerseusItem} from "../perseus-types";
|
|
27
26
|
import type {APIOptions} from "../types";
|
|
27
|
+
import type {MockAssetLoadingWidget} from "./mock-asset-loading-widget";
|
|
28
28
|
|
|
29
29
|
// This looks alot like `widgets/__tests__/renderQuestion.jsx', except we use
|
|
30
30
|
// the ServerItemRenderer instead of Renderer
|
|
@@ -167,7 +167,7 @@ describe("server item renderer", () => {
|
|
|
167
167
|
const node = renderer.getDOMNodeForPath(["input-number 1"]);
|
|
168
168
|
|
|
169
169
|
// Assert
|
|
170
|
-
// @ts-expect-error
|
|
170
|
+
// @ts-expect-error - TS2345 - Argument of type 'Element | Text | null | undefined' is not assignable to parameter of type 'HTMLElement'.
|
|
171
171
|
expect(await within(node).findAllByRole("textbox")).toHaveLength(1);
|
|
172
172
|
});
|
|
173
173
|
|
|
@@ -300,7 +300,7 @@ describe("server item renderer", () => {
|
|
|
300
300
|
// Act
|
|
301
301
|
// setAssetStatus() is not part of the Widget interface, it's specific
|
|
302
302
|
// this test.
|
|
303
|
-
// @ts-expect-error
|
|
303
|
+
// @ts-expect-error - TS2352 - Conversion of type 'Widget' to type 'MockAssetLoadingWidget' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
|
|
304
304
|
const widget = mockedWidget as MockAssetLoadingWidget;
|
|
305
305
|
widget.setAssetStatus("ABC", true);
|
|
306
306
|
|
|
@@ -13,7 +13,7 @@ const assertWrangled = (toWrangle: string, check: string) => {
|
|
|
13
13
|
|
|
14
14
|
const assertParsed = (toParse: undefined | string, check: string) => {
|
|
15
15
|
// We ignore whitespace when comparing
|
|
16
|
-
// @ts-expect-error
|
|
16
|
+
// @ts-expect-error - TS2345 - Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
|
|
17
17
|
const parsed = parseTex(toParse).replace(whitespaceRegex, "");
|
|
18
18
|
const checkNoSpace = check.replace(whitespaceRegex, "");
|
|
19
19
|
expect(parsed).toBe(checkNoSpace);
|
package/src/article-renderer.tsx
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
import * as PerseusLinter from "@khanacademy/perseus-linter";
|
|
7
7
|
import classNames from "classnames";
|
|
8
|
-
import PropTypes from "prop-types";
|
|
9
8
|
import * as React from "react";
|
|
10
9
|
|
|
11
10
|
import ProvideKeypad from "./mixins/provide-keypad";
|
|
@@ -13,42 +12,44 @@ import {ClassNames as ApiClassNames, ApiOptions} from "./perseus-api";
|
|
|
13
12
|
import Renderer from "./renderer";
|
|
14
13
|
import Util from "./util";
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
import type {KeypadProps} from "./mixins/provide-keypad";
|
|
16
|
+
import type {PerseusRenderer} from "./perseus-types";
|
|
17
|
+
import type {APIOptions} from "./types";
|
|
18
|
+
import type {LinterContextProps} from "@khanacademy/perseus-linter";
|
|
19
|
+
|
|
20
|
+
type Props = {
|
|
21
|
+
apiOptions: APIOptions;
|
|
22
|
+
json: PerseusRenderer | ReadonlyArray<PerseusRenderer>;
|
|
23
|
+
|
|
24
|
+
// Whether to use the new Bibliotron styles for articles
|
|
25
|
+
/**
|
|
26
|
+
* @deprecated Does nothing
|
|
27
|
+
*/
|
|
28
|
+
useNewStyles: boolean;
|
|
29
|
+
linterContext: LinterContextProps;
|
|
30
|
+
legacyPerseusLint?: ReadonlyArray<string>;
|
|
31
|
+
} & KeypadProps;
|
|
32
|
+
|
|
33
|
+
type DefaultProps = {
|
|
34
|
+
apiOptions: Props["apiOptions"];
|
|
35
|
+
useNewStyles: Props["useNewStyles"];
|
|
36
|
+
linterContext: Props["linterContext"];
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
type State = {
|
|
40
|
+
keypadElement: any | null;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
class ArticleRenderer extends React.Component<Props, State> {
|
|
23
44
|
_currentFocus: any;
|
|
24
45
|
|
|
25
|
-
static
|
|
26
|
-
|
|
27
|
-
apiOptions: PropTypes.shape({
|
|
28
|
-
onFocusChange: PropTypes.func,
|
|
29
|
-
isMobile: PropTypes.bool,
|
|
30
|
-
}),
|
|
31
|
-
json: PropTypes.oneOfType([
|
|
32
|
-
rendererProps,
|
|
33
|
-
PropTypes.arrayOf(rendererProps),
|
|
34
|
-
]).isRequired,
|
|
35
|
-
|
|
36
|
-
// Whether to use the new Bibliotron styles for articles
|
|
37
|
-
/**
|
|
38
|
-
* @deprecated Does nothing
|
|
39
|
-
*/
|
|
40
|
-
useNewStyles: PropTypes.bool,
|
|
41
|
-
linterContext: PerseusLinter.linterContextProps,
|
|
42
|
-
legacyPerseusLint: PropTypes.arrayOf(PropTypes.string),
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
static defaultProps: any = {
|
|
46
|
-
apiOptions: {},
|
|
46
|
+
static defaultProps: DefaultProps = {
|
|
47
|
+
apiOptions: ApiOptions.defaults,
|
|
47
48
|
useNewStyles: false,
|
|
48
49
|
linterContext: PerseusLinter.linterContextDefault,
|
|
49
50
|
};
|
|
50
51
|
|
|
51
|
-
constructor(props:
|
|
52
|
+
constructor(props: Props) {
|
|
52
53
|
super(props);
|
|
53
54
|
this.state = ProvideKeypad.getInitialState.call(this);
|
|
54
55
|
}
|
|
@@ -58,7 +59,7 @@ class ArticleRenderer extends React.Component<any, any> {
|
|
|
58
59
|
this._currentFocus = null;
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
shouldComponentUpdate(nextProps:
|
|
62
|
+
shouldComponentUpdate(nextProps: Props, nextState: State): boolean {
|
|
62
63
|
return nextProps !== this.props || nextState !== this.state;
|
|
63
64
|
}
|
|
64
65
|
|
|
@@ -96,7 +97,7 @@ class ArticleRenderer extends React.Component<any, any> {
|
|
|
96
97
|
if (this._currentFocus) {
|
|
97
98
|
const [sectionRef, ...focusPath] = this._currentFocus;
|
|
98
99
|
// eslint-disable-next-line react/no-string-refs
|
|
99
|
-
// @ts-expect-error
|
|
100
|
+
// @ts-expect-error - TS2339 - Property 'getInputPaths' does not exist on type 'ReactInstance'.
|
|
100
101
|
const inputPaths = this.refs[sectionRef].getInputPaths();
|
|
101
102
|
didFocusInput = inputPaths.some((inputPath) => {
|
|
102
103
|
return Util.inputPathsEqual(inputPath, focusPath);
|
|
@@ -107,18 +108,18 @@ class ArticleRenderer extends React.Component<any, any> {
|
|
|
107
108
|
this.props.apiOptions.onFocusChange(
|
|
108
109
|
this._currentFocus,
|
|
109
110
|
prevFocusPath,
|
|
110
|
-
// @ts-expect-error
|
|
111
|
+
// @ts-expect-error - TS2339 - Property 'getDOMNode' does not exist on type 'never'.
|
|
111
112
|
didFocusInput && keypadElement && keypadElement.getDOMNode(),
|
|
112
113
|
);
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
// @ts-expect-error
|
|
116
|
+
// @ts-expect-error - TS1345 - An expression of type 'void' cannot be tested for truthiness.
|
|
116
117
|
if (keypadElement) {
|
|
117
118
|
if (didFocusInput) {
|
|
118
|
-
// @ts-expect-error
|
|
119
|
+
// @ts-expect-error - TS2339 - Property 'activate' does not exist on type 'never'.
|
|
119
120
|
keypadElement.activate();
|
|
120
121
|
} else {
|
|
121
|
-
// @ts-expect-error
|
|
122
|
+
// @ts-expect-error - TS2339 - Property 'dismiss' does not exist on type 'never'.
|
|
122
123
|
keypadElement.dismiss();
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -149,7 +150,7 @@ class ArticleRenderer extends React.Component<any, any> {
|
|
|
149
150
|
if (this._currentFocus) {
|
|
150
151
|
const [sectionRef, ...inputPath] = this._currentFocus;
|
|
151
152
|
// eslint-disable-next-line react/no-string-refs
|
|
152
|
-
// @ts-expect-error
|
|
153
|
+
// @ts-expect-error - TS2339 - Property 'blurPath' does not exist on type 'ReactInstance'.
|
|
153
154
|
this.refs[sectionRef].blurPath(inputPath);
|
|
154
155
|
}
|
|
155
156
|
};
|
|
@@ -31,7 +31,7 @@ describe("NumberInput", function () {
|
|
|
31
31
|
);
|
|
32
32
|
|
|
33
33
|
const node = TestUtils.renderIntoDocument(<NumberInput {...props} />);
|
|
34
|
-
// @ts-expect-error
|
|
34
|
+
// @ts-expect-error - TS2345 - Argument of type 'Element | Text | null' is not assignable to parameter of type 'Element | Component<any, {}, any>'. | TS2345 - Argument of type 'void' is not assignable to parameter of type 'ReactInstance | null | undefined'.
|
|
35
35
|
TestUtils.Simulate.change(ReactDOM.findDOMNode(node), {
|
|
36
36
|
target: {value: input},
|
|
37
37
|
});
|
|
@@ -39,12 +39,12 @@ describe("NumberInput", function () {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
it("basic input", function () {
|
|
42
|
-
// @ts-expect-error
|
|
42
|
+
// @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.
|
|
43
43
|
testInputResult("42", 42);
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
it("invalid input does not change", function () {
|
|
47
|
-
// @ts-expect-error
|
|
47
|
+
// @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.
|
|
48
48
|
testInputResult("asdf", STARTING_VALUE);
|
|
49
49
|
});
|
|
50
50
|
|
|
@@ -78,7 +78,7 @@ describe("NumberInput", function () {
|
|
|
78
78
|
useArrowKeys={keysEnabled}
|
|
79
79
|
/>,
|
|
80
80
|
);
|
|
81
|
-
// @ts-expect-error
|
|
81
|
+
// @ts-expect-error - TS2345 - Argument of type 'Element | Text | null' is not assignable to parameter of type 'Element | Component<any, {}, any>'. | TS2345 - Argument of type 'void' is not assignable to parameter of type 'ReactInstance | null | undefined'.
|
|
82
82
|
TestUtils.Simulate.keyDown(ReactDOM.findDOMNode(node), {key: key});
|
|
83
83
|
expect(newVal).toEqual(endingValue);
|
|
84
84
|
};
|
|
@@ -89,10 +89,10 @@ describe("moveOptionToIndex", () => {
|
|
|
89
89
|
throw new Error("Failed to render");
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
// @ts-expect-error
|
|
92
|
+
// @ts-expect-error - TS2339 - Property 'moveOptionToIndex' does not exist on type 'never'.
|
|
93
93
|
sortable.moveOptionToIndex("a", 1);
|
|
94
94
|
|
|
95
|
-
// @ts-expect-error
|
|
95
|
+
// @ts-expect-error - TS2339 - Property 'getOptions' does not exist on type 'never'.
|
|
96
96
|
expect(sortable?.getOptions()).toStrictEqual(["b", "a", "c"]);
|
|
97
97
|
});
|
|
98
98
|
|
|
@@ -108,7 +108,7 @@ class FixedToResponsive extends React.Component<Props, State> {
|
|
|
108
108
|
const spacer = (
|
|
109
109
|
<div
|
|
110
110
|
style={{
|
|
111
|
-
// @ts-expect-error
|
|
111
|
+
// @ts-expect-error - TS2362 - The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
|
|
112
112
|
paddingBottom: (1 / aspectRatio).toFixed(4) * 100 + "%",
|
|
113
113
|
}}
|
|
114
114
|
/>
|
package/src/components/graph.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @khanacademy/ts-no-error-suppressions */
|
|
1
2
|
/* eslint-disable react/no-unsafe */
|
|
2
3
|
import $ from "jquery";
|
|
3
4
|
import * as React from "react";
|
|
@@ -83,9 +84,9 @@ class Graph extends React.Component<Props> {
|
|
|
83
84
|
protractor: any;
|
|
84
85
|
ruler: any;
|
|
85
86
|
_graphie: any;
|
|
86
|
-
// @ts-expect-error
|
|
87
|
+
// @ts-expect-error - TS2564 - Property '_hasSetupGraphieThisUpdate' has no initializer and is not definitely assigned in the constructor.
|
|
87
88
|
_hasSetupGraphieThisUpdate: boolean;
|
|
88
|
-
// @ts-expect-error
|
|
89
|
+
// @ts-expect-error - TS2564 - Property '_shouldSetupGraphie' has no initializer and is not definitely assigned in the constructor.
|
|
89
90
|
_shouldSetupGraphie: boolean;
|
|
90
91
|
|
|
91
92
|
static defaultProps: DefaultProps = {
|
|
@@ -186,7 +187,7 @@ class Graph extends React.Component<Props> {
|
|
|
186
187
|
|
|
187
188
|
// eslint-disable-next-line react/no-string-refs
|
|
188
189
|
const graphieDiv = ReactDOM.findDOMNode(this.refs.graphieDiv);
|
|
189
|
-
// @ts-expect-error
|
|
190
|
+
// @ts-expect-error - TS2769 - No overload matches this call. | TS2339 - Property 'empty' does not exist on type 'JQueryStatic'.
|
|
190
191
|
$(graphieDiv).empty();
|
|
191
192
|
|
|
192
193
|
// Content creators may need to explicitly add the dollar signs so the
|
|
@@ -265,7 +266,7 @@ class Graph extends React.Component<Props> {
|
|
|
265
266
|
});
|
|
266
267
|
|
|
267
268
|
$instructionsWrapper.append($instructions);
|
|
268
|
-
// @ts-expect-error
|
|
269
|
+
// @ts-expect-error - TS2769 - No overload matches this call. | TS2339 - Property 'append' does not exist on type 'JQueryStatic'.
|
|
269
270
|
$(graphieDiv).append($instructionsWrapper);
|
|
270
271
|
} else {
|
|
271
272
|
$instructionsWrapper = undefined;
|
|
@@ -280,7 +281,7 @@ class Graph extends React.Component<Props> {
|
|
|
280
281
|
$instructionsWrapper = null;
|
|
281
282
|
}
|
|
282
283
|
// eslint-disable-next-line @babel/no-invalid-this
|
|
283
|
-
// @ts-expect-error
|
|
284
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
284
285
|
// eslint-disable-next-line @babel/no-invalid-this
|
|
285
286
|
this.props.onMouseDown(coord);
|
|
286
287
|
}, this)
|
|
@@ -345,7 +346,7 @@ class Graph extends React.Component<Props> {
|
|
|
345
346
|
}
|
|
346
347
|
|
|
347
348
|
if (this.props.showProtractor) {
|
|
348
|
-
// @ts-expect-error
|
|
349
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
349
350
|
const coord = this.pointsFromNormalized([[0.5, 0.05]])[0];
|
|
350
351
|
this.protractor = this._graphie.protractor(coord);
|
|
351
352
|
}
|
|
@@ -357,7 +358,7 @@ class Graph extends React.Component<Props> {
|
|
|
357
358
|
}
|
|
358
359
|
|
|
359
360
|
if (this.props.showRuler) {
|
|
360
|
-
// @ts-expect-error
|
|
361
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
361
362
|
const coord = this.pointsFromNormalized([[0.5, 0.25]])[0];
|
|
362
363
|
const extent =
|
|
363
364
|
this._graphie.range[0][1] - this._graphie.range[0][0];
|
|
@@ -394,7 +395,7 @@ class Graph extends React.Component<Props> {
|
|
|
394
395
|
if (imageData.url) {
|
|
395
396
|
const scale = this.props.box[0] / interactiveSizes.defaultBoxSize;
|
|
396
397
|
image = (
|
|
397
|
-
// @ts-expect-error
|
|
398
|
+
// @ts-expect-error - TS2741 - Property 'alt' is missing in type '{ src: any; width: any; height: any; scale: number; responsive: false; }' but required in type 'Pick<Readonly<Props> & Readonly<{ children?: ReactNode; }>, "children" | "height" | "width" | "title" | "alt" | "trackInteraction" | "preloader" | "allowFullBleed" | "extraGraphie" | "overrideAriaHidden">'.
|
|
398
399
|
<SvgImage
|
|
399
400
|
src={imageData.url}
|
|
400
401
|
width={imageData.width}
|
|
@@ -414,11 +415,11 @@ class Graph extends React.Component<Props> {
|
|
|
414
415
|
width: this.props.box[0],
|
|
415
416
|
height: this.props.box[1],
|
|
416
417
|
}}
|
|
417
|
-
// @ts-expect-error
|
|
418
|
+
// @ts-expect-error - TS2339 - Property 'onMouseOut' does not exist on type 'Graph'.
|
|
418
419
|
onMouseOut={this.onMouseOut}
|
|
419
|
-
// @ts-expect-error
|
|
420
|
+
// @ts-expect-error - TS2339 - Property 'onMouseOver' does not exist on type 'Graph'.
|
|
420
421
|
onMouseOver={this.onMouseOver}
|
|
421
|
-
// @ts-expect-error
|
|
422
|
+
// @ts-expect-error - TS2339 - Property 'onClick' does not exist on type 'Graph'.
|
|
422
423
|
onClick={this.onClick}
|
|
423
424
|
>
|
|
424
425
|
{image}
|