@khanacademy/perseus 7.2.1 → 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 +26 -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.js +1139 -1189
- package/dist/es/index.js.map +1 -1
- package/dist/hints-renderer.d.ts +1 -1
- package/dist/index.js +1141 -1192
- 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/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 +1 -1
- 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/__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/hint-renderer.tsx +3 -3
- package/src/hints-renderer.tsx +11 -11
- 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 +5 -5
- 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 +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 +14 -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 +38 -38
- package/src/server-item-renderer.tsx +5 -5
- package/src/sigfigs.ts +1 -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__/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 +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 +2 -1
- package/src/widgets/__tests__/radio/base-radio.test.tsx +7 -7
- package/src/widgets/__tests__/renderQuestion.tsx +3 -3
- 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 +10 -9
- package/src/widgets/graded-group-set.tsx +5 -5
- package/src/widgets/graded-group.tsx +18 -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 +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 +2 -2
- 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
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import {MobileKeypad} from "@khanacademy/math-input";
|
|
15
|
-
import PropTypes from "prop-types";
|
|
16
15
|
import * as React from "react";
|
|
17
16
|
import ReactDOM from "react-dom";
|
|
18
17
|
|
|
19
18
|
import reactRender from "../util/react-render";
|
|
20
19
|
|
|
21
20
|
import type {APIOptions} from "../types";
|
|
21
|
+
import type {KeypadAPI} from "@khanacademy/math-input";
|
|
22
22
|
import type {CSSProperties} from "aphrodite";
|
|
23
23
|
|
|
24
24
|
export type KeypadProps = {
|
|
@@ -34,48 +34,44 @@ export type KeypadApiOptions = {
|
|
|
34
34
|
nativeKeypadProxy: any;
|
|
35
35
|
};
|
|
36
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
|
+
|
|
37
50
|
// NOTE: This is not a real component. It's a collection of methods used to
|
|
38
51
|
// create and manage a Keypad instances.
|
|
39
52
|
// TODO(LP-10789): replace this with a React Context object to pass information
|
|
40
53
|
// between Perseus and the Keypad.
|
|
41
54
|
const ProvideKeypad = {
|
|
42
|
-
|
|
43
|
-
apiOptions: PropTypes.shape({
|
|
44
|
-
customKeypad: PropTypes.bool,
|
|
45
|
-
nativeKeypadProxy: PropTypes.func,
|
|
46
|
-
}),
|
|
47
|
-
// An Aphrodite style object, to be applied to the keypad container.
|
|
48
|
-
// Note that, given our awkward structure of injecting the keypad, this
|
|
49
|
-
// style won't be applied or updated dynamically. Rather, it will only
|
|
50
|
-
// be applied in `componentDidMount`.
|
|
51
|
-
keypadStyle: PropTypes.any,
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
getInitialState(): {
|
|
55
|
+
getInitialState(this: KeypadMixinHostComponent): {
|
|
55
56
|
keypadElement: any | null;
|
|
56
57
|
} {
|
|
57
58
|
const _this = this;
|
|
58
|
-
let keypadElement = null;
|
|
59
|
+
let keypadElement: KeypadAPI | null = null;
|
|
59
60
|
if (
|
|
60
|
-
// @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...'.
|
|
61
61
|
_this.props.apiOptions &&
|
|
62
|
-
// @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...'.
|
|
63
62
|
_this.props.apiOptions.customKeypad &&
|
|
64
|
-
// @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...'.
|
|
65
63
|
_this.props.apiOptions.nativeKeypadProxy
|
|
66
64
|
) {
|
|
67
|
-
// @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...'.
|
|
68
65
|
keypadElement = _this.props.apiOptions.nativeKeypadProxy(
|
|
69
|
-
// @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...'.
|
|
70
67
|
() => _this.blur && _this.blur(),
|
|
71
68
|
);
|
|
72
69
|
}
|
|
73
70
|
return {keypadElement};
|
|
74
71
|
},
|
|
75
72
|
|
|
76
|
-
componentDidMount() {
|
|
73
|
+
componentDidMount(this: KeypadMixinHostComponent) {
|
|
77
74
|
const _this = this;
|
|
78
|
-
// @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...'.
|
|
79
75
|
const apiOptions: APIOptions = _this.props.apiOptions;
|
|
80
76
|
|
|
81
77
|
if (
|
|
@@ -86,9 +82,7 @@ const ProvideKeypad = {
|
|
|
86
82
|
// TODO(charlie): Render this and the wrapped component in the same
|
|
87
83
|
// React tree. We may also want to add this keypad asynchronously
|
|
88
84
|
// or on-demand in the future.
|
|
89
|
-
// @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...'.
|
|
90
85
|
_this._keypadContainer = document.createElement("div");
|
|
91
|
-
// @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...'.
|
|
92
86
|
document.body?.appendChild(_this._keypadContainer);
|
|
93
87
|
|
|
94
88
|
reactRender(
|
|
@@ -97,49 +91,41 @@ const ProvideKeypad = {
|
|
|
97
91
|
// NOTE(kevinb): The reason why this setState works is
|
|
98
92
|
// b/c we're calling it manually from item-renderer.jsx
|
|
99
93
|
// and we're manually setting the 'this' by using 'call'
|
|
100
|
-
// @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...'.
|
|
101
95
|
_this.setState({
|
|
102
96
|
keypadElement: element,
|
|
103
97
|
});
|
|
104
98
|
}}
|
|
105
99
|
onDismiss={() => {
|
|
106
|
-
// @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...'.
|
|
107
101
|
_this.blur && _this.blur();
|
|
108
102
|
}}
|
|
109
|
-
// @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...'.
|
|
110
104
|
style={_this.props.keypadStyle}
|
|
111
105
|
useV2Keypad={apiOptions.useV2Keypad}
|
|
112
106
|
/>,
|
|
113
|
-
// @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...'.
|
|
114
107
|
_this._keypadContainer,
|
|
115
108
|
);
|
|
116
109
|
}
|
|
117
110
|
},
|
|
118
111
|
|
|
119
|
-
componentWillUnmount() {
|
|
112
|
+
componentWillUnmount(this: KeypadMixinHostComponent) {
|
|
120
113
|
const _this = this;
|
|
121
|
-
// @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...'.
|
|
122
114
|
if (_this._keypadContainer) {
|
|
123
|
-
// @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...'.
|
|
124
115
|
ReactDOM.unmountComponentAtNode(_this._keypadContainer);
|
|
125
|
-
// @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...'.
|
|
126
116
|
if (_this._keypadContainer.parentNode) {
|
|
127
117
|
// Note ChildNode.remove() isn't available in older Android
|
|
128
118
|
// webviews.
|
|
129
|
-
// @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...'.
|
|
130
119
|
_this._keypadContainer.parentNode.removeChild(
|
|
131
|
-
// @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...'.
|
|
132
120
|
_this._keypadContainer,
|
|
133
121
|
);
|
|
134
122
|
}
|
|
135
|
-
// @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...'.
|
|
136
123
|
_this._keypadContainer = null;
|
|
137
124
|
}
|
|
138
125
|
},
|
|
139
126
|
|
|
140
|
-
keypadElement(): any {
|
|
127
|
+
keypadElement(this: KeypadMixinHostComponent): any {
|
|
141
128
|
const _this = this;
|
|
142
|
-
// @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...'.
|
|
143
129
|
return _this.state.keypadElement;
|
|
144
130
|
},
|
|
145
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
|
);
|
|
@@ -62,7 +62,7 @@ type SerializedState = any; // TODO(mdr)
|
|
|
62
62
|
|
|
63
63
|
type RendererProps = JSX.LibraryManagedAttributes<
|
|
64
64
|
typeof Renderer,
|
|
65
|
-
// @ts-expect-error
|
|
65
|
+
// @ts-expect-error - TS2344 - Type 'typeof Renderer' does not satisfy the constraint 'keyof IntrinsicElements | JSXElementConstructor<any>'.
|
|
66
66
|
React.ComponentProps<typeof Renderer>
|
|
67
67
|
>;
|
|
68
68
|
|
|
@@ -82,7 +82,7 @@ type HintRendererData = {
|
|
|
82
82
|
hint: Hint;
|
|
83
83
|
};
|
|
84
84
|
type RendererData = ContentRendererData | HintRendererData;
|
|
85
|
-
// @ts-expect-error
|
|
85
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
86
86
|
type RendererDataTree = Tree<ContentRendererData, HintRendererData, null>;
|
|
87
87
|
|
|
88
88
|
/**
|
|
@@ -93,11 +93,11 @@ type RendererDataTree = Tree<ContentRendererData, HintRendererData, null>;
|
|
|
93
93
|
* really helping us out as I now have to suppress this rather than
|
|
94
94
|
* get value from the type. :(
|
|
95
95
|
*/
|
|
96
|
-
// @ts-expect-error
|
|
96
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
97
97
|
type RendererTree = Tree<ContentRendererElement, HintRendererElement, null>;
|
|
98
|
-
// @ts-expect-error
|
|
98
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
99
99
|
type ScoreTree = Tree<Score, null, null>;
|
|
100
|
-
// @ts-expect-error
|
|
100
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
101
101
|
type SerializedStateTree = Tree<SerializedState, null, null>;
|
|
102
102
|
|
|
103
103
|
type Props = {
|
|
@@ -141,17 +141,17 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
141
141
|
super(props);
|
|
142
142
|
|
|
143
143
|
this.rendererDataTreeMapper = buildMapper()
|
|
144
|
-
// @ts-expect-error
|
|
144
|
+
// @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'ContentNode'.
|
|
145
145
|
.setContentMapper((c, _, p) => this._makeContentRendererData(c, p))
|
|
146
|
-
// @ts-expect-error
|
|
146
|
+
// @ts-expect-error - TS2345 - Argument of type 'unknown' is not assignable to parameter of type 'HintNode'.
|
|
147
147
|
.setHintMapper((h) => this._makeHintRendererData(h))
|
|
148
148
|
.setTagsMapper((t) => null);
|
|
149
149
|
|
|
150
|
-
// @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>'.
|
|
151
151
|
this.getRenderersMapper = buildMapper()
|
|
152
|
-
// @ts-expect-error
|
|
152
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
153
153
|
.setContentMapper((c) => c.makeRenderer())
|
|
154
|
-
// @ts-expect-error
|
|
154
|
+
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
155
155
|
.setHintMapper((h) => h.makeRenderer())
|
|
156
156
|
.setArrayMapper((renderers, data, shape) =>
|
|
157
157
|
this._annotateRendererArray(
|
|
@@ -264,7 +264,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
264
264
|
* if this spread is including undocumented props so mapping
|
|
265
265
|
* one to one could introduce a bug. Need to work out the exact
|
|
266
266
|
* type for ContentNode and then fix this.
|
|
267
|
-
*/ // @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">>'.
|
|
268
268
|
<Renderer
|
|
269
269
|
{...this._getRendererProps()}
|
|
270
270
|
{...content}
|
|
@@ -306,7 +306,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
306
306
|
makeRenderer: () => (
|
|
307
307
|
<HintsRenderer
|
|
308
308
|
{...this._getRendererProps()}
|
|
309
|
-
// @ts-expect-error
|
|
309
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
310
310
|
findExternalWidgets={findExternalWidgets}
|
|
311
311
|
hints={[hint]}
|
|
312
312
|
/>
|
|
@@ -361,7 +361,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
361
361
|
// eslint-disable-next-line no-restricted-syntax
|
|
362
362
|
leafMapper: ContentMapper<RendererData, O> &
|
|
363
363
|
HintMapper<RendererData, O>,
|
|
364
|
-
// @ts-expect-error
|
|
364
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
365
365
|
): Tree<O, O, null> | null | undefined {
|
|
366
366
|
const {rendererDataTree} = this.state;
|
|
367
367
|
|
|
@@ -506,7 +506,7 @@ class MultiRenderer extends React.Component<Props, State> {
|
|
|
506
506
|
(renderers as any).firstN = (n: any) => (
|
|
507
507
|
<HintsRenderer
|
|
508
508
|
{...this._getRendererProps()}
|
|
509
|
-
// @ts-expect-error
|
|
509
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
510
510
|
findExternalWidgets={
|
|
511
511
|
hintRendererDatas[0]
|
|
512
512
|
? hintRendererDatas[0].findExternalWidgets
|
|
@@ -39,7 +39,7 @@ export function shapePropType(...args: ReadonlyArray<any>): any {
|
|
|
39
39
|
}).isRequired,
|
|
40
40
|
]);
|
|
41
41
|
|
|
42
|
-
// @ts-expect-error
|
|
42
|
+
// @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
|
|
43
43
|
return itemShape(...args);
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -99,7 +99,7 @@ function buildTreePropTypeForShape(shape: Shape): any {
|
|
|
99
99
|
return PropTypes.shape(propTypeShape);
|
|
100
100
|
}
|
|
101
101
|
throw new PerseusError(
|
|
102
|
-
// @ts-expect-error
|
|
102
|
+
// @ts-expect-error - TS2339 - Property 'type' does not exist on type 'never'.
|
|
103
103
|
`unexpected shape type ${shape.type}`,
|
|
104
104
|
Errors.InvalidInput,
|
|
105
105
|
);
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
|
|
24
24
|
// TODO(jeremy): We lost "arrayness" in D69450. It'd be nice to restore that
|
|
25
25
|
// because right now ArrayNode doesn't add anything.
|
|
26
|
-
// @ts-expect-error
|
|
26
|
+
// @ts-expect-error - TS2456 - Type alias 'ArrayNode' circularly references itself. | TS2315 - Type 'Tree' is not generic.
|
|
27
27
|
export type ArrayNode<C, H, T> = Tree<C, H, T>;
|
|
28
28
|
export type ObjectNode<C, H, T> = {
|
|
29
|
-
// @ts-expect-error
|
|
29
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
30
30
|
[k: string]: Tree<C, H, T>;
|
|
31
31
|
};
|
|
32
32
|
|
|
@@ -37,11 +37,11 @@ export type ObjectNode<C, H, T> = {
|
|
|
37
37
|
* in order to ensure that TypeScript can track its refinement and appropriate use.
|
|
38
38
|
* It's messy.
|
|
39
39
|
*/
|
|
40
|
-
// @ts-expect-error
|
|
40
|
+
// @ts-expect-error - TS2456 - Type alias 'Tree' circularly references itself. | TS2315 - Type 'ArrayNode' is not generic.
|
|
41
41
|
export type Tree<C, H, T> =
|
|
42
42
|
| C
|
|
43
43
|
| H
|
|
44
44
|
| T
|
|
45
|
-
// @ts-expect-error
|
|
45
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
46
46
|
| ArrayNode<C, H, T>
|
|
47
47
|
| ObjectNode<C, H, T>;
|
package/src/multi-items/trees.ts
CHANGED
|
@@ -98,13 +98,13 @@ export type ContentMapper<CI, CO> = (
|
|
|
98
98
|
export type HintMapper<HI, HO> = (hint: HI, shape: HintShape, path: Path) => HO;
|
|
99
99
|
export type TagsMapper<TI, TO> = (tag: TI, shape: TagsShape, path: Path) => TO;
|
|
100
100
|
export type ArrayMapper<CI, CO, HI, HO, TI, TO> = (
|
|
101
|
-
// @ts-expect-error
|
|
101
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
102
102
|
mappedArray: ArrayNode<CO, HO, TO>,
|
|
103
|
-
// @ts-expect-error
|
|
103
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
104
104
|
originalArray: ArrayNode<CI, HI, TI>,
|
|
105
105
|
shape: ArrayShape,
|
|
106
106
|
path: Path,
|
|
107
|
-
// @ts-expect-error
|
|
107
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
108
108
|
) => ArrayNode<CO, HO, TO>;
|
|
109
109
|
|
|
110
110
|
/**
|
|
@@ -120,7 +120,7 @@ export interface TreeMapper<CI, CO, HI, HO, TI, TO> {
|
|
|
120
120
|
hint: HintMapper<HI, HO>;
|
|
121
121
|
tags: TagsMapper<TI, TO>;
|
|
122
122
|
array: ArrayMapper<CI, CO, HI, HO, TI, TO>;
|
|
123
|
-
// @ts-expect-error
|
|
123
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic. | TS2315 - Type 'Tree' is not generic.
|
|
124
124
|
mapTree(tree: Tree<CI, HI, TI>, shape: Shape): Tree<CO, HO, TO>;
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -196,7 +196,7 @@ class TreeMapperJustForLeaves<CI, CO, HI, HO, TI, TO> {
|
|
|
196
196
|
);
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
// @ts-expect-error
|
|
199
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic. | TS2315 - Type 'Tree' is not generic.
|
|
200
200
|
mapTree(tree: Tree<CI, HI, TI>, shape: Shape): Tree<CO, HO, TO> {
|
|
201
201
|
return mapTree(tree, shape, [], this);
|
|
202
202
|
}
|
|
@@ -235,7 +235,7 @@ class TreeMapperForLeavesAndCollections<CI, CO, HI, HO, TI, TO> {
|
|
|
235
235
|
);
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
// @ts-expect-error
|
|
238
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic. | TS2315 - Type 'Tree' is not generic.
|
|
239
239
|
mapTree(tree: Tree<CI, HI, TI>, shape: Shape): Tree<CO, HO, TO> {
|
|
240
240
|
return mapTree(tree, shape, [], this);
|
|
241
241
|
}
|
|
@@ -251,7 +251,7 @@ function identity<T>(x: T): T {
|
|
|
251
251
|
* `setHintMapper`, `setTagMapper`, and `setArrayMapper` to specify
|
|
252
252
|
* transformations for the individual node types.
|
|
253
253
|
*/
|
|
254
|
-
// @ts-expect-error
|
|
254
|
+
// @ts-expect-error - TS2300 - Duplicate identifier 'C'. | TS2300 - Duplicate identifier 'H'. | TS2300 - Duplicate identifier 'T'.
|
|
255
255
|
export function buildMapper<C, C, H, H, T, T>(): TreeMapperJustForLeaves<
|
|
256
256
|
C,
|
|
257
257
|
C,
|
|
@@ -268,12 +268,12 @@ export function buildMapper<C, C, H, H, T, T>(): TreeMapperJustForLeaves<
|
|
|
268
268
|
* TreeMapper to each node, and return the resulting tree.
|
|
269
269
|
*/
|
|
270
270
|
function mapTree<CI, CO, HI, HO, TI, TO>(
|
|
271
|
-
// @ts-expect-error
|
|
271
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
272
272
|
tree: Tree<CI, HI, TI>,
|
|
273
273
|
shape: Shape,
|
|
274
274
|
path: Path,
|
|
275
275
|
mappers: TreeMapper<CI, CO, HI, HO, TI, TO>,
|
|
276
|
-
// @ts-expect-error
|
|
276
|
+
// @ts-expect-error - TS2315 - Type 'Tree' is not generic.
|
|
277
277
|
): Tree<CO, HO, TO> {
|
|
278
278
|
// We trust the shape of the multi-item to match the shape provided at
|
|
279
279
|
// runtime. Therefore, in each shape branch, we cast the node to `any` and
|
|
@@ -291,20 +291,20 @@ function mapTree<CI, CO, HI, HO, TI, TO>(
|
|
|
291
291
|
return mappers.tags(tags, shape, path);
|
|
292
292
|
}
|
|
293
293
|
if (shape.type === "array") {
|
|
294
|
-
// @ts-expect-error
|
|
294
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
295
295
|
const array: ArrayNode<CI, HI, TI> = tree as any;
|
|
296
296
|
|
|
297
297
|
if (!Array.isArray(array)) {
|
|
298
298
|
throw new PerseusError(
|
|
299
299
|
`Invalid object of type "${typeof array}" found at path ` +
|
|
300
|
-
// @ts-expect-error
|
|
300
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
301
301
|
`${["<root>"].concat(path).join(".")}. Expected array.`,
|
|
302
302
|
Errors.Internal,
|
|
303
303
|
);
|
|
304
304
|
}
|
|
305
305
|
|
|
306
306
|
const elementShape = shape.elementShape;
|
|
307
|
-
// @ts-expect-error
|
|
307
|
+
// @ts-expect-error - TS2315 - Type 'ArrayNode' is not generic.
|
|
308
308
|
const mappedElements: ArrayNode<CO, HO, TO> = array.map((inner, i) =>
|
|
309
309
|
mapTree(inner, elementShape, path.concat(i), mappers),
|
|
310
310
|
);
|
|
@@ -316,7 +316,7 @@ function mapTree<CI, CO, HI, HO, TI, TO>(
|
|
|
316
316
|
if (object && typeof object !== "object") {
|
|
317
317
|
throw new PerseusError(
|
|
318
318
|
`Invalid object of type "${typeof object}" found at ` +
|
|
319
|
-
// @ts-expect-error
|
|
319
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
320
320
|
`path ${["<root>"].concat(path).join(".")}. Expected ` +
|
|
321
321
|
`"object" type.`,
|
|
322
322
|
Errors.InvalidInput,
|
|
@@ -327,7 +327,7 @@ function mapTree<CI, CO, HI, HO, TI, TO>(
|
|
|
327
327
|
if (!valueShapes) {
|
|
328
328
|
throw new PerseusError(
|
|
329
329
|
`Unexpected shape ${JSON.stringify(shape)} at path ` +
|
|
330
|
-
// @ts-expect-error
|
|
330
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
331
331
|
`${["<root>"].concat(path).join(".")}.`,
|
|
332
332
|
Errors.InvalidInput,
|
|
333
333
|
);
|
|
@@ -337,7 +337,7 @@ function mapTree<CI, CO, HI, HO, TI, TO>(
|
|
|
337
337
|
if (!(key in object)) {
|
|
338
338
|
throw new PerseusError(
|
|
339
339
|
`Key "${key}" is missing from shape at path ` +
|
|
340
|
-
// @ts-expect-error
|
|
340
|
+
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
341
341
|
`${["<root>"].concat(path).join(".")}.`,
|
|
342
342
|
Errors.InvalidInput,
|
|
343
343
|
);
|
|
@@ -353,7 +353,7 @@ function mapTree<CI, CO, HI, HO, TI, TO>(
|
|
|
353
353
|
return newObject;
|
|
354
354
|
}
|
|
355
355
|
throw new PerseusError(
|
|
356
|
-
// @ts-expect-error
|
|
356
|
+
// @ts-expect-error - TS2339 - Property 'type' does not exist on type 'never'.
|
|
357
357
|
`unexpected shape type ${shape.type}`,
|
|
358
358
|
Errors.InvalidInput,
|
|
359
359
|
);
|