@khanacademy/perseus 7.2.1 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/article-renderer.d.ts +27 -40
- package/dist/components/math-input.d.ts +1 -1
- package/dist/components/sortable.d.ts +1 -1
- package/dist/components/tex-buttons.d.ts +1 -1
- package/dist/dependencies.d.ts +7 -1
- package/dist/es/index.js +1205 -1218
- package/dist/es/index.js.map +1 -1
- package/dist/hints-renderer.d.ts +1 -1
- package/dist/index.js +1207 -1221
- package/dist/index.js.map +1 -1
- package/dist/interaction-tracker.d.ts +3 -3
- package/dist/item-renderer.d.ts +2 -1
- package/dist/mixins/provide-keypad.d.ts +15 -12
- package/dist/multi-items/multi-renderer.d.ts +2 -1
- package/dist/perseus-api.d.ts +2 -2
- package/dist/renderer.d.ts +1 -1
- package/dist/server-item-renderer.d.ts +3 -1
- package/dist/types.d.ts +32 -11
- package/dist/widgets/expression.d.ts +410 -13
- package/dist/widgets/graded-group.d.ts +3 -3
- package/dist/widgets/interactive-graph.d.ts +1 -1
- package/dist/widgets/sequence.d.ts +3 -3
- package/dist/widgets/table.d.ts +8 -1
- package/dist/widgets.d.ts +1 -1
- package/package.json +34 -34
- package/src/__stories__/article-renderer.stories.tsx +35 -2
- package/src/__testdata__/article-renderer.testdata.ts +74 -1
- package/src/__testdata__/item-renderer.testdata.ts +1 -1
- package/src/__testdata__/renderer.testdata.ts +1 -1
- package/src/__tests__/item-renderer.test.tsx +13 -2
- package/src/__tests__/mock-asset-loading-widget.tsx +1 -1
- package/src/__tests__/perseus-markdown.test.ts +17 -17
- package/src/__tests__/renderer-api.test.tsx +21 -21
- package/src/__tests__/renderer.test.tsx +13 -13
- package/src/__tests__/server-item-renderer.test.tsx +12 -4
- package/src/__tests__/tex-wrangler.test.ts +1 -1
- package/src/article-renderer.tsx +75 -66
- package/src/components/__tests__/number-input.test.tsx +4 -4
- package/src/components/__tests__/sortable.test.tsx +2 -2
- package/src/components/fixed-to-responsive.tsx +1 -1
- package/src/components/graph.tsx +11 -11
- package/src/components/graphie-classes.ts +7 -7
- package/src/components/graphie.tsx +14 -14
- package/src/components/highlighting/highlightable-content.tsx +1 -1
- package/src/components/highlighting/ui/highlight-renderer.tsx +1 -1
- package/src/components/highlighting/ui/util.ts +2 -2
- package/src/components/highlighting/word-indexer.tsx +4 -4
- package/src/components/icon.tsx +1 -1
- package/src/components/image-loader.tsx +4 -4
- package/src/components/input-with-examples.tsx +2 -2
- package/src/components/lint.tsx +1 -1
- package/src/components/math-input.tsx +5 -5
- package/src/components/math-output.tsx +1 -1
- package/src/components/multi-button-group.tsx +1 -1
- package/src/components/number-input.tsx +10 -10
- package/src/components/prop-check-box.tsx +1 -1
- package/src/components/simple-keypad-input.tsx +4 -4
- package/src/components/sortable.tsx +42 -41
- package/src/components/svg-image.tsx +12 -12
- package/src/components/tex-buttons.tsx +4 -3
- package/src/components/text-input.tsx +8 -8
- package/src/components/text-list-editor.tsx +11 -11
- package/src/components/visibility-observer/create-visibility-observer.ts +1 -1
- package/src/components/visibility-observer/visibility-observer.tsx +2 -2
- package/src/components/zoomable-tex.tsx +3 -3
- package/src/components/zoomable.tsx +8 -8
- package/src/dependencies.ts +16 -1
- package/src/hint-renderer.tsx +3 -3
- package/src/hints-renderer.tsx +11 -11
- package/src/init.ts +1 -1
- package/src/interaction-tracker.ts +7 -7
- package/src/interactive2/__tests__/movable-point.test.ts +1 -1
- package/src/interactive2/interactive-util.ts +6 -6
- package/src/interactive2/movable-helper-methods.ts +2 -2
- package/src/interactive2/movable-line-options.ts +37 -37
- package/src/interactive2/movable-line.ts +2 -2
- package/src/interactive2/movable-point-options.ts +29 -29
- package/src/interactive2/movable-point.tsx +2 -2
- package/src/interactive2/movable-polygon-options.ts +45 -45
- package/src/interactive2/movable-polygon.ts +2 -2
- package/src/interactive2/movable.ts +2 -2
- package/src/interactive2/objective_.ts +1 -1
- package/src/interactive2/wrapped-defaults.ts +2 -2
- package/src/interactive2/wrapped-ellipse.ts +9 -9
- package/src/interactive2/wrapped-line.ts +8 -8
- package/src/interactive2/wrapped-path.ts +5 -5
- package/src/item-renderer.tsx +66 -48
- package/src/mixins/changeable.ts +2 -2
- package/src/mixins/editor-jsonify.ts +1 -1
- package/src/mixins/provide-keypad.tsx +23 -37
- package/src/mixins/widget-jsonify-deprecated.ts +1 -1
- package/src/multi-items/__tests__/items.test.ts +1 -1
- package/src/multi-items/__tests__/multi-renderer.test.tsx +13 -8
- package/src/multi-items/__tests__/trees.test.ts +12 -12
- package/src/multi-items/item-types.ts +2 -2
- package/src/multi-items/items.ts +1 -1
- package/src/multi-items/multi-renderer.tsx +30 -18
- package/src/multi-items/prop-type-builders.ts +2 -2
- package/src/multi-items/tree-types.ts +4 -4
- package/src/multi-items/trees.ts +16 -16
- package/src/perseus-env.ts +2 -2
- package/src/perseus-markdown.tsx +5 -5
- package/src/renderer.tsx +39 -39
- package/src/server-item-renderer.tsx +26 -21
- package/src/sigfigs.ts +1 -1
- package/src/traversal.ts +1 -1
- package/src/types.ts +52 -16
- package/src/util/answer-types.ts +14 -14
- package/src/util/geometry.ts +7 -7
- package/src/util/graphie.ts +32 -32
- package/src/util/interactive.ts +118 -118
- package/src/util/math.ts +4 -4
- package/src/util/react-render.tsx +1 -1
- package/src/util/scroll-utils.ts +2 -2
- package/src/util/tex.ts +3 -3
- package/src/util.ts +15 -15
- package/src/widget-container.tsx +1 -1
- package/src/widgets/__stories__/definition.stories.tsx +8 -1
- package/src/widgets/__stories__/expression.stories.tsx +2 -2
- package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +3 -3
- package/src/widgets/__testdata__/numeric-input.testdata.ts +1 -1
- package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +2 -2
- package/src/widgets/__tests__/{expression.test.ts → expression.test.tsx} +77 -11
- package/src/widgets/__tests__/grapher.cypress.ts +32 -32
- package/src/widgets/__tests__/group.test.tsx +1 -1
- package/src/widgets/__tests__/interactive-graph.cypress.ts +40 -40
- package/src/widgets/__tests__/interactive-graph.test.ts +1 -1
- package/src/widgets/__tests__/numeric-input.test.ts +1 -1
- package/src/widgets/__tests__/passage.test.tsx +2 -2
- package/src/widgets/__tests__/plotter.test.tsx +2 -1
- package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
- package/src/widgets/__tests__/renderQuestion.tsx +29 -21
- package/src/widgets/categorizer.tsx +4 -4
- package/src/widgets/cs-program.tsx +2 -2
- package/src/widgets/dropdown.tsx +1 -1
- package/src/widgets/expression.tsx +92 -57
- package/src/widgets/graded-group-set.tsx +5 -5
- package/src/widgets/graded-group.tsx +29 -21
- package/src/widgets/grapher/util.tsx +6 -6
- package/src/widgets/grapher.tsx +10 -10
- package/src/widgets/group.tsx +3 -3
- package/src/widgets/iframe.tsx +2 -2
- package/src/widgets/image.tsx +1 -1
- package/src/widgets/input-number.tsx +4 -4
- package/src/widgets/interaction.tsx +77 -77
- package/src/widgets/interactive-graph.tsx +109 -107
- package/src/widgets/label-image/marker.tsx +2 -2
- package/src/widgets/label-image.test.ts +1 -1
- package/src/widgets/label-image.tsx +7 -7
- package/src/widgets/lights-puzzle.tsx +2 -2
- package/src/widgets/matcher.tsx +6 -6
- package/src/widgets/matrix.tsx +20 -20
- package/src/widgets/measurer.tsx +3 -3
- package/src/widgets/molecule/__tests__/layout.test.ts +4 -4
- package/src/widgets/molecule/__tests__/parser.test.ts +14 -14
- package/src/widgets/molecule/smiles-parser.ts +3 -3
- package/src/widgets/molecule.tsx +4 -4
- package/src/widgets/number-line.tsx +11 -11
- package/src/widgets/numeric-input.tsx +11 -11
- package/src/widgets/orderer.tsx +38 -38
- package/src/widgets/passage/__tests__/passage-markdown.test.ts +1 -1
- package/src/widgets/passage/passage-markdown.tsx +4 -4
- package/src/widgets/passage-ref-target.tsx +1 -1
- package/src/widgets/passage-ref.tsx +4 -6
- package/src/widgets/passage.tsx +11 -11
- package/src/widgets/plotter.tsx +9 -9
- package/src/widgets/radio/base-radio.tsx +11 -11
- package/src/widgets/radio/choice-icon/choice-icon.tsx +2 -2
- package/src/widgets/radio/choice.tsx +1 -1
- package/src/widgets/radio/option-status.tsx +1 -1
- package/src/widgets/radio/widget.tsx +6 -6
- package/src/widgets/radio.ts +1 -1
- package/src/widgets/reaction-diagram.tsx +8 -8
- package/src/widgets/sequence.tsx +12 -4
- package/src/widgets/simulator.tsx +14 -14
- package/src/widgets/sorter.tsx +4 -4
- package/src/widgets/table.tsx +8 -8
- package/src/widgets/transformer.tsx +92 -92
- package/src/widgets/unit.tsx +17 -17
- package/src/widgets/video-transcript-link.test.tsx +3 -3
- package/src/widgets/video-transcript-link.tsx +1 -1
- package/src/widgets/video.tsx +1 -1
- package/src/widgets.ts +5 -5
- package/src/zoom.ts +22 -22
- package/tsconfig-build.tsbuildinfo +1 -1
- package/dist/a11y.js.flow +0 -11
- package/dist/all-widgets.js.flow +0 -33
- package/dist/article-renderer.js.flow +0 -73
- package/dist/asset-context.js.flow +0 -15
- package/dist/basic-widgets.js.flow +0 -33
- package/dist/components/button-group.js.flow +0 -33
- package/dist/components/constants.js.flow +0 -13
- package/dist/components/fixed-to-responsive.js.flow +0 -34
- package/dist/components/graph.js.flow +0 -66
- package/dist/components/graphie-classes.js.flow +0 -19
- package/dist/components/graphie-movables.js.flow +0 -22
- package/dist/components/graphie.js.flow +0 -69
- package/dist/components/highlighting/highlightable-content.js.flow +0 -56
- package/dist/components/highlighting/highlights.js.flow +0 -54
- package/dist/components/highlighting/ranges.js.flow +0 -60
- package/dist/components/highlighting/types.js.flow +0 -70
- package/dist/components/highlighting/ui/highlight-renderer.js.flow +0 -43
- package/dist/components/highlighting/ui/highlight-set-renderer.js.flow +0 -41
- package/dist/components/highlighting/ui/highlight-tooltip.js.flow +0 -22
- package/dist/components/highlighting/ui/highlighting-ui.js.flow +0 -30
- package/dist/components/highlighting/ui/selection-tracker.js.flow +0 -54
- package/dist/components/highlighting/ui/types.js.flow +0 -22
- package/dist/components/highlighting/ui/util.js.flow +0 -42
- package/dist/components/highlighting/word-indexer.js.flow +0 -21
- package/dist/components/hud.js.flow +0 -14
- package/dist/components/icon.js.flow +0 -31
- package/dist/components/image-loader.js.flow +0 -49
- package/dist/components/info-tip/info-tip.js.flow +0 -20
- package/dist/components/info-tip.js.flow +0 -18
- package/dist/components/inline-icon.js.flow +0 -39
- package/dist/components/input-with-examples.js.flow +0 -58
- package/dist/components/lint.js.flow +0 -58
- package/dist/components/math-input.js.flow +0 -49
- package/dist/components/math-output.js.flow +0 -33
- package/dist/components/multi-button-group.js.flow +0 -35
- package/dist/components/number-input.js.flow +0 -42
- package/dist/components/prop-check-box.js.flow +0 -8
- package/dist/components/range-input.js.flow +0 -20
- package/dist/components/simple-keypad-input.js.flow +0 -16
- package/dist/components/sortable.js.flow +0 -91
- package/dist/components/stub-tag-editor.js.flow +0 -18
- package/dist/components/svg-image.js.flow +0 -85
- package/dist/components/tex-buttons.js.flow +0 -26
- package/dist/components/tex.js.flow +0 -25
- package/dist/components/text-input.js.flow +0 -39
- package/dist/components/text-list-editor.js.flow +0 -22
- package/dist/components/tooltip.js.flow +0 -51
- package/dist/components/visibility-observer/create-visibility-observer.js.flow +0 -23
- package/dist/components/visibility-observer/get-scroll-parent.js.flow +0 -7
- package/dist/components/visibility-observer/visibility-observer.js.flow +0 -36
- package/dist/components/zoomable-tex.js.flow +0 -18
- package/dist/components/zoomable.js.flow +0 -70
- package/dist/components.js.flow +0 -22
- package/dist/definition-context.js.flow +0 -25
- package/dist/dependencies.js.flow +0 -9
- package/dist/error-boundary.js.flow +0 -19
- package/dist/extra-widgets.js.flow +0 -33
- package/dist/hint-renderer.js.flow +0 -32
- package/dist/hints-renderer.js.flow +0 -41
- package/dist/icon-paths.js.flow +0 -123
- package/dist/index.js.flow +0 -134
- package/dist/init.js.flow +0 -20
- package/dist/interaction-tracker.js.flow +0 -35
- package/dist/interactive2/interactive-util.js.flow +0 -50
- package/dist/interactive2/movable-helper-methods.js.flow +0 -15
- package/dist/interactive2/movable-line-options.js.flow +0 -44
- package/dist/interactive2/movable-line.js.flow +0 -8
- package/dist/interactive2/movable-point-options.js.flow +0 -44
- package/dist/interactive2/movable-point.js.flow +0 -8
- package/dist/interactive2/movable-polygon-options.js.flow +0 -47
- package/dist/interactive2/movable-polygon.js.flow +0 -8
- package/dist/interactive2/movable.js.flow +0 -8
- package/dist/interactive2/objective_.js.flow +0 -25
- package/dist/interactive2/types.js.flow +0 -8
- package/dist/interactive2/wrapped-defaults.js.flow +0 -11
- package/dist/interactive2/wrapped-ellipse.js.flow +0 -14
- package/dist/interactive2/wrapped-line.js.flow +0 -14
- package/dist/interactive2/wrapped-path.js.flow +0 -13
- package/dist/interactive2.js.flow +0 -16
- package/dist/item-renderer.js.flow +0 -132
- package/dist/item-version.js.flow +0 -11
- package/dist/jipt-paragraphs.js.flow +0 -14
- package/dist/loading-context.js.flow +0 -12
- package/dist/logging/log.js.flow +0 -62
- package/dist/mixins/changeable.js.flow +0 -33
- package/dist/mixins/editor-jsonify.js.flow +0 -10
- package/dist/mixins/provide-keypad.js.flow +0 -33
- package/dist/mixins/widget-jsonify-deprecated.js.flow +0 -11
- package/dist/mixins/widget-prop-denylist.js.flow +0 -20
- package/dist/multi-items/item-types.js.flow +0 -55
- package/dist/multi-items/items.js.flow +0 -66
- package/dist/multi-items/multi-renderer.js.flow +0 -213
- package/dist/multi-items/prop-type-builders.js.flow +0 -22
- package/dist/multi-items/shape-types.js.flow +0 -60
- package/dist/multi-items/shapes.js.flow +0 -25
- package/dist/multi-items/tree-types.js.flow +0 -45
- package/dist/multi-items/trees.js.flow +0 -147
- package/dist/multi-items.js.flow +0 -36
- package/dist/perseus-api.js.flow +0 -151
- package/dist/perseus-env.js.flow +0 -6
- package/dist/perseus-error.js.flow +0 -16
- package/dist/perseus-markdown.js.flow +0 -20
- package/dist/perseus-types.js.flow +0 -1041
- package/dist/question-paragraph.js.flow +0 -17
- package/dist/renderability.js.flow +0 -19
- package/dist/renderer.js.flow +0 -325
- package/dist/server-item-renderer.js.flow +0 -132
- package/dist/sigfigs.js.flow +0 -41
- package/dist/styles/constants.js.flow +0 -62
- package/dist/styles/global-constants.js.flow +0 -348
- package/dist/styles/global-styles.js.flow +0 -53
- package/dist/styles/media-queries.js.flow +0 -35
- package/dist/styles/shared.js.flow +0 -8
- package/dist/tex-wrangler.js.flow +0 -13
- package/dist/translation-linter.js.flow +0 -32
- package/dist/traversal.js.flow +0 -26
- package/dist/types.js.flow +0 -318
- package/dist/util/a11y.js.flow +0 -8
- package/dist/util/answer-types.js.flow +0 -49
- package/dist/util/colors.js.flow +0 -95
- package/dist/util/fix-passage-refs.js.flow +0 -8
- package/dist/util/geometry.js.flow +0 -37
- package/dist/util/graph-utils.js.flow +0 -9
- package/dist/util/graphie.js.flow +0 -8
- package/dist/util/interactive.js.flow +0 -11
- package/dist/util/katex-preprocess.js.flow +0 -12
- package/dist/util/math.js.flow +0 -62
- package/dist/util/mobile-native-utils.js.flow +0 -12
- package/dist/util/react-render.js.flow +0 -12
- package/dist/util/register-all-widgets-for-testing.js.flow +0 -7
- package/dist/util/scroll-utils.js.flow +0 -19
- package/dist/util/sizing-utils.js.flow +0 -20
- package/dist/util/tex.js.flow +0 -17
- package/dist/util/url-utils.js.flow +0 -11
- package/dist/util.graphie.js.flow +0 -14
- package/dist/util.js.flow +0 -319
- package/dist/version.js.flow +0 -17
- package/dist/widget-container.js.flow +0 -33
- package/dist/widgets/categorizer.js.flow +0 -70
- package/dist/widgets/cs-program.js.flow +0 -54
- package/dist/widgets/definition.js.flow +0 -57
- package/dist/widgets/dropdown.js.flow +0 -63
- package/dist/widgets/explanation.js.flow +0 -58
- package/dist/widgets/expression.js.flow +0 -116
- package/dist/widgets/graded-group-answer-bar.js.flow +0 -24
- package/dist/widgets/graded-group-set.js.flow +0 -65
- package/dist/widgets/graded-group.js.flow +0 -78
- package/dist/widgets/grapher/util.js.flow +0 -38
- package/dist/widgets/grapher.js.flow +0 -102
- package/dist/widgets/group.js.flow +0 -60
- package/dist/widgets/iframe.js.flow +0 -53
- package/dist/widgets/image.js.flow +0 -73
- package/dist/widgets/input-number.js.flow +0 -94
- package/dist/widgets/interaction/arrow-picker.js.flow +0 -21
- package/dist/widgets/interaction/color-picker.js.flow +0 -23
- package/dist/widgets/interaction/dash-picker.js.flow +0 -21
- package/dist/widgets/interaction/element-container.js.flow +0 -28
- package/dist/widgets/interaction.js.flow +0 -60
- package/dist/widgets/interactive-graph.js.flow +0 -239
- package/dist/widgets/label-image/answer-choices.js.flow +0 -55
- package/dist/widgets/label-image/marker.js.flow +0 -31
- package/dist/widgets/label-image/types.js.flow +0 -23
- package/dist/widgets/label-image.js.flow +0 -142
- package/dist/widgets/lights-puzzle.js.flow +0 -58
- package/dist/widgets/matcher.js.flow +0 -106
- package/dist/widgets/matrix.js.flow +0 -80
- package/dist/widgets/measurer.js.flow +0 -30
- package/dist/widgets/molecule/molecule-drawing.js.flow +0 -11
- package/dist/widgets/molecule/molecule-layout.js.flow +0 -96
- package/dist/widgets/molecule/smiles-parser.js.flow +0 -26
- package/dist/widgets/molecule.js.flow +0 -60
- package/dist/widgets/number-line.js.flow +0 -102
- package/dist/widgets/numeric-input.js.flow +0 -105
- package/dist/widgets/orderer.js.flow +0 -81
- package/dist/widgets/passage/passage-markdown.js.flow +0 -33
- package/dist/widgets/passage-ref-target.js.flow +0 -52
- package/dist/widgets/passage-ref.js.flow +0 -85
- package/dist/widgets/passage.js.flow +0 -157
- package/dist/widgets/plotter.js.flow +0 -112
- package/dist/widgets/radio/base-radio.js.flow +0 -50
- package/dist/widgets/radio/choice-a11y-text.js.flow +0 -14
- package/dist/widgets/radio/choice-icon/choice-icon.js.flow +0 -22
- package/dist/widgets/radio/choice-icon/cross-out-line.js.flow +0 -16
- package/dist/widgets/radio/choice-icon/shared-styles.js.flow +0 -11
- package/dist/widgets/radio/choice-none-above.js.flow +0 -16
- package/dist/widgets/radio/choice.js.flow +0 -29
- package/dist/widgets/radio/choice.jsx.fixture.js.flow +0 -7
- package/dist/widgets/radio/focus-ring.js.flow +0 -22
- package/dist/widgets/radio/option-status.js.flow +0 -16
- package/dist/widgets/radio/util.js.flow +0 -12
- package/dist/widgets/radio/widget.js.flow +0 -80
- package/dist/widgets/radio.js.flow +0 -31
- package/dist/widgets/reaction-diagram.js.flow +0 -46
- package/dist/widgets/sequence.js.flow +0 -53
- package/dist/widgets/simulator.js.flow +0 -107
- package/dist/widgets/sorter.js.flow +0 -102
- package/dist/widgets/table.js.flow +0 -67
- package/dist/widgets/transformer.js.flow +0 -127
- package/dist/widgets/unit.js.flow +0 -93
- package/dist/widgets/video-transcript-link.js.flow +0 -15
- package/dist/widgets/video.js.flow +0 -57
- package/dist/widgets.js.flow +0 -108
- package/dist/zoom.js.flow +0 -7
- package/src/multi-items/item-types.js.flow +0 -55
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {storybookDependenciesV2} from "../../../../testing/test-dependencies";
|
|
4
|
+
import {
|
|
5
|
+
singleSectionArticle,
|
|
6
|
+
multiSectionArticle,
|
|
7
|
+
passageArticle,
|
|
8
|
+
} from "../__testdata__/article-renderer.testdata";
|
|
4
9
|
import ArticleRenderer from "../article-renderer";
|
|
5
10
|
|
|
6
11
|
export default {
|
|
@@ -12,6 +17,34 @@ export default {
|
|
|
12
17
|
},
|
|
13
18
|
};
|
|
14
19
|
|
|
20
|
+
export const ASingleSectionArticle = (args: {
|
|
21
|
+
useNewStyles;
|
|
22
|
+
}): React.ReactElement => {
|
|
23
|
+
return (
|
|
24
|
+
<ArticleRenderer
|
|
25
|
+
json={singleSectionArticle}
|
|
26
|
+
dependencies={storybookDependenciesV2}
|
|
27
|
+
useNewStyles={args.useNewStyles}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const BMultiSectionArticle = (args: {
|
|
33
|
+
useNewStyles;
|
|
34
|
+
}): React.ReactElement => {
|
|
35
|
+
return (
|
|
36
|
+
<ArticleRenderer
|
|
37
|
+
json={multiSectionArticle}
|
|
38
|
+
dependencies={storybookDependenciesV2}
|
|
39
|
+
useNewStyles={args.useNewStyles}
|
|
40
|
+
/>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
15
44
|
export const PassageArticle = ({useNewStyles}): any => (
|
|
16
|
-
<ArticleRenderer
|
|
45
|
+
<ArticleRenderer
|
|
46
|
+
json={passageArticle}
|
|
47
|
+
dependencies={storybookDependenciesV2}
|
|
48
|
+
useNewStyles={useNewStyles}
|
|
49
|
+
/>
|
|
17
50
|
);
|
|
@@ -1,4 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
import type {PerseusRenderer} from "../perseus-types";
|
|
2
|
+
|
|
3
|
+
export const singleSectionArticle: PerseusRenderer = {
|
|
4
|
+
content:
|
|
5
|
+
"[[☃ image 2]]\n\n**Part A:** Return to the main characters from your three favorite films. \n\n- What was one important choice they had to make where the stakes were **high**?\n\n- What were the **stakes**?\n\n- Can you identify them as internal, external or philosophical?\n\n**Part B:** Think about a difficult choice you had to make in your own life. What was at stake? \n\n**Part C:** Return to one of the obstacles your character might face from the previous exercise. Now think of the **choice** this obstacle forces them to make. Answer the following:\n\n- What are the possible stakes of this choice?\n\n- Can you come up with an internal, external or philosophical stake which applies to this choice? \n",
|
|
6
|
+
images: {},
|
|
7
|
+
widgets: {
|
|
8
|
+
"image 2": {
|
|
9
|
+
type: "image",
|
|
10
|
+
alignment: "block",
|
|
11
|
+
static: false,
|
|
12
|
+
graded: true,
|
|
13
|
+
options: {
|
|
14
|
+
static: false,
|
|
15
|
+
title: "",
|
|
16
|
+
range: [
|
|
17
|
+
[0, 10],
|
|
18
|
+
[0, 10],
|
|
19
|
+
],
|
|
20
|
+
box: [1258, 703],
|
|
21
|
+
backgroundImage: {
|
|
22
|
+
url: "https://ka-perseus-images.s3.amazonaws.com/b08029bc1786fbe54468a2ddc96aaa20be7a663a.png",
|
|
23
|
+
width: 1258,
|
|
24
|
+
height: 703,
|
|
25
|
+
},
|
|
26
|
+
labels: [],
|
|
27
|
+
alt: 'A scene from Pixar\'s film "Toy Story 3" where the characters are swimming in a sea of trash and look very afraid.',
|
|
28
|
+
caption: "",
|
|
29
|
+
},
|
|
30
|
+
version: {major: 0, minor: 0},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const passageArticle: PerseusRenderer = {
|
|
2
36
|
content:
|
|
3
37
|
"###Group/Pair Activity \n\nThis passage is adapted from Ed Yong, “Turtles Use the Earth’s Magnetic Field as Global GPS.” ©2011 by Kalmbach Publishing Co.\n\n[[☃ passage 1]]\n\n**Question 9**\n\nThe passage most strongly suggests that Adelita used which of the following to navigate her 9,000-mile journey?\n\nA) The current of the North Atlantic gyre\n\nB) Cues from electromagnetic coils designed by Putman and Lohmann\n\nC) The inclination and intensity of Earth’s magnetic field\n\nD) A simulated “magnetic signature” configured by Lohmann\n\n10) Which choice provides the best evidence for the answer to the previous question?\n\nA) Lines 1–2 (“In 1996...way”)\n\nB) Lines 20–21 (“Using...surface”)\n\nC) Lines 36–37 (“In the wild...stars”)\n\nD) Lines 43–45 (“Neither...it is”)\n\n**Question 12** \n\nBased on the passage, which choice best describes the relationship between Putman’s and Lohmann’s research?\n\nA) Putman’s research contradicts Lohmann’s.\n\nB) Putman’s research builds on Lohmann’s.\n\nC) Lohmann’s research confirms Putman’s.\n\nD) Lohmann’s research corrects Putman’s.",
|
|
4
38
|
images: {},
|
|
@@ -23,3 +57,42 @@ export const passageArticle = {
|
|
|
23
57
|
},
|
|
24
58
|
},
|
|
25
59
|
};
|
|
60
|
+
|
|
61
|
+
export const multiSectionArticle: ReadonlyArray<PerseusRenderer> = [
|
|
62
|
+
{
|
|
63
|
+
content:
|
|
64
|
+
"## What is a matrix?\n\nA matrix is a rectangular array of numbers arranged in rows and columns.\n\nMatrices can be useful for organizing and manipulating data. They can also be used as a tool to help solve systems of equations.",
|
|
65
|
+
images: {},
|
|
66
|
+
widgets: {},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
content:
|
|
70
|
+
"## How do we multiply a matrix by a scalar?\n\nTo multiply a matrix by a scalar, we multiply each entry in the matrix by the scalar. For example, if \n\n$A = \\begin{bmatrix} \n2 & 3 \\\\\n1 & 4 \\\\\n\\end{bmatrix}$\n\nand we want to multiply $A$ by $2$, we can multiply each entry by $2$ to get:\n\n$2A = \\begin{bmatrix} \n4 & 6 \\\\\n2 & 8 \\\\\n\\end{bmatrix}$",
|
|
71
|
+
images: {},
|
|
72
|
+
widgets: {},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
content:
|
|
76
|
+
"## How do we add or subtract two matrices?\n\nTo add or subtract two matrices, we add or subtract corresponding entries. So if \n\n$A = \\begin{bmatrix} \n2 & 3 \\\\\n1 & 4 \\\\\n\\end{bmatrix}$ \n\nand \n\n$B = \\begin{bmatrix} \n5 & 2 \\\\\n3 & 1 \\\\\n\\end{bmatrix}$,\n\nthen \n\n$A+B = \\begin{bmatrix} \n7 & 5 \\\\\n4 & 5 \\\\\n\\end{bmatrix}$\n\nand \n\n$A-B = \\begin{bmatrix} \n-3 & 1 \\\\\n-2 & 3 \\\\\n\\end{bmatrix}$",
|
|
77
|
+
images: {},
|
|
78
|
+
widgets: {},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
content:
|
|
82
|
+
"## How do we multiply two matrices together?\n\nThis one's a bit trickier. To multiply two matrices together, we take the dot product of the rows from the first matrix with the columns from the second matrix. The result is a new matrix. For example, if \n\n$A = \\begin{bmatrix} \n2 & 3 \\\\\n1 & 4 \\\\\n\\end{bmatrix}$ \n\nand \n\n$B = \\begin{bmatrix} \n5 & 2 \\\\\n3 & 1 \\\\\n\\end{bmatrix}$,\n\nthen \n\n$AB = \\begin{bmatrix} \n2\\cdot5+3\\cdot3 & 2\\cdot2+3\\cdot1 \\\\\n1\\cdot5+4\\cdot3 & 1\\cdot2+4\\cdot1 \\\\\n\\end{bmatrix} = \\begin{bmatrix} \n19 & 7 \\\\\n17 & 6 \\\\\n\\end{bmatrix}.$",
|
|
83
|
+
images: {},
|
|
84
|
+
widgets: {},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
content:
|
|
88
|
+
"## What can we do with the inverse of a matrix?\n\nFinding the inverse of a matrix can be useful for solving linear systems of equations. If $A$ is the matrix representing the system of equations, and $b$ is the vector of solutions, then $Ax=b$. If we can find the inverse of $A$, we can multiply both sides of the equation by it to isolate $x$:\n\n$A^{-1}Ax=A^{-1}b \\Rightarrow x=A^{-1}b.$",
|
|
89
|
+
images: {},
|
|
90
|
+
widgets: {},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
content:
|
|
94
|
+
"## Where are matrices used in the real world?\n\nMatrices have tons of real-world applications! They can be used in computer graphics to perform transformations on images, in physics to model physical systems, and in statistics to analyze data, just to name a few.",
|
|
95
|
+
images: {},
|
|
96
|
+
widgets: {},
|
|
97
|
+
},
|
|
98
|
+
];
|
|
@@ -251,7 +251,7 @@ export const mockedItem: PerseusItem = {
|
|
|
251
251
|
// The mock widget type is not part of the PerseusWidget type union (and
|
|
252
252
|
// we don't want to make it such to avoid polluting our production types
|
|
253
253
|
// for test purposes) so we force TypeScript to accept it here.
|
|
254
|
-
// @ts-expect-error
|
|
254
|
+
// @ts-expect-error - TS2352 - Conversion of type '{ content: string; images: {}; widgets: { "mock-widget 1": { graded: true; version: { major: number; minor: number; }; static: false; type: "mock-widget"; options: { static: false; smiling: boolean; }; alignment: string; }; "mock-widget 2": { ...; }; "mock-widget 3": { ...; }; "mock-widget 4": { ...; }; }; }' to type 'PerseusRenderer' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
|
|
255
255
|
question: {
|
|
256
256
|
content:
|
|
257
257
|
"Mock widget ==> [[\u2603 mock-widget 1]] [[\u2603 mock-widget 2]] [[\u2603 mock-widget 3]] [[\u2603 mock-widget 4]]",
|
|
@@ -85,7 +85,7 @@ export const question2: PerseusRenderer = {
|
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
// Note that if this item is used, you _must_ first register the MockWidget
|
|
88
|
-
// @ts-expect-error
|
|
88
|
+
// @ts-expect-error - TS2352 - Conversion of type '{ content: string; images: {}; widgets: { "mock-widget 1": { graded: true; version: { major: number; minor: number; }; static: false; type: "mock-widget"; options: { static: false; smiling: boolean; }; alignment: string; }; "mock-widget 2": { ...; }; "mock-widget 3": { ...; }; }; }' to type 'PerseusRenderer' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
|
|
89
89
|
export const mockedItem: PerseusRenderer = {
|
|
90
90
|
// The mock widget type is not part of the PerseusWidget type union (and
|
|
91
91
|
// we don't want to make it such to avoid polluting our production types
|
|
@@ -4,7 +4,10 @@ import userEvent from "@testing-library/user-event";
|
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import "@testing-library/jest-dom"; // Imports custom matchers
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
testDependencies,
|
|
9
|
+
testDependenciesV2,
|
|
10
|
+
} from "../../../../testing/test-dependencies";
|
|
8
11
|
import {
|
|
9
12
|
itemWithInput,
|
|
10
13
|
labelImageItem,
|
|
@@ -76,6 +79,7 @@ export const renderQuestion = (
|
|
|
76
79
|
reviewMode={false}
|
|
77
80
|
savedState=""
|
|
78
81
|
controlPeripherals={false}
|
|
82
|
+
dependencies={testDependenciesV2}
|
|
79
83
|
{...optionalProps}
|
|
80
84
|
/>
|
|
81
85
|
{/* The ItemRenderer _requires_ two divs: a work area and hints
|
|
@@ -115,7 +119,7 @@ const makeHint = (content: string): PerseusRenderer => ({
|
|
|
115
119
|
graded: true,
|
|
116
120
|
version: {major: 0, minor: 0},
|
|
117
121
|
static: false,
|
|
118
|
-
// @ts-expect-error
|
|
122
|
+
// @ts-expect-error - TS2322 - Type '"mock-widget"' is not assignable to type '"video" | "image" | "iframe" | "table" | "radio" | "definition" | "group" | "matrix" | "categorizer" | "cs-program" | "dropdown" | "example-graphie-widget" | "example-widget" | ... 26 more ... | "unit-input"'.
|
|
119
123
|
type: "mock-widget",
|
|
120
124
|
options: {static: false},
|
|
121
125
|
alignment: "default",
|
|
@@ -132,6 +136,13 @@ describe("item renderer", () => {
|
|
|
132
136
|
});
|
|
133
137
|
|
|
134
138
|
beforeEach(() => {
|
|
139
|
+
// Mock ResizeObserver used by the mobile keypad
|
|
140
|
+
window.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
141
|
+
observe: jest.fn(),
|
|
142
|
+
unobserve: jest.fn(),
|
|
143
|
+
disconnect: jest.fn(),
|
|
144
|
+
}));
|
|
145
|
+
|
|
135
146
|
jest.spyOn(Dependencies, "getDependencies").mockReturnValue(
|
|
136
147
|
testDependencies,
|
|
137
148
|
);
|
|
@@ -34,7 +34,7 @@ export const mockedAssetItem = {
|
|
|
34
34
|
} as const;
|
|
35
35
|
|
|
36
36
|
export class MockAssetLoadingWidget extends React.Component<Record<any, any>> {
|
|
37
|
-
// @ts-expect-error
|
|
37
|
+
// @ts-expect-error - TS2564 - Property 'setAssetStatus' has no initializer and is not definitely assigned in the constructor.
|
|
38
38
|
setAssetStatus: (assetKey: string, loaded: boolean) => void;
|
|
39
39
|
|
|
40
40
|
render(): React.ReactNode {
|
|
@@ -35,7 +35,7 @@ describe("perseus markdown", () => {
|
|
|
35
35
|
},
|
|
36
36
|
])("should parse math", ({content, expected}) => {
|
|
37
37
|
// Arrange, Act
|
|
38
|
-
// @ts-expect-error
|
|
38
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
39
39
|
const parsed = parse(content);
|
|
40
40
|
|
|
41
41
|
// Assert
|
|
@@ -75,7 +75,7 @@ describe("perseus markdown", () => {
|
|
|
75
75
|
},
|
|
76
76
|
])("should parse nested math", ({content, expected}) => {
|
|
77
77
|
// Arrange, Act
|
|
78
|
-
// @ts-expect-error
|
|
78
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
79
79
|
const parsed = parse(content);
|
|
80
80
|
|
|
81
81
|
// Assert
|
|
@@ -161,7 +161,7 @@ describe("perseus markdown", () => {
|
|
|
161
161
|
},
|
|
162
162
|
])("should allow escaping in math", ({content, expected}) => {
|
|
163
163
|
// Arrange, Act
|
|
164
|
-
// @ts-expect-error
|
|
164
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
165
165
|
const parsed = parse(content);
|
|
166
166
|
|
|
167
167
|
// Assert
|
|
@@ -229,7 +229,7 @@ describe("perseus markdown", () => {
|
|
|
229
229
|
},
|
|
230
230
|
])("should parse block math", ({content, expected}) => {
|
|
231
231
|
// Arrange, Act
|
|
232
|
-
// @ts-expect-error
|
|
232
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
233
233
|
const parsed = parse(content);
|
|
234
234
|
|
|
235
235
|
// Assert
|
|
@@ -274,7 +274,7 @@ describe("perseus markdown", () => {
|
|
|
274
274
|
},
|
|
275
275
|
])("should break on paragraphs", ({content, expected}) => {
|
|
276
276
|
// Arrange, Act
|
|
277
|
-
// @ts-expect-error
|
|
277
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
278
278
|
const parsed = parse(content);
|
|
279
279
|
|
|
280
280
|
// Assert
|
|
@@ -352,7 +352,7 @@ describe("perseus markdown", () => {
|
|
|
352
352
|
},
|
|
353
353
|
])("should parse widget types and ids", ({content, expected}) => {
|
|
354
354
|
// Arrange, Act
|
|
355
|
-
// @ts-expect-error
|
|
355
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
356
356
|
const parsed = parse(content);
|
|
357
357
|
|
|
358
358
|
// Assert
|
|
@@ -361,7 +361,7 @@ describe("perseus markdown", () => {
|
|
|
361
361
|
|
|
362
362
|
it("should allow escaping widget identifiers", () => {
|
|
363
363
|
// Arrange, Act
|
|
364
|
-
// @ts-expect-error
|
|
364
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
365
365
|
const parsed = parse("\\[[☃ test 1]]");
|
|
366
366
|
|
|
367
367
|
// Assert
|
|
@@ -408,7 +408,7 @@ describe("perseus markdown", () => {
|
|
|
408
408
|
"should parse widgets next to each other as widgets",
|
|
409
409
|
({content, expected}) => {
|
|
410
410
|
// Arrange, Act
|
|
411
|
-
// @ts-expect-error
|
|
411
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
412
412
|
const parsed = parse(content);
|
|
413
413
|
|
|
414
414
|
// Assert
|
|
@@ -418,7 +418,7 @@ describe("perseus markdown", () => {
|
|
|
418
418
|
|
|
419
419
|
it("should parse multiple columns", () => {
|
|
420
420
|
// Arrange, Act
|
|
421
|
-
// @ts-expect-error
|
|
421
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
422
422
|
const parsed = parse("hi\n\n" + "=====\n\n" + "there\n\n");
|
|
423
423
|
|
|
424
424
|
// Assert
|
|
@@ -539,7 +539,7 @@ describe("perseus markdown", () => {
|
|
|
539
539
|
},
|
|
540
540
|
])("should detect unescaped dollars", ({content, expected}) => {
|
|
541
541
|
// Arrange, Act
|
|
542
|
-
// @ts-expect-error
|
|
542
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
543
543
|
const parsed = parse(content);
|
|
544
544
|
|
|
545
545
|
// Assert
|
|
@@ -557,7 +557,7 @@ describe("perseus markdown", () => {
|
|
|
557
557
|
"data 7 | data 8 | data 9";
|
|
558
558
|
|
|
559
559
|
// Act
|
|
560
|
-
// @ts-expect-error
|
|
560
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
561
561
|
const parsed = parse(content);
|
|
562
562
|
|
|
563
563
|
// Assert
|
|
@@ -582,7 +582,7 @@ describe("perseus markdown", () => {
|
|
|
582
582
|
} as const;
|
|
583
583
|
|
|
584
584
|
// Act
|
|
585
|
-
// @ts-expect-error
|
|
585
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
586
586
|
const parsedWithLint = parse(content);
|
|
587
587
|
PerseusLinter.runLinter(parsedWithLint, context, true);
|
|
588
588
|
|
|
@@ -601,7 +601,7 @@ describe("perseus markdown", () => {
|
|
|
601
601
|
const content = "para!";
|
|
602
602
|
|
|
603
603
|
// Act
|
|
604
|
-
// @ts-expect-error
|
|
604
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
605
605
|
const parsed = parse(content);
|
|
606
606
|
const output = basicOutput(parsed);
|
|
607
607
|
|
|
@@ -614,7 +614,7 @@ describe("perseus markdown", () => {
|
|
|
614
614
|
const content = "col1\n\n" + "=====\n\n" + "col2";
|
|
615
615
|
|
|
616
616
|
// Act
|
|
617
|
-
// @ts-expect-error
|
|
617
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
618
618
|
const parsed = parse(content);
|
|
619
619
|
const output = basicOutput(parsed);
|
|
620
620
|
|
|
@@ -627,7 +627,7 @@ describe("perseus markdown", () => {
|
|
|
627
627
|
const content = "```alt\n" + "screenreader-only text!\n" + "```";
|
|
628
628
|
|
|
629
629
|
// Act
|
|
630
|
-
// @ts-expect-error
|
|
630
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
631
631
|
const parsed = parse(content);
|
|
632
632
|
const output = basicOutput(parsed);
|
|
633
633
|
|
|
@@ -646,7 +646,7 @@ describe("perseus markdown", () => {
|
|
|
646
646
|
"data 7 | data 8 | data 9";
|
|
647
647
|
|
|
648
648
|
// Act
|
|
649
|
-
// @ts-expect-error
|
|
649
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
650
650
|
const parsed = parse(content);
|
|
651
651
|
const output = basicOutput(parsed);
|
|
652
652
|
|
|
@@ -672,7 +672,7 @@ describe("perseus markdown", () => {
|
|
|
672
672
|
} as const;
|
|
673
673
|
|
|
674
674
|
// Act
|
|
675
|
-
// @ts-expect-error
|
|
675
|
+
// @ts-expect-error - TS2554 - Expected 2 arguments, but got 1.
|
|
676
676
|
const parsedWithLint = parse(content);
|
|
677
677
|
PerseusLinter.runLinter(parsedWithLint, context, true);
|
|
678
678
|
|
|
@@ -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
|
|