@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
|
@@ -29,24 +29,24 @@ const WrappedLine = function (
|
|
|
29
29
|
|
|
30
30
|
// Add `wrapper` and `visibleShape`
|
|
31
31
|
_.extend(
|
|
32
|
-
// @ts-expect-error
|
|
32
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
33
33
|
this,
|
|
34
34
|
graphie.fixedLine(initialStart, initialEnd, options.thickness),
|
|
35
35
|
);
|
|
36
36
|
|
|
37
37
|
if (options.interactiveKindForTesting) {
|
|
38
|
-
// @ts-expect-error
|
|
38
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
39
39
|
this.wrapper.setAttribute(
|
|
40
40
|
"data-interactive-kind-for-testing",
|
|
41
41
|
options.interactiveKindForTesting,
|
|
42
42
|
);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
// @ts-expect-error
|
|
45
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
46
46
|
this.visibleShape.attr(options.normalStyle);
|
|
47
47
|
|
|
48
48
|
// Save properties for computing transformations
|
|
49
|
-
// @ts-expect-error
|
|
49
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
50
50
|
_.extend(this, {
|
|
51
51
|
graphie: graphie,
|
|
52
52
|
initialPoint: graphie.scalePoint(initialStart),
|
|
@@ -60,18 +60,18 @@ const WrappedLine = function (
|
|
|
60
60
|
if (options.mouselayer) {
|
|
61
61
|
// Disable browser handling of all panning and zooming gestures on the
|
|
62
62
|
// movable wrapper so that when moved the browser does not scroll page
|
|
63
|
-
// @ts-expect-error
|
|
63
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
64
64
|
this.wrapper.style.touchAction = "none";
|
|
65
65
|
|
|
66
|
-
// @ts-expect-error
|
|
66
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
67
67
|
this.graphie.addToMouseLayerWrapper(this.wrapper);
|
|
68
68
|
} else {
|
|
69
|
-
// @ts-expect-error
|
|
69
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
70
70
|
this.graphie.addToVisibleLayerWrapper(this.wrapper);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
// Move to argument points
|
|
74
|
-
// @ts-expect-error
|
|
74
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
75
75
|
this.moveTo(start, end);
|
|
76
76
|
};
|
|
77
77
|
|
|
@@ -19,13 +19,13 @@ const WrappedPath = function (
|
|
|
19
19
|
|
|
20
20
|
// Add `wrapper` and `visibleShape`
|
|
21
21
|
_.extend(
|
|
22
|
-
// @ts-expect-error
|
|
22
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
23
23
|
this,
|
|
24
24
|
graphie.fixedPath(points, options.center, options.createPath),
|
|
25
25
|
);
|
|
26
26
|
|
|
27
27
|
// Add remaining properties
|
|
28
|
-
// @ts-expect-error
|
|
28
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
29
29
|
_.extend(this, {
|
|
30
30
|
graphie: graphie,
|
|
31
31
|
initialPoint: graphie.scalePoint(_.head(points)),
|
|
@@ -35,13 +35,13 @@ const WrappedPath = function (
|
|
|
35
35
|
if (options.mouselayer) {
|
|
36
36
|
// Disable browser handling of all panning and zooming gestures on the
|
|
37
37
|
// movable wrapper so that when moved the browser does not scroll page
|
|
38
|
-
// @ts-expect-error
|
|
38
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
39
39
|
this.wrapper.style.touchAction = "none";
|
|
40
40
|
|
|
41
|
-
// @ts-expect-error
|
|
41
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
42
42
|
this.graphie.addToMouseLayerWrapper(this.wrapper);
|
|
43
43
|
} else {
|
|
44
|
-
// @ts-expect-error
|
|
44
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
45
45
|
this.graphie.addToVisibleLayerWrapper(this.wrapper);
|
|
46
46
|
}
|
|
47
47
|
};
|
package/src/item-renderer.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @khanacademy/ts-no-error-suppressions */
|
|
1
2
|
/* eslint-disable react/no-unsafe */
|
|
2
3
|
import * as PerseusLinter from "@khanacademy/perseus-linter";
|
|
3
4
|
import $ from "jquery";
|
|
@@ -72,7 +73,7 @@ type SerializedState = {
|
|
|
72
73
|
};
|
|
73
74
|
|
|
74
75
|
class ItemRenderer extends React.Component<Props, State> {
|
|
75
|
-
// @ts-expect-error
|
|
76
|
+
// @ts-expect-error - TS2564 - Property 'questionRenderer' has no initializer and is not definitely assigned in the constructor.
|
|
76
77
|
questionRenderer: Renderer;
|
|
77
78
|
hintsRenderer: React.ElementRef<typeof HintsRenderer> | null | undefined;
|
|
78
79
|
_currentFocus: FocusPath;
|
|
@@ -206,7 +207,7 @@ class ItemRenderer extends React.Component<Props, State> {
|
|
|
206
207
|
{...this.props.item.question}
|
|
207
208
|
legacyPerseusLint={this.props.legacyPerseusLint}
|
|
208
209
|
/>,
|
|
209
|
-
// @ts-expect-error
|
|
210
|
+
// @ts-expect-error - TS2345 - Argument of type 'Element' is not assignable to parameter of type 'HTMLElement'.
|
|
210
211
|
workArea,
|
|
211
212
|
);
|
|
212
213
|
|
|
@@ -215,14 +216,14 @@ class ItemRenderer extends React.Component<Props, State> {
|
|
|
215
216
|
ref={(node) => (this.hintsRenderer = node)}
|
|
216
217
|
hints={this.props.item.hints}
|
|
217
218
|
hintsVisible={this.state.hintsVisible}
|
|
218
|
-
// @ts-expect-error
|
|
219
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
219
220
|
apiOptions={apiOptions}
|
|
220
221
|
linterContext={PerseusLinter.pushContextStack(
|
|
221
222
|
this.props.linterContext,
|
|
222
223
|
"hints",
|
|
223
224
|
)}
|
|
224
225
|
/>,
|
|
225
|
-
// @ts-expect-error
|
|
226
|
+
// @ts-expect-error - TS2345 - Argument of type 'Element' is not assignable to parameter of type 'HTMLElement'.
|
|
226
227
|
hintsArea,
|
|
227
228
|
);
|
|
228
229
|
|
|
@@ -459,7 +460,7 @@ class ItemRenderer extends React.Component<Props, State> {
|
|
|
459
460
|
const qScore = this.questionRenderer.scoreWidgets();
|
|
460
461
|
const qGuess = this.questionRenderer.getUserInputForWidgets();
|
|
461
462
|
const state = this.questionRenderer.getSerializedState();
|
|
462
|
-
// @ts-expect-error
|
|
463
|
+
// @ts-expect-error - TS2322 - Type 'Partial<Record<string, KEScore>>' is not assignable to type '{ [id: string]: KEScore; }'. | TS2345 - Argument of type '{ [widgetId: string]: PerseusScore; }' is not assignable to parameter of type 'Partial<Record<string, { type: "invalid"; message?: string | null | undefined; suppressAlmostThere?: boolean | null | undefined; }>>'.
|
|
463
464
|
return mapObject(qScore, (score, id) => {
|
|
464
465
|
return Util.keScoreFromPerseusScore(score, qGuess[id], state[id]);
|
|
465
466
|
});
|
package/src/mixins/changeable.ts
CHANGED
|
@@ -92,7 +92,7 @@ export const change: ChangeFn = function (
|
|
|
92
92
|
// Called with an object of multiple props to change
|
|
93
93
|
callback = propValue;
|
|
94
94
|
return _changeMultiple(
|
|
95
|
-
// @ts-expect-error
|
|
95
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
96
96
|
this,
|
|
97
97
|
newPropsOrSinglePropName, // object newProps
|
|
98
98
|
callback,
|
|
@@ -101,7 +101,7 @@ export const change: ChangeFn = function (
|
|
|
101
101
|
if (typeof newPropsOrSinglePropName === "string") {
|
|
102
102
|
// Called with a string propName of a single prop to change
|
|
103
103
|
return _changeSingle(
|
|
104
|
-
// @ts-expect-error
|
|
104
|
+
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
105
105
|
this,
|
|
106
106
|
newPropsOrSinglePropName, // string propName
|
|
107
107
|
propValue,
|
|
@@ -5,7 +5,7 @@ import WIDGET_PROP_DENYLIST from "./widget-prop-denylist";
|
|
|
5
5
|
const EditorJsonify = {
|
|
6
6
|
serialize: function (): any {
|
|
7
7
|
// Omit props that get passed to all widgets
|
|
8
|
-
// @ts-expect-error
|
|
8
|
+
// @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly serialize: () => any; }'.
|
|
9
9
|
return _.omit(this.props, WIDGET_PROP_DENYLIST);
|
|
10
10
|
},
|
|
11
11
|
} as const;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @khanacademy/ts-no-error-suppressions */
|
|
1
2
|
/**
|
|
2
3
|
* A mixin that renders a custom software keypad in additional to the base
|
|
3
4
|
* component. The base component will receive blur events when the keypad is
|
|
@@ -11,13 +12,13 @@
|
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
14
|
import {MobileKeypad} from "@khanacademy/math-input";
|
|
14
|
-
import PropTypes from "prop-types";
|
|
15
15
|
import * as React from "react";
|
|
16
16
|
import ReactDOM from "react-dom";
|
|
17
17
|
|
|
18
18
|
import reactRender from "../util/react-render";
|
|
19
19
|
|
|
20
20
|
import type {APIOptions} from "../types";
|
|
21
|
+
import type {KeypadAPI} from "@khanacademy/math-input";
|
|
21
22
|
import type {CSSProperties} from "aphrodite";
|
|
22
23
|
|
|
23
24
|
export type KeypadProps = {
|
|
@@ -33,48 +34,44 @@ export type KeypadApiOptions = {
|
|
|
33
34
|
nativeKeypadProxy: any;
|
|
34
35
|
};
|
|
35
36
|
|
|
37
|
+
// This represents the shape of any component that uses this ProvideKeypad
|
|
38
|
+
// mixin.
|
|
39
|
+
type KeypadMixinHostComponent = {
|
|
40
|
+
_keypadContainer?: HTMLDivElement | null;
|
|
41
|
+
props: {
|
|
42
|
+
apiOptions: APIOptions;
|
|
43
|
+
blur?: () => void;
|
|
44
|
+
};
|
|
45
|
+
state: {
|
|
46
|
+
keypadElement: any | null;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
36
50
|
// NOTE: This is not a real component. It's a collection of methods used to
|
|
37
51
|
// create and manage a Keypad instances.
|
|
38
52
|
// TODO(LP-10789): replace this with a React Context object to pass information
|
|
39
53
|
// between Perseus and the Keypad.
|
|
40
54
|
const ProvideKeypad = {
|
|
41
|
-
|
|
42
|
-
apiOptions: PropTypes.shape({
|
|
43
|
-
customKeypad: PropTypes.bool,
|
|
44
|
-
nativeKeypadProxy: PropTypes.func,
|
|
45
|
-
}),
|
|
46
|
-
// An Aphrodite style object, to be applied to the keypad container.
|
|
47
|
-
// Note that, given our awkward structure of injecting the keypad, this
|
|
48
|
-
// style won't be applied or updated dynamically. Rather, it will only
|
|
49
|
-
// be applied in `componentDidMount`.
|
|
50
|
-
keypadStyle: PropTypes.any,
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
getInitialState(): {
|
|
55
|
+
getInitialState(this: KeypadMixinHostComponent): {
|
|
54
56
|
keypadElement: any | null;
|
|
55
57
|
} {
|
|
56
58
|
const _this = this;
|
|
57
|
-
let keypadElement = null;
|
|
59
|
+
let keypadElement: KeypadAPI | null = null;
|
|
58
60
|
if (
|
|
59
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
60
61
|
_this.props.apiOptions &&
|
|
61
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
62
62
|
_this.props.apiOptions.customKeypad &&
|
|
63
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
64
63
|
_this.props.apiOptions.nativeKeypadProxy
|
|
65
64
|
) {
|
|
66
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
67
65
|
keypadElement = _this.props.apiOptions.nativeKeypadProxy(
|
|
68
|
-
// @ts-expect-error
|
|
66
|
+
// @ts-expect-error - TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'. | TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
69
67
|
() => _this.blur && _this.blur(),
|
|
70
68
|
);
|
|
71
69
|
}
|
|
72
70
|
return {keypadElement};
|
|
73
71
|
},
|
|
74
72
|
|
|
75
|
-
componentDidMount() {
|
|
73
|
+
componentDidMount(this: KeypadMixinHostComponent) {
|
|
76
74
|
const _this = this;
|
|
77
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
78
75
|
const apiOptions: APIOptions = _this.props.apiOptions;
|
|
79
76
|
|
|
80
77
|
if (
|
|
@@ -85,9 +82,7 @@ const ProvideKeypad = {
|
|
|
85
82
|
// TODO(charlie): Render this and the wrapped component in the same
|
|
86
83
|
// React tree. We may also want to add this keypad asynchronously
|
|
87
84
|
// or on-demand in the future.
|
|
88
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
89
85
|
_this._keypadContainer = document.createElement("div");
|
|
90
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
91
86
|
document.body?.appendChild(_this._keypadContainer);
|
|
92
87
|
|
|
93
88
|
reactRender(
|
|
@@ -96,49 +91,41 @@ const ProvideKeypad = {
|
|
|
96
91
|
// NOTE(kevinb): The reason why this setState works is
|
|
97
92
|
// b/c we're calling it manually from item-renderer.jsx
|
|
98
93
|
// and we're manually setting the 'this' by using 'call'
|
|
99
|
-
// @ts-expect-error
|
|
94
|
+
// @ts-expect-error - TS2339 - Property 'setState' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
100
95
|
_this.setState({
|
|
101
96
|
keypadElement: element,
|
|
102
97
|
});
|
|
103
98
|
}}
|
|
104
99
|
onDismiss={() => {
|
|
105
|
-
// @ts-expect-error
|
|
100
|
+
// @ts-expect-error - TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'. | TS2339 - Property 'blur' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
106
101
|
_this.blur && _this.blur();
|
|
107
102
|
}}
|
|
108
|
-
// @ts-expect-error
|
|
103
|
+
// @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
109
104
|
style={_this.props.keypadStyle}
|
|
110
105
|
useV2Keypad={apiOptions.useV2Keypad}
|
|
111
106
|
/>,
|
|
112
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
113
107
|
_this._keypadContainer,
|
|
114
108
|
);
|
|
115
109
|
}
|
|
116
110
|
},
|
|
117
111
|
|
|
118
|
-
componentWillUnmount() {
|
|
112
|
+
componentWillUnmount(this: KeypadMixinHostComponent) {
|
|
119
113
|
const _this = this;
|
|
120
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
121
114
|
if (_this._keypadContainer) {
|
|
122
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
123
115
|
ReactDOM.unmountComponentAtNode(_this._keypadContainer);
|
|
124
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
125
116
|
if (_this._keypadContainer.parentNode) {
|
|
126
117
|
// Note ChildNode.remove() isn't available in older Android
|
|
127
118
|
// webviews.
|
|
128
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
129
119
|
_this._keypadContainer.parentNode.removeChild(
|
|
130
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
131
120
|
_this._keypadContainer,
|
|
132
121
|
);
|
|
133
122
|
}
|
|
134
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property '_keypadContainer' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
135
123
|
_this._keypadContainer = null;
|
|
136
124
|
}
|
|
137
125
|
},
|
|
138
126
|
|
|
139
|
-
keypadElement(): any {
|
|
127
|
+
keypadElement(this: KeypadMixinHostComponent): any {
|
|
140
128
|
const _this = this;
|
|
141
|
-
// @ts-expect-error [FEI-5003] - TS2339 - Property 'state' does not exist on type '{ readonly propTypes: { readonly apiOptions: React.PropType<{ customKeypad?: boolean | undefined; nativeKeypadProxy?: ((...a: readonly any[]) => unknown) | undefined; }>; readonly keypadStyle: Requireable<any>; }; readonly getInitialState: () => { ...; }; readonly componentDidMount: () => void; readonly componentWil...'.
|
|
142
129
|
return _this.state.keypadElement;
|
|
143
130
|
},
|
|
144
131
|
} as const;
|
|
@@ -9,7 +9,7 @@ import WIDGET_PROP_DENYLIST from "./widget-prop-denylist";
|
|
|
9
9
|
const WidgetJsonifyDeprecated = {
|
|
10
10
|
getUserInput: function (): any {
|
|
11
11
|
// Omit props that get passed to all widgets
|
|
12
|
-
// @ts-expect-error
|
|
12
|
+
// @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly getUserInput: () => any; readonly getUserInputFromProps: (props: any) => any; }'.
|
|
13
13
|
return _.omit(this.props, WIDGET_PROP_DENYLIST);
|
|
14
14
|
},
|
|
15
15
|
|
|
@@ -217,7 +217,7 @@ const item: Item = treeToItem({
|
|
|
217
217
|
describe("findContentNodesInItem", () => {
|
|
218
218
|
it("calls the callback for each content node in the item", () => {
|
|
219
219
|
const contents = [];
|
|
220
|
-
// @ts-expect-error
|
|
220
|
+
// @ts-expect-error - TS2345 - Argument of type 'ContentNode' is not assignable to parameter of type 'never'.
|
|
221
221
|
findContentNodesInItem(item, shape, (c) => contents.push(c));
|
|
222
222
|
contents.sort();
|
|
223
223
|
expect([
|
|
@@ -69,7 +69,7 @@ const renderSimpleQuestion = (question: Item) => {
|
|
|
69
69
|
const _findWidgets = (
|
|
70
70
|
renderer: MultiRenderer,
|
|
71
71
|
filterCriterion: FilterCriterion,
|
|
72
|
-
// @ts-expect-error
|
|
72
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
73
73
|
): Tree<
|
|
74
74
|
ReadonlyArray<Widget | null | undefined>,
|
|
75
75
|
ReadonlyArray<Widget | null | undefined>,
|
|
@@ -144,7 +144,7 @@ describe("multi-item renderer", () => {
|
|
|
144
144
|
userEvent.paste(screen.getByRole("textbox"), "+42"); // Correct
|
|
145
145
|
|
|
146
146
|
// Act
|
|
147
|
-
// @ts-expect-error
|
|
147
|
+
// @ts-expect-error - TS2339 - Property '_getSerializedState' does not exist on type 'never'.
|
|
148
148
|
const state = renderer._getSerializedState(null);
|
|
149
149
|
|
|
150
150
|
// Assert
|
|
@@ -277,7 +277,7 @@ describe("multi-item renderer", () => {
|
|
|
277
277
|
userEvent.paste(screen.getByRole("textbox"), "99");
|
|
278
278
|
|
|
279
279
|
// Act
|
|
280
|
-
// @ts-expect-error
|
|
280
|
+
// @ts-expect-error - TS2339 - Property '_getSerializedState' does not exist on type 'never'.
|
|
281
281
|
const state = renderer._getSerializedState({
|
|
282
282
|
blurb: "last blurb",
|
|
283
283
|
hints: ["uno", "dos" /* intentionally not passing a third */],
|
|
@@ -528,7 +528,7 @@ describe("multi-item renderer", () => {
|
|
|
528
528
|
} as const;
|
|
529
529
|
|
|
530
530
|
// Act
|
|
531
|
-
// @ts-expect-error
|
|
531
|
+
// @ts-expect-error - TS2339 - Property 'restoreSerializedState' does not exist on type 'never'.
|
|
532
532
|
renderer.restoreSerializedState(state);
|
|
533
533
|
|
|
534
534
|
// Assert
|
|
@@ -546,7 +546,7 @@ describe("multi-item renderer", () => {
|
|
|
546
546
|
const callback = jest.fn();
|
|
547
547
|
|
|
548
548
|
// Act
|
|
549
|
-
// @ts-expect-error
|
|
549
|
+
// @ts-expect-error - TS2339 - Property 'restoreSerializedState' does not exist on type 'never'.
|
|
550
550
|
renderer.restoreSerializedState(
|
|
551
551
|
{
|
|
552
552
|
blurb: {"mock-widget 1": 1},
|
|
@@ -594,7 +594,7 @@ describe("multi-item renderer", () => {
|
|
|
594
594
|
userEvent.paste(screen.getByRole("textbox"), "-42"); // Correct
|
|
595
595
|
|
|
596
596
|
// Act
|
|
597
|
-
// @ts-expect-error
|
|
597
|
+
// @ts-expect-error - TS2339 - Property 'getScores' does not exist on type 'never'.
|
|
598
598
|
const score = renderer.getScores();
|
|
599
599
|
|
|
600
600
|
// Assert
|
|
@@ -756,7 +756,7 @@ describe("multi-item renderer", () => {
|
|
|
756
756
|
userEvent.paste(screen.getByRole("textbox"), "-42"); // Correct
|
|
757
757
|
|
|
758
758
|
// Act
|
|
759
|
-
// @ts-expect-error
|
|
759
|
+
// @ts-expect-error - TS2339 - Property 'score' does not exist on type 'never'.
|
|
760
760
|
const score = renderer.score();
|
|
761
761
|
|
|
762
762
|
// Assert
|
|
@@ -66,7 +66,7 @@ describe("buildMapper", () => {
|
|
|
66
66
|
it("calls the content mapper for each of the content nodes", () => {
|
|
67
67
|
const calledWith = [];
|
|
68
68
|
buildMapper()
|
|
69
|
-
// @ts-expect-error
|
|
69
|
+
// @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'never'.
|
|
70
70
|
.setContentMapper((c) => calledWith.push(c))
|
|
71
71
|
.mapTree(tree, shape);
|
|
72
72
|
calledWith.sort();
|
|
@@ -83,7 +83,7 @@ describe("buildMapper", () => {
|
|
|
83
83
|
it("calls the hint mapper for each of the hint nodes", () => {
|
|
84
84
|
const calledWith = [];
|
|
85
85
|
buildMapper()
|
|
86
|
-
// @ts-expect-error
|
|
86
|
+
// @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'never'.
|
|
87
87
|
.setHintMapper((h) => calledWith.push(h))
|
|
88
88
|
.mapTree(tree, shape);
|
|
89
89
|
calledWith.sort();
|
|
@@ -110,9 +110,9 @@ describe("buildMapper", () => {
|
|
|
110
110
|
TagsNode,
|
|
111
111
|
string
|
|
112
112
|
> = buildMapper()
|
|
113
|
-
// @ts-expect-error
|
|
113
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
114
114
|
.setContentMapper((c) => `mapped content: ${c.content || "<none>"}`)
|
|
115
|
-
// @ts-expect-error
|
|
115
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
116
116
|
.setHintMapper((h) => `mapped hint: ${h.content || "<none>"}`)
|
|
117
117
|
.setTagsMapper((t) => `mapped tags: ${t.join(", ")}`);
|
|
118
118
|
const result = mapper.mapTree(tree, shape);
|
|
@@ -188,7 +188,7 @@ describe("buildMapper", () => {
|
|
|
188
188
|
|
|
189
189
|
const tree = {a: {b: {c: content(1)}}} as const;
|
|
190
190
|
|
|
191
|
-
// @ts-expect-error
|
|
191
|
+
// @ts-expect-error - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
|
|
192
192
|
const mapper: TreeMapper<
|
|
193
193
|
ContentNode,
|
|
194
194
|
string | null | undefined,
|
|
@@ -212,7 +212,7 @@ describe("buildMapper", () => {
|
|
|
212
212
|
array(array(content(2)), array(content(3), content(4))),
|
|
213
213
|
);
|
|
214
214
|
|
|
215
|
-
// @ts-expect-error
|
|
215
|
+
// @ts-expect-error - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
|
|
216
216
|
const mapper: TreeMapper<
|
|
217
217
|
ContentNode,
|
|
218
218
|
string | null | undefined,
|
|
@@ -234,7 +234,7 @@ describe("buildMapper", () => {
|
|
|
234
234
|
|
|
235
235
|
const tree = array(array(), array(content(1)), array());
|
|
236
236
|
|
|
237
|
-
// @ts-expect-error
|
|
237
|
+
// @ts-expect-error - TS2322 - Type 'TreeMapperJustForLeaves<ContentNode, string | null | undefined, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
|
|
238
238
|
const mapper: TreeMapper<
|
|
239
239
|
ContentNode,
|
|
240
240
|
string | null | undefined,
|
|
@@ -258,7 +258,7 @@ describe("buildMapper", () => {
|
|
|
258
258
|
|
|
259
259
|
let wasCalled = false;
|
|
260
260
|
let callArgs: Record<string, any> = {};
|
|
261
|
-
// @ts-expect-error
|
|
261
|
+
// @ts-expect-error - TS2322 - Type 'TreeMapperForLeavesAndCollections<unknown, any, unknown, unknown, unknown, unknown>' is not assignable to type 'TreeMapper<ContentNode, string | null | undefined, HintNode, HintNode, TagsNode, TagsNode>'.
|
|
262
262
|
const mapper: TreeMapper<
|
|
263
263
|
ContentNode,
|
|
264
264
|
string | null | undefined,
|
|
@@ -267,7 +267,7 @@ describe("buildMapper", () => {
|
|
|
267
267
|
TagsNode,
|
|
268
268
|
TagsNode
|
|
269
269
|
> = buildMapper()
|
|
270
|
-
// @ts-expect-error
|
|
270
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
271
271
|
.setContentMapper((c) => c.content)
|
|
272
272
|
.setArrayMapper((mappedArray, originalArray, shape, path) => {
|
|
273
273
|
wasCalled = true;
|
|
@@ -288,11 +288,11 @@ describe("buildMapper", () => {
|
|
|
288
288
|
|
|
289
289
|
it("uses the array mapper return value to construct the new tree", () => {
|
|
290
290
|
const mapper = buildMapper()
|
|
291
|
-
// @ts-expect-error
|
|
291
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
292
292
|
.setContentMapper((c) => c.content)
|
|
293
|
-
// @ts-expect-error
|
|
293
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
294
294
|
.setHintMapper((h) => h.content)
|
|
295
|
-
// @ts-expect-error
|
|
295
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
296
296
|
.setTagsMapper((t) => t.join(", "))
|
|
297
297
|
.setArrayMapper((mappedArray, originalArray, shape, path) => {
|
|
298
298
|
return mappedArray.map((child) => `${String(child)} in array`);
|
|
@@ -37,10 +37,10 @@ export type HintNode = {
|
|
|
37
37
|
};
|
|
38
38
|
export type TagsNode = ReadonlyArray<string>;
|
|
39
39
|
|
|
40
|
-
// @ts-expect-error
|
|
40
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
41
41
|
export type ItemArrayNode = ArrayNode<ContentNode, HintNode, TagsNode>;
|
|
42
42
|
export type ItemObjectNode = ObjectNode<ContentNode, HintNode, TagsNode>;
|
|
43
|
-
// @ts-expect-error
|
|
43
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
44
44
|
export type ItemTree = Tree<ContentNode, HintNode, TagsNode>;
|
|
45
45
|
|
|
46
46
|
// TODO(jeremy): I think we could refine this root type for multi items. Right
|
package/src/multi-items/items.ts
CHANGED
|
@@ -66,7 +66,7 @@ export function buildEmptyItemTreeForShape(shape: Shape): ItemTree {
|
|
|
66
66
|
return object;
|
|
67
67
|
}
|
|
68
68
|
throw new PerseusError(
|
|
69
|
-
// @ts-expect-error
|
|
69
|
+
// @ts-expect-error - TS2339 - Property 'type' does not exist on type 'never'.
|
|
70
70
|
`unexpected shape type ${shape.type}`,
|
|
71
71
|
Errors.InvalidInput,
|
|
72
72
|
);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @khanacademy/ts-no-error-suppressions */
|
|
1
2
|
/* eslint-disable react/no-unsafe */
|
|
2
3
|
// TODO(mdr): There are some TypeScript errors in this file, and they're tricky, so
|
|
3
4
|
// I'm skipping TypeScript errors for now.
|
|
@@ -61,7 +62,7 @@ type SerializedState = any; // TODO(mdr)
|
|
|
61
62
|
|
|
62
63
|
type RendererProps = JSX.LibraryManagedAttributes<
|
|
63
64
|
typeof Renderer,
|
|
64
|
-
// @ts-expect-error
|
|
65
|
+
// @ts-expect-error - TS2344 - Type 'typeof Renderer' does not satisfy the constraint 'keyof IntrinsicElements | JSXElementConstructor<any>'.
|
|
65
66
|
React.ComponentProps<typeof Renderer>
|
|
66
67
|
>;
|
|
67
68
|
|
|
@@ -81,7 +82,7 @@ type HintRendererData = {
|
|
|
81
82
|
hint: Hint;
|
|
82
83
|
};
|
|
83
84
|
type RendererData = ContentRendererData | HintRendererData;
|
|
84
|
-
// @ts-expect-error
|
|
85
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
85
86
|
type RendererDataTree = Tree<ContentRendererData, HintRendererData, null>;
|
|
86
87
|
|
|
87
88
|
/**
|
|
@@ -92,11 +93,11 @@ type RendererDataTree = Tree<ContentRendererData, HintRendererData, null>;
|
|
|
92
93
|
* really helping us out as I now have to suppress this rather than
|
|
93
94
|
* get value from the type. :(
|
|
94
95
|
*/
|
|
95
|
-
// @ts-expect-error
|
|
96
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
96
97
|
type RendererTree = Tree<ContentRendererElement, HintRendererElement, null>;
|
|
97
|
-
// @ts-expect-error
|
|
98
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
98
99
|
type ScoreTree = Tree<Score, null, null>;
|
|
99
|
-
// @ts-expect-error
|
|
100
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
100
101
|
type SerializedStateTree = Tree<SerializedState, null, null>;
|
|
101
102
|
|
|
102
103
|
type Props = {
|
|
@@ -140,17 +141,17 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
140
141
|
super(props);
|
|
141
142
|
|
|
142
143
|
this.rendererDataTreeMapper = buildMapper()
|
|
143
|
-
// @ts-expect-error
|
|
144
|
+
// @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'ContentNode'.
|
|
144
145
|
.setContentMapper((c, _, p) => this._makeContentRendererData(c, p))
|
|
145
|
-
// @ts-expect-error
|
|
146
|
+
// @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'HintNode'.
|
|
146
147
|
.setHintMapper((h) => this._makeHintRendererData(h))
|
|
147
148
|
.setTagsMapper((t) => null);
|
|
148
149
|
|
|
149
|
-
// @ts-expect-error
|
|
150
|
+
// @ts-expect-error - TS2322 - Type 'TreeMapperForLeavesAndCollections<unknown, any, unknown, any, unknown, unknown>' is not assignable to type 'TreeMapper<ContentRendererData, ContentRendererElement, HintRendererData, HintRendererElement, null, null>'.
|
|
150
151
|
this.getRenderersMapper = buildMapper()
|
|
151
|
-
// @ts-expect-error
|
|
152
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
152
153
|
.setContentMapper((c) => c.makeRenderer())
|
|
153
|
-
// @ts-expect-error
|
|
154
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
154
155
|
.setHintMapper((h) => h.makeRenderer())
|
|
155
156
|
.setArrayMapper((renderers, data, shape) =>
|
|
156
157
|
this._annotateRendererArray(
|
|
@@ -263,7 +264,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
263
264
|
* if this spread is including undocumented props so mapping
|
|
264
265
|
* one to one could introduce a bug. Need to work out the exact
|
|
265
266
|
* type for ContentNode and then fix this.
|
|
266
|
-
*/ // @ts-expect-error
|
|
267
|
+
*/ // @ts-expect-error - TS2322 - Type '{ ref: (e: any) => any; findExternalWidgets: (criterion: any) => readonly (Widget | null | undefined)[]; serializedState: any; onSerializedStateUpdated: (state: any) => void; __type: "content" | "item"; ... 9 more ...; reviewMode?: boolean | ... 1 more ... | undefined; }' is not assignable to type 'InexactPartial<Pick<Readonly<Props> & Readonly<{ children?: ReactNode; }>, "content" | "images" | "onRender" | "linterContext" | "widgets" | "alwaysUpdate" | ... 6 more ... | "serializedState">>'.
|
|
267
268
|
<Renderer
|
|
268
269
|
{...this._getRendererProps()}
|
|
269
270
|
{...content}
|
|
@@ -305,7 +306,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
305
306
|
makeRenderer: () => (
|
|
306
307
|
<HintsRenderer
|
|
307
308
|
{...this._getRendererProps()}
|
|
308
|
-
// @ts-expect-error
|
|
309
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
309
310
|
findExternalWidgets={findExternalWidgets}
|
|
310
311
|
hints={[hint]}
|
|
311
312
|
/>
|
|
@@ -360,7 +361,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
360
361
|
// eslint-disable-next-line no-restricted-syntax
|
|
361
362
|
leafMapper: ContentMapper<RendererData, O> &
|
|
362
363
|
HintMapper<RendererData, O>,
|
|
363
|
-
// @ts-expect-error
|
|
364
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
364
365
|
): Tree<O, O, null> | null | undefined {
|
|
365
366
|
const {rendererDataTree} = this.state;
|
|
366
367
|
|
|
@@ -505,7 +506,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
505
506
|
(renderers as any).firstN = (n: any) => (
|
|
506
507
|
<HintsRenderer
|
|
507
508
|
{...this._getRendererProps()}
|
|
508
|
-
// @ts-expect-error
|
|
509
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
509
510
|
findExternalWidgets={
|
|
510
511
|
hintRendererDatas[0]
|
|
511
512
|
? hintRendererDatas[0].findExternalWidgets
|