@khanacademy/perseus 19.1.4 → 19.1.6
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/dist/components/graphie.d.ts +9 -1
- package/dist/es/index.js +255 -122
- package/dist/es/index.js.map +1 -1
- package/dist/index.js +261 -126
- package/dist/index.js.map +1 -1
- package/dist/interactive2/interactive-util.d.ts +1 -1
- package/dist/interactive2/movable-point-options.d.ts +5 -4
- package/dist/interactive2/movable.d.ts +90 -13
- package/dist/interactive2/types.d.ts +6 -0
- package/dist/util/graphie.d.ts +5 -0
- package/dist/widgets/expression.d.ts +4 -4
- package/package.json +11 -8
- package/.babelrc.js +0 -8
- package/.eslintrc.js +0 -12
- package/CHANGELOG.md +0 -1422
- package/src/__stories__/article-renderer.stories.tsx +0 -100
- package/src/__stories__/hints-renderer.stories.tsx +0 -55
- package/src/__stories__/server-item-renderer.stories.tsx +0 -44
- package/src/__testdata__/article-renderer.testdata.ts +0 -212
- package/src/__testdata__/graphie.testdata.ts +0 -51
- package/src/__testdata__/renderer.testdata.ts +0 -274
- package/src/__testdata__/server-item-renderer.testdata.ts +0 -171
- package/src/__tests__/__snapshots__/perseus-markdown.test.ts.snap +0 -507
- package/src/__tests__/__snapshots__/renderer.test.tsx.snap +0 -525
- package/src/__tests__/__snapshots__/server-item-renderer.test.tsx.snap +0 -285
- package/src/__tests__/a11y.test.ts +0 -303
- package/src/__tests__/article-renderer.test.tsx +0 -130
- package/src/__tests__/error-boundary.test.tsx +0 -76
- package/src/__tests__/extract-perseus-data.test.ts +0 -1027
- package/src/__tests__/init.test.ts +0 -10
- package/src/__tests__/jipt-paragraphs.test.ts +0 -32
- package/src/__tests__/mock-asset-loading-widget.tsx +0 -53
- package/src/__tests__/mock-widget.tsx +0 -33
- package/src/__tests__/perseus-markdown.test.ts +0 -764
- package/src/__tests__/renderability.test.ts +0 -480
- package/src/__tests__/renderer-api.test.tsx +0 -302
- package/src/__tests__/renderer.test.tsx +0 -1816
- package/src/__tests__/server-item-renderer.test.tsx +0 -582
- package/src/__tests__/test-items/image-item.ts +0 -24
- package/src/__tests__/test-items/input-number-1-item.ts +0 -26
- package/src/__tests__/test-items/input-number-2-item.ts +0 -38
- package/src/__tests__/test-items/table-item.ts +0 -29
- package/src/__tests__/tex-wrangler.test.ts +0 -82
- package/src/__tests__/util.test.ts +0 -40
- package/src/__tests__/widget-container.test.tsx +0 -126
- package/src/__tests__/widgets.test.ts +0 -91
- package/src/a11y.ts +0 -45
- package/src/all-widgets.ts +0 -9
- package/src/article-renderer.tsx +0 -237
- package/src/asset-context.ts +0 -30
- package/src/basic-widgets.ts +0 -16
- package/src/components/__stories__/button-group.stories.tsx +0 -55
- package/src/components/__stories__/fixed-to-responsive.stories.tsx +0 -141
- package/src/components/__stories__/graph.stories.tsx +0 -28
- package/src/components/__stories__/graphie.stories.tsx +0 -33
- package/src/components/__stories__/hud.stories.tsx +0 -35
- package/src/components/__stories__/icon.stories.tsx +0 -63
- package/src/components/__stories__/image-loader.stories.tsx +0 -63
- package/src/components/__stories__/info-tip.stories.tsx +0 -31
- package/src/components/__stories__/inline-icon.stories.tsx +0 -40
- package/src/components/__stories__/input-with-examples.stories.tsx +0 -53
- package/src/components/__stories__/lint.stories.tsx +0 -86
- package/src/components/__stories__/math-input.stories.tsx +0 -43
- package/src/components/__stories__/math-output.stories.tsx +0 -23
- package/src/components/__stories__/multi-button-group.stories.tsx +0 -66
- package/src/components/__stories__/number-input.stories.tsx +0 -41
- package/src/components/__stories__/prop-check-box.stories.tsx +0 -65
- package/src/components/__stories__/range-input.stories.tsx +0 -29
- package/src/components/__stories__/simple-keypad-input.stories.tsx +0 -27
- package/src/components/__stories__/sortable.stories.tsx +0 -77
- package/src/components/__stories__/stub-tag-editor.stories.tsx +0 -45
- package/src/components/__stories__/svg-image.stories.tsx +0 -74
- package/src/components/__stories__/tex.stories.tsx +0 -23
- package/src/components/__stories__/text-input.stories.tsx +0 -33
- package/src/components/__stories__/text-list-editor.stories.tsx +0 -32
- package/src/components/__stories__/tooltip.stories.tsx +0 -52
- package/src/components/__stories__/zoomable-tex.stories.tsx +0 -41
- package/src/components/__stories__/zoomable.stories.tsx +0 -49
- package/src/components/__testdata__/sorter.testdata.ts +0 -19
- package/src/components/__tests__/__snapshots__/sortable.test.tsx.snap +0 -163
- package/src/components/__tests__/__snapshots__/sorter.test.tsx.snap +0 -265
- package/src/components/__tests__/math-input.test.tsx +0 -147
- package/src/components/__tests__/number-input.test.tsx +0 -128
- package/src/components/__tests__/sortable.test.tsx +0 -269
- package/src/components/__tests__/sorter.test.tsx +0 -114
- package/src/components/__tests__/zoomable.test.tsx +0 -399
- package/src/components/button-group.tsx +0 -130
- package/src/components/constants.ts +0 -14
- package/src/components/fixed-to-responsive.tsx +0 -169
- package/src/components/graph.tsx +0 -444
- package/src/components/graphie-classes.ts +0 -153
- package/src/components/graphie-movables.ts +0 -338
- package/src/components/graphie.tsx +0 -392
- package/src/components/highlighting/highlightable-content.tsx +0 -240
- package/src/components/highlighting/highlights.ts +0 -207
- package/src/components/highlighting/ranges.ts +0 -304
- package/src/components/highlighting/types.ts +0 -73
- package/src/components/highlighting/ui/highlight-renderer.tsx +0 -172
- package/src/components/highlighting/ui/highlight-set-renderer.tsx +0 -185
- package/src/components/highlighting/ui/highlight-tooltip.tsx +0 -141
- package/src/components/highlighting/ui/highlighting-ui.tsx +0 -143
- package/src/components/highlighting/ui/selection-tracker.tsx +0 -186
- package/src/components/highlighting/ui/types.ts +0 -21
- package/src/components/highlighting/ui/util.ts +0 -165
- package/src/components/highlighting/word-indexer.tsx +0 -152
- package/src/components/hud.tsx +0 -167
- package/src/components/icon.tsx +0 -141
- package/src/components/image-loader.tsx +0 -177
- package/src/components/info-tip/info-tip.tsx +0 -144
- package/src/components/info-tip.tsx +0 -39
- package/src/components/inline-icon.tsx +0 -60
- package/src/components/input-with-examples.tsx +0 -249
- package/src/components/lint.tsx +0 -459
- package/src/components/math-input.tsx +0 -474
- package/src/components/math-output.tsx +0 -134
- package/src/components/multi-button-group.tsx +0 -135
- package/src/components/number-input.tsx +0 -249
- package/src/components/prop-check-box.tsx +0 -79
- package/src/components/range-input.tsx +0 -60
- package/src/components/simple-keypad-input.tsx +0 -88
- package/src/components/sortable.tsx +0 -958
- package/src/components/stub-tag-editor.tsx +0 -53
- package/src/components/svg-image.tsx +0 -779
- package/src/components/tex.tsx +0 -67
- package/src/components/text-input.tsx +0 -129
- package/src/components/text-list-editor.tsx +0 -166
- package/src/components/tooltip.tsx +0 -410
- package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +0 -141
- package/src/components/visibility-observer/create-visibility-observer.ts +0 -108
- package/src/components/visibility-observer/get-scroll-parent.ts +0 -46
- package/src/components/visibility-observer/visibility-observer.tsx +0 -124
- package/src/components/zoomable-tex.tsx +0 -78
- package/src/components/zoomable.tsx +0 -304
- package/src/components.ts +0 -15
- package/src/definition-context.tsx +0 -59
- package/src/dependencies.ts +0 -40
- package/src/error-boundary.tsx +0 -70
- package/src/extra-widgets.ts +0 -75
- package/src/hint-renderer.tsx +0 -151
- package/src/hints-renderer.tsx +0 -372
- package/src/icon-paths.ts +0 -119
- package/src/index.ts +0 -171
- package/src/init.ts +0 -56
- package/src/interaction-tracker.ts +0 -62
- package/src/interactive2/__tests__/movable-mock.ts +0 -43
- package/src/interactive2/__tests__/movable-point.test.ts +0 -144
- package/src/interactive2/__tests__/movable.test.ts +0 -157
- package/src/interactive2/interactive-util.test.ts +0 -93
- package/src/interactive2/interactive-util.ts +0 -159
- package/src/interactive2/movable-helper-methods.ts +0 -166
- package/src/interactive2/movable-line-options.ts +0 -419
- package/src/interactive2/movable-line.ts +0 -307
- package/src/interactive2/movable-point-options.ts +0 -212
- package/src/interactive2/movable-point.tsx +0 -585
- package/src/interactive2/movable-polygon-options.ts +0 -389
- package/src/interactive2/movable-polygon.ts +0 -360
- package/src/interactive2/movable.ts +0 -279
- package/src/interactive2/objective_.ts +0 -79
- package/src/interactive2/types.ts +0 -2
- package/src/interactive2/wrapped-defaults.ts +0 -87
- package/src/interactive2/wrapped-ellipse.ts +0 -94
- package/src/interactive2/wrapped-line.ts +0 -116
- package/src/interactive2/wrapped-path.ts +0 -51
- package/src/interactive2.ts +0 -70
- package/src/item-version.ts +0 -10
- package/src/jipt-paragraphs.ts +0 -49
- package/src/jquery.mobile.vmouse.js +0 -545
- package/src/loading-context.ts +0 -21
- package/src/logging/log.test.ts +0 -39
- package/src/logging/log.ts +0 -97
- package/src/mixins/__tests__/widget-prop-denylist.test.ts +0 -21
- package/src/mixins/changeable.ts +0 -133
- package/src/mixins/editor-jsonify.ts +0 -13
- package/src/mixins/widget-jsonify-deprecated.ts +0 -23
- package/src/mixins/widget-prop-denylist.ts +0 -48
- package/src/multi-items/__stories__/multi-renderer.stories.tsx +0 -83
- package/src/multi-items/__testdata__/multi-renderer.testdata.ts +0 -172
- package/src/multi-items/__tests__/__snapshots__/multi-renderer.test.tsx.snap +0 -1164
- package/src/multi-items/__tests__/items.test.ts +0 -240
- package/src/multi-items/__tests__/multi-renderer.test.tsx +0 -914
- package/src/multi-items/__tests__/prop-type-builders.test.ts +0 -133
- package/src/multi-items/__tests__/shapes.test.ts +0 -43
- package/src/multi-items/__tests__/trees.test.ts +0 -317
- package/src/multi-items/item-types.ts +0 -56
- package/src/multi-items/items.ts +0 -176
- package/src/multi-items/multi-renderer.tsx +0 -569
- package/src/multi-items/prop-type-builders.ts +0 -106
- package/src/multi-items/shape-types.ts +0 -52
- package/src/multi-items/shapes.ts +0 -52
- package/src/multi-items/tree-types.ts +0 -47
- package/src/multi-items/trees.ts +0 -360
- package/src/multi-items.ts +0 -75
- package/src/perseus-api.tsx +0 -188
- package/src/perseus-env.ts +0 -27
- package/src/perseus-error.ts +0 -17
- package/src/perseus-markdown.tsx +0 -405
- package/src/perseus-types.ts +0 -1366
- package/src/perseus-version.ts +0 -9
- package/src/question-paragraph.tsx +0 -34
- package/src/renderability.ts +0 -109
- package/src/renderer.tsx +0 -2000
- package/src/server-item-renderer.tsx +0 -495
- package/src/sigfigs.ts +0 -490
- package/src/styles/articles.less +0 -749
- package/src/styles/constants.ts +0 -94
- package/src/styles/global-constants.ts +0 -343
- package/src/styles/global-styles.ts +0 -306
- package/src/styles/khan-exercise.css +0 -1468
- package/src/styles/media-queries.ts +0 -47
- package/src/styles/perseus-renderer.less +0 -732
- package/src/styles/shared.ts +0 -130
- package/src/styles/util.less +0 -47
- package/src/styles/variables.boostrap.less +0 -277
- package/src/styles/variables.less +0 -56
- package/src/styles/variables.shared.less +0 -340
- package/src/styles/widgets/categorizer.less +0 -38
- package/src/styles/widgets/dropdown.less +0 -3
- package/src/styles/widgets/expression.less +0 -65
- package/src/styles/widgets/graded-group.less +0 -36
- package/src/styles/widgets/grapher.less +0 -12
- package/src/styles/widgets/group.less +0 -19
- package/src/styles/widgets/image.less +0 -54
- package/src/styles/widgets/interactive-graph.less +0 -64
- package/src/styles/widgets/label-image.less +0 -57
- package/src/styles/widgets/matcher.less +0 -8
- package/src/styles/widgets/matrix.less +0 -126
- package/src/styles/widgets/measurer.less +0 -20
- package/src/styles/widgets/orderer.less +0 -98
- package/src/styles/widgets/passage.less +0 -154
- package/src/styles/widgets/plotter.less +0 -31
- package/src/styles/widgets/radio.less +0 -58
- package/src/styles/widgets/reaction-diagram.less +0 -35
- package/src/styles/widgets/sequence.less +0 -5
- package/src/styles/widgets/sortable.less +0 -113
- package/src/styles/widgets/table.less +0 -57
- package/src/styles/widgets/unit.less +0 -15
- package/src/tex-wrangler.ts +0 -182
- package/src/translation-linter.ts +0 -126
- package/src/traversal.ts +0 -138
- package/src/types.ts +0 -513
- package/src/util/a11y.ts +0 -23
- package/src/util/answer-types.test.ts +0 -114
- package/src/util/answer-types.ts +0 -876
- package/src/util/colors.ts +0 -93
- package/src/util/drawing-transform.test.ts +0 -67
- package/src/util/drawing-transform.ts +0 -102
- package/src/util/extract-perseus-data.ts +0 -539
- package/src/util/fix-passage-refs.ts +0 -121
- package/src/util/geometry.test.ts +0 -75
- package/src/util/geometry.ts +0 -312
- package/src/util/graph-bounds.ts +0 -23
- package/src/util/graph-utils.ts +0 -15
- package/src/util/graphie.test.ts +0 -1277
- package/src/util/graphie.ts +0 -1566
- package/src/util/interactive.ts +0 -4172
- package/src/util/interval.ts +0 -4
- package/src/util/katex-preprocess.ts +0 -14
- package/src/util/math.test.ts +0 -11
- package/src/util/math.ts +0 -294
- package/src/util/mobile-native-utils.test.ts +0 -22
- package/src/util/mobile-native-utils.ts +0 -12
- package/src/util/parse-perseus-json.test.ts +0 -10
- package/src/util/parse-perseus-json.ts +0 -13
- package/src/util/react-render.tsx +0 -27
- package/src/util/register-all-widgets-for-testing.ts +0 -13
- package/src/util/scroll-utils.ts +0 -155
- package/src/util/sizing-utils.ts +0 -46
- package/src/util/tex.ts +0 -73
- package/src/util/url-utils.ts +0 -34
- package/src/util.graphie.test.ts +0 -45
- package/src/util.graphie.ts +0 -59
- package/src/util.ts +0 -966
- package/src/version.ts +0 -10
- package/src/widget-container.tsx +0 -199
- package/src/widgets/__stories__/categorizer.stories.tsx +0 -14
- package/src/widgets/__stories__/cs-program.stories.tsx +0 -14
- package/src/widgets/__stories__/definition.stories.tsx +0 -114
- package/src/widgets/__stories__/dropdown.stories.tsx +0 -14
- package/src/widgets/__stories__/explanation.stories.tsx +0 -18
- package/src/widgets/__stories__/expression.stories.tsx +0 -145
- package/src/widgets/__stories__/graded-group-set.stories.tsx +0 -31
- package/src/widgets/__stories__/graded-group.stories.tsx +0 -31
- package/src/widgets/__stories__/grapher.stories.tsx +0 -46
- package/src/widgets/__stories__/group.stories.tsx +0 -14
- package/src/widgets/__stories__/iframe.stories.tsx +0 -14
- package/src/widgets/__stories__/image.stories.tsx +0 -85
- package/src/widgets/__stories__/input-number.stories.tsx +0 -101
- package/src/widgets/__stories__/interaction.stories.tsx +0 -14
- package/src/widgets/__stories__/interactive-graph.stories.tsx +0 -60
- package/src/widgets/__stories__/label-image.stories.tsx +0 -130
- package/src/widgets/__stories__/matcher.stories.tsx +0 -14
- package/src/widgets/__stories__/matrix.stories.tsx +0 -14
- package/src/widgets/__stories__/number-line.stories.tsx +0 -14
- package/src/widgets/__stories__/numeric-input.stories.tsx +0 -105
- package/src/widgets/__stories__/orderer.stories.tsx +0 -18
- package/src/widgets/__stories__/passage-ref.stories.tsx +0 -33
- package/src/widgets/__stories__/passage.stories.tsx +0 -39
- package/src/widgets/__stories__/plotter.stories.tsx +0 -27
- package/src/widgets/__stories__/radio.stories.tsx +0 -86
- package/src/widgets/__stories__/random-widgets.stories.tsx +0 -59
- package/src/widgets/__stories__/sorter.stories.tsx +0 -14
- package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +0 -66
- package/src/widgets/__stories__/unit.stories.tsx +0 -28
- package/src/widgets/__stories__/video-transcript-link.stories.tsx +0 -23
- package/src/widgets/__stories__/video.stories.tsx +0 -22
- package/src/widgets/__testdata__/base-radio.testdata.ts +0 -21
- package/src/widgets/__testdata__/categorizer.testdata.ts +0 -89
- package/src/widgets/__testdata__/cs-program.testdata.ts +0 -27
- package/src/widgets/__testdata__/dropdown.testdata.ts +0 -71
- package/src/widgets/__testdata__/explanation.testdata.ts +0 -85
- package/src/widgets/__testdata__/expression.testdata.ts +0 -198
- package/src/widgets/__testdata__/graded-group-set.testdata.ts +0 -356
- package/src/widgets/__testdata__/graded-group.testdata.ts +0 -77
- package/src/widgets/__testdata__/grapher.testdata.ts +0 -374
- package/src/widgets/__testdata__/group.testdata.ts +0 -153
- package/src/widgets/__testdata__/iframe.testdata.ts +0 -35
- package/src/widgets/__testdata__/image.testdata.ts +0 -36
- package/src/widgets/__testdata__/input-number.testdata.ts +0 -72
- package/src/widgets/__testdata__/interaction.testdata.ts +0 -262
- package/src/widgets/__testdata__/interactive-graph-random.testdata.ts +0 -269
- package/src/widgets/__testdata__/interactive-graph.testdata.ts +0 -644
- package/src/widgets/__testdata__/label-image.testdata.ts +0 -308
- package/src/widgets/__testdata__/matcher.testdata.ts +0 -33
- package/src/widgets/__testdata__/matrix.testdata.ts +0 -28
- package/src/widgets/__testdata__/number-line.testdata.ts +0 -30
- package/src/widgets/__testdata__/numeric-input.testdata.ts +0 -265
- package/src/widgets/__testdata__/orderer.testdata.ts +0 -123
- package/src/widgets/__testdata__/passage-ref.testdata.ts +0 -101
- package/src/widgets/__testdata__/passage.testdata.ts +0 -95
- package/src/widgets/__testdata__/plotter.testdata.ts +0 -36
- package/src/widgets/__testdata__/radio.testdata.ts +0 -324
- package/src/widgets/__testdata__/randomizers.ts +0 -51
- package/src/widgets/__testdata__/sorter.testdata.ts +0 -19
- package/src/widgets/__testdata__/video.testdata.ts +0 -61
- package/src/widgets/__tests__/__snapshots__/categorizer.test.ts.snap +0 -940
- package/src/widgets/__tests__/__snapshots__/cs-program.test.ts.snap +0 -67
- package/src/widgets/__tests__/__snapshots__/definition.test.ts.snap +0 -97
- package/src/widgets/__tests__/__snapshots__/dropdown.test.ts.snap +0 -133
- package/src/widgets/__tests__/__snapshots__/explanation.test.ts.snap +0 -425
- package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt.test.ts.snap +0 -729
- package/src/widgets/__tests__/__snapshots__/graded-group-set.test.ts.snap +0 -339
- package/src/widgets/__tests__/__snapshots__/graded-group.test.ts.snap +0 -801
- package/src/widgets/__tests__/__snapshots__/grapher.test.ts.snap +0 -2673
- package/src/widgets/__tests__/__snapshots__/group.test.tsx.snap +0 -1211
- package/src/widgets/__tests__/__snapshots__/iframe.test.ts.snap +0 -61
- package/src/widgets/__tests__/__snapshots__/image.test.ts.snap +0 -378
- package/src/widgets/__tests__/__snapshots__/input-number.test.ts.snap +0 -495
- package/src/widgets/__tests__/__snapshots__/interaction.test.ts.snap +0 -292
- package/src/widgets/__tests__/__snapshots__/interactive-graph.test.ts.snap +0 -2889
- package/src/widgets/__tests__/__snapshots__/matcher.test.tsx.snap +0 -883
- package/src/widgets/__tests__/__snapshots__/matrix.test.ts.snap +0 -514
- package/src/widgets/__tests__/__snapshots__/number-line.test.ts.snap +0 -814
- package/src/widgets/__tests__/__snapshots__/numeric-input.test.ts.snap +0 -470
- package/src/widgets/__tests__/__snapshots__/orderer.test.ts.snap +0 -243
- package/src/widgets/__tests__/__snapshots__/passage-ref.test.ts.snap +0 -434
- package/src/widgets/__tests__/__snapshots__/passage.test.tsx.snap +0 -1956
- package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +0 -827
- package/src/widgets/__tests__/__snapshots__/radio.test.ts.snap +0 -4237
- package/src/widgets/__tests__/__snapshots__/unit.test.tsx.snap +0 -20
- package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +0 -153
- package/src/widgets/__tests__/categorizer.test.ts +0 -203
- package/src/widgets/__tests__/cs-program.test.ts +0 -43
- package/src/widgets/__tests__/definition.test.ts +0 -136
- package/src/widgets/__tests__/dropdown.test.ts +0 -105
- package/src/widgets/__tests__/explanation.test.ts +0 -198
- package/src/widgets/__tests__/expression-mobile.test.tsx +0 -363
- package/src/widgets/__tests__/expression.test.tsx +0 -484
- package/src/widgets/__tests__/graded-group-set-jipt.test.ts +0 -30
- package/src/widgets/__tests__/graded-group-set.test.ts +0 -288
- package/src/widgets/__tests__/graded-group.test.ts +0 -232
- package/src/widgets/__tests__/grapher.cypress.ts +0 -576
- package/src/widgets/__tests__/grapher.test.ts +0 -33
- package/src/widgets/__tests__/group.test.tsx +0 -510
- package/src/widgets/__tests__/iframe.test.ts +0 -45
- package/src/widgets/__tests__/image.test.ts +0 -62
- package/src/widgets/__tests__/input-number.test.ts +0 -354
- package/src/widgets/__tests__/interaction.test.ts +0 -31
- package/src/widgets/__tests__/interactive-graph.cypress.ts +0 -815
- package/src/widgets/__tests__/interactive-graph.test.ts +0 -106
- package/src/widgets/__tests__/matcher.test.tsx +0 -176
- package/src/widgets/__tests__/matrix.test.ts +0 -82
- package/src/widgets/__tests__/number-line.test.ts +0 -79
- package/src/widgets/__tests__/numeric-input.test.ts +0 -575
- package/src/widgets/__tests__/orderer.test.ts +0 -73
- package/src/widgets/__tests__/passage-ref.test.ts +0 -168
- package/src/widgets/__tests__/passage.test.tsx +0 -224
- package/src/widgets/__tests__/plotter.test.tsx +0 -69
- package/src/widgets/__tests__/radio/base-radio.test.tsx +0 -470
- package/src/widgets/__tests__/radio/choice-icon.test.tsx +0 -90
- package/src/widgets/__tests__/radio/choice.test.tsx +0 -310
- package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -22
- package/src/widgets/__tests__/radio/option-status.test.tsx +0 -77
- package/src/widgets/__tests__/radio.test.ts +0 -807
- package/src/widgets/__tests__/randomizers.test.ts +0 -53
- package/src/widgets/__tests__/renderQuestion.tsx +0 -101
- package/src/widgets/__tests__/unit.test.tsx +0 -168
- package/src/widgets/__tests__/video.test.ts +0 -69
- package/src/widgets/categorizer.tsx +0 -344
- package/src/widgets/cs-program.tsx +0 -227
- package/src/widgets/definition.tsx +0 -121
- package/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx +0 -30
- package/src/widgets/deprecated-standin/__tests__/__snapshots__/deprecated-standin.test.ts.snap +0 -70
- package/src/widgets/deprecated-standin/__tests__/deprecated-standin.test.ts +0 -93
- package/src/widgets/deprecated-standin/index.tsx +0 -58
- package/src/widgets/dropdown.tsx +0 -142
- package/src/widgets/explanation.tsx +0 -317
- package/src/widgets/expression.tsx +0 -707
- package/src/widgets/graded-group-answer-bar.tsx +0 -142
- package/src/widgets/graded-group-set.tsx +0 -338
- package/src/widgets/graded-group.tsx +0 -471
- package/src/widgets/grapher/util.tsx +0 -799
- package/src/widgets/grapher.tsx +0 -660
- package/src/widgets/group.tsx +0 -195
- package/src/widgets/iframe.tsx +0 -195
- package/src/widgets/image.tsx +0 -312
- package/src/widgets/input-number.tsx +0 -412
- package/src/widgets/interaction/arrow-picker.tsx +0 -38
- package/src/widgets/interaction/color-picker.tsx +0 -69
- package/src/widgets/interaction/dash-picker.tsx +0 -45
- package/src/widgets/interaction/element-container.tsx +0 -100
- package/src/widgets/interaction.tsx +0 -826
- package/src/widgets/interactive-graph.tsx +0 -2597
- package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +0 -91
- package/src/widgets/label-image/__stories__/answer-pill.stories.tsx +0 -62
- package/src/widgets/label-image/__stories__/marker.stories.tsx +0 -171
- package/src/widgets/label-image/__tests__/answer-pill.test.tsx +0 -75
- package/src/widgets/label-image/__tests__/hide-answers-toggle.test.tsx +0 -39
- package/src/widgets/label-image/answer-choices.tsx +0 -88
- package/src/widgets/label-image/answer-pill.tsx +0 -103
- package/src/widgets/label-image/hide-answers-toggle.tsx +0 -40
- package/src/widgets/label-image/marker.tsx +0 -268
- package/src/widgets/label-image/strings.ts +0 -5
- package/src/widgets/label-image/types.ts +0 -27
- package/src/widgets/label-image.test.ts +0 -928
- package/src/widgets/label-image.tsx +0 -819
- package/src/widgets/lights-puzzle.tsx +0 -359
- package/src/widgets/matcher.tsx +0 -298
- package/src/widgets/matrix.tsx +0 -634
- package/src/widgets/measurer.tsx +0 -222
- package/src/widgets/molecule/__tests__/layout.test.ts +0 -162
- package/src/widgets/molecule/__tests__/parser.test.ts +0 -155
- package/src/widgets/molecule/molecule-drawing.ts +0 -173
- package/src/widgets/molecule/molecule-layout.ts +0 -362
- package/src/widgets/molecule/smiles-parser.ts +0 -296
- package/src/widgets/molecule.tsx +0 -172
- package/src/widgets/number-line.tsx +0 -862
- package/src/widgets/numeric-input.tsx +0 -576
- package/src/widgets/orderer.tsx +0 -786
- package/src/widgets/passage/__tests__/passage-markdown.test.ts +0 -376
- package/src/widgets/passage/passage-markdown.tsx +0 -475
- package/src/widgets/passage-ref-target.tsx +0 -76
- package/src/widgets/passage-ref.tsx +0 -213
- package/src/widgets/passage.tsx +0 -582
- package/src/widgets/plotter.tsx +0 -1194
- package/src/widgets/radio/__stories__/base-radio.stories.tsx +0 -196
- package/src/widgets/radio/__stories__/choice-icon.stories.tsx +0 -166
- package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +0 -40
- package/src/widgets/radio/__stories__/choice.stories.tsx +0 -137
- package/src/widgets/radio/__stories__/focus-ring.stories.tsx +0 -43
- package/src/widgets/radio/__stories__/option-status.stories.tsx +0 -103
- package/src/widgets/radio/base-radio.tsx +0 -511
- package/src/widgets/radio/choice-a11y-text.ts +0 -61
- package/src/widgets/radio/choice-icon/choice-icon.tsx +0 -218
- package/src/widgets/radio/choice-icon/cross-out-line.tsx +0 -51
- package/src/widgets/radio/choice-icon/shared-styles.ts +0 -15
- package/src/widgets/radio/choice-none-above.tsx +0 -56
- package/src/widgets/radio/choice.jsx.fixture.ts +0 -45
- package/src/widgets/radio/choice.tsx +0 -359
- package/src/widgets/radio/focus-ring.tsx +0 -57
- package/src/widgets/radio/option-status.tsx +0 -98
- package/src/widgets/radio/util.test.ts +0 -18
- package/src/widgets/radio/util.ts +0 -31
- package/src/widgets/radio/widget.tsx +0 -520
- package/src/widgets/radio.ts +0 -157
- package/src/widgets/reaction-diagram.tsx +0 -144
- package/src/widgets/sequence.tsx +0 -142
- package/src/widgets/simulator.tsx +0 -829
- package/src/widgets/sorter.tsx +0 -155
- package/src/widgets/table.tsx +0 -393
- package/src/widgets/unit.tsx +0 -374
- package/src/widgets/video-transcript-link.test.tsx +0 -213
- package/src/widgets/video-transcript-link.tsx +0 -84
- package/src/widgets/video.tsx +0 -135
- package/src/widgets.ts +0 -489
- package/src/zoom.ts +0 -555
- package/tsconfig-build.json +0 -26
- package/tsconfig-build.tsbuildinfo +0 -1
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/* eslint-disable testing-library/prefer-user-event */
|
|
2
|
-
import {fireEvent} from "@testing-library/react";
|
|
3
|
-
|
|
4
|
-
import {Graphie} from "../../util/graphie";
|
|
5
|
-
import Movable from "../movable";
|
|
6
|
-
|
|
7
|
-
// Yay for side-effect imports!
|
|
8
|
-
// eslint-disable-next-line import/no-unassigned-import
|
|
9
|
-
import "../../util/interactive";
|
|
10
|
-
|
|
11
|
-
describe("Movable", () => {
|
|
12
|
-
it("should be constructable", () => {
|
|
13
|
-
const movable = new Movable(
|
|
14
|
-
new Graphie(document.createElement("div")),
|
|
15
|
-
{},
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
expect(movable).toBeDefined();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it("should have accessor properties", () => {
|
|
22
|
-
const movable = new Movable(
|
|
23
|
-
new Graphie(document.createElement("div")),
|
|
24
|
-
{},
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
expect(typeof movable.isHovering).toBe("function");
|
|
28
|
-
expect(typeof movable.cursor).toBe("function");
|
|
29
|
-
expect(typeof movable.added).toBe("function");
|
|
30
|
-
expect(typeof movable.isHovering).toBe("function");
|
|
31
|
-
expect(typeof movable.isMouseOver).toBe("function");
|
|
32
|
-
expect(typeof movable.isDragging).toBe("function");
|
|
33
|
-
expect(typeof movable.mouseTarget).toBe("function");
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test("cloneState()", () => {
|
|
37
|
-
const movable = new Movable(
|
|
38
|
-
new Graphie(document.createElement("div")),
|
|
39
|
-
{},
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
expect(movable.cloneState()).toEqual(
|
|
43
|
-
expect.objectContaining({
|
|
44
|
-
id: expect.any(String),
|
|
45
|
-
add: [],
|
|
46
|
-
added: true,
|
|
47
|
-
cursor: null,
|
|
48
|
-
draw: [],
|
|
49
|
-
isDragging: false,
|
|
50
|
-
isHovering: false,
|
|
51
|
-
isMouseOver: false,
|
|
52
|
-
modify: [],
|
|
53
|
-
mouseTarget: null,
|
|
54
|
-
onClick: [],
|
|
55
|
-
onMove: [],
|
|
56
|
-
onMoveEnd: [],
|
|
57
|
-
onMoveStart: [],
|
|
58
|
-
remove: [],
|
|
59
|
-
}),
|
|
60
|
-
);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
test("cloneState() should copy state", () => {
|
|
64
|
-
const movable = new Movable(
|
|
65
|
-
new Graphie(document.createElement("div")),
|
|
66
|
-
{},
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
expect(movable.cloneState()).not.toBe(movable.state);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
test("modify() resets movable to initial state when no params given", () => {
|
|
73
|
-
const movable = new Movable(
|
|
74
|
-
new Graphie(document.createElement("div")),
|
|
75
|
-
{},
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
const state = movable.cloneState();
|
|
79
|
-
movable.state.added = false;
|
|
80
|
-
|
|
81
|
-
// It seems that all usages of this function in our production code
|
|
82
|
-
// pass the original state + mutations to modify(). However, it _does_
|
|
83
|
-
// work to pass no arguments so we'll keep this Characterization test
|
|
84
|
-
// here for now.
|
|
85
|
-
movable.modify();
|
|
86
|
-
|
|
87
|
-
expect(movable.cloneState()).toEqual(state);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test("modify() retains original ID", () => {
|
|
91
|
-
const movable = new Movable(
|
|
92
|
-
new Graphie(document.createElement("div")),
|
|
93
|
-
{},
|
|
94
|
-
);
|
|
95
|
-
const id = movable.state.id;
|
|
96
|
-
|
|
97
|
-
movable.modify({added: true});
|
|
98
|
-
|
|
99
|
-
expect(movable.state.id).toBe(id);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
test("grab() fires onMoveStart", () => {
|
|
103
|
-
const graphie = new Graphie(document.createElement("div"));
|
|
104
|
-
graphie.init({
|
|
105
|
-
range: [
|
|
106
|
-
[-10, 10],
|
|
107
|
-
[-10, 10],
|
|
108
|
-
],
|
|
109
|
-
});
|
|
110
|
-
const onMoveStart = jest.fn();
|
|
111
|
-
const movable = new Movable(graphie, {onMoveStart});
|
|
112
|
-
|
|
113
|
-
movable.grab([0, 0]);
|
|
114
|
-
|
|
115
|
-
expect(onMoveStart).toHaveBeenCalledWith([0, 0], [0, 0]);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
test("grab() fires onMove when mouse moves", () => {
|
|
119
|
-
const graphie = new Graphie(document.createElement("div"));
|
|
120
|
-
graphie.init({
|
|
121
|
-
range: [
|
|
122
|
-
[-10, 10],
|
|
123
|
-
[-10, 10],
|
|
124
|
-
],
|
|
125
|
-
scale: [10, 10],
|
|
126
|
-
});
|
|
127
|
-
const onMove = jest.fn();
|
|
128
|
-
const movable = new Movable(graphie, {onMove});
|
|
129
|
-
|
|
130
|
-
movable.grab([0, 0]);
|
|
131
|
-
fireEvent.mouseMove(document, {clientX: 120, clientY: 80});
|
|
132
|
-
|
|
133
|
-
expect(onMove).toHaveBeenCalledWith([2, 2], [0, 0]);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
test("grab() fires onMoveEnd when mouse up", () => {
|
|
137
|
-
const dummyGraphie: any = {};
|
|
138
|
-
const onMoveEnd = jest.fn();
|
|
139
|
-
const movable = new Movable(dummyGraphie, {onMoveEnd});
|
|
140
|
-
|
|
141
|
-
movable.grab([0, 0]);
|
|
142
|
-
fireEvent.mouseUp(document);
|
|
143
|
-
|
|
144
|
-
expect(onMoveEnd).toHaveBeenCalledWith([0, 0], [0, 0]);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
test("grab() fires onClick if still hovering when mouse up", () => {
|
|
148
|
-
const dummyGraphie: any = {};
|
|
149
|
-
const onClick = jest.fn();
|
|
150
|
-
const movable = new Movable(dummyGraphie, {onClick});
|
|
151
|
-
|
|
152
|
-
movable.grab([0, 0]);
|
|
153
|
-
fireEvent.mouseUp(document);
|
|
154
|
-
|
|
155
|
-
expect(onClick).toHaveBeenCalledWith([0, 0], [0, 0]);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import InteractiveUtil from "./interactive-util";
|
|
2
|
-
|
|
3
|
-
describe("normalizeOptions", () => {
|
|
4
|
-
it("wraps single functions in arrays", () => {
|
|
5
|
-
const options = {
|
|
6
|
-
add: () => {},
|
|
7
|
-
modify: () => {},
|
|
8
|
-
draw: () => {},
|
|
9
|
-
remove: () => {},
|
|
10
|
-
constraints: () => {},
|
|
11
|
-
onMoveStart: () => {},
|
|
12
|
-
onMove: () => {},
|
|
13
|
-
onMoveEnd: () => {},
|
|
14
|
-
onClick: () => {},
|
|
15
|
-
};
|
|
16
|
-
expect(InteractiveUtil.normalizeOptions(options)).toEqual({
|
|
17
|
-
add: [options.add],
|
|
18
|
-
modify: [options.modify],
|
|
19
|
-
draw: [options.draw],
|
|
20
|
-
remove: [options.remove],
|
|
21
|
-
constraints: [options.constraints],
|
|
22
|
-
onMoveStart: [options.onMoveStart],
|
|
23
|
-
onMove: [options.onMove],
|
|
24
|
-
onMoveEnd: [options.onMoveEnd],
|
|
25
|
-
onClick: [options.onClick],
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("tolerates missing properties", () => {
|
|
30
|
-
const options = {
|
|
31
|
-
add: () => {},
|
|
32
|
-
};
|
|
33
|
-
expect(InteractiveUtil.normalizeOptions(options)).toEqual({
|
|
34
|
-
add: [options.add],
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it("ignores extra properties", () => {
|
|
39
|
-
const options = {
|
|
40
|
-
foo: () => {},
|
|
41
|
-
};
|
|
42
|
-
expect(InteractiveUtil.normalizeOptions(options)).toEqual({
|
|
43
|
-
foo: options.foo,
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("does not modify its argument", () => {
|
|
48
|
-
const options = {
|
|
49
|
-
add: () => {},
|
|
50
|
-
};
|
|
51
|
-
const optionsCopy = {...options};
|
|
52
|
-
InteractiveUtil.normalizeOptions(options);
|
|
53
|
-
expect(options).toEqual(optionsCopy);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it("leaves existing arrays of functions alone", () => {
|
|
57
|
-
const options = {
|
|
58
|
-
add: [() => {}],
|
|
59
|
-
modify: [() => {}],
|
|
60
|
-
draw: [() => {}],
|
|
61
|
-
remove: [() => {}],
|
|
62
|
-
onMoveStart: [() => {}],
|
|
63
|
-
onMove: [() => {}],
|
|
64
|
-
onMoveEnd: [() => {}],
|
|
65
|
-
onClick: [() => {}],
|
|
66
|
-
};
|
|
67
|
-
expect(InteractiveUtil.normalizeOptions(options)).toEqual(options);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it("flattens arrays", () => {
|
|
71
|
-
const dummyFunction = () => {};
|
|
72
|
-
const options = {
|
|
73
|
-
add: [[dummyFunction]],
|
|
74
|
-
modify: [[dummyFunction]],
|
|
75
|
-
draw: [[dummyFunction]],
|
|
76
|
-
remove: [[dummyFunction]],
|
|
77
|
-
onMoveStart: [[dummyFunction]],
|
|
78
|
-
onMove: [[dummyFunction]],
|
|
79
|
-
onMoveEnd: [[dummyFunction]],
|
|
80
|
-
onClick: [[dummyFunction]],
|
|
81
|
-
};
|
|
82
|
-
expect(InteractiveUtil.normalizeOptions(options)).toEqual({
|
|
83
|
-
add: [dummyFunction],
|
|
84
|
-
modify: [dummyFunction],
|
|
85
|
-
draw: [dummyFunction],
|
|
86
|
-
remove: [dummyFunction],
|
|
87
|
-
onMoveStart: [dummyFunction],
|
|
88
|
-
onMove: [dummyFunction],
|
|
89
|
-
onMoveEnd: [dummyFunction],
|
|
90
|
-
onClick: [dummyFunction],
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility functions for writing Interactive2 movablethings
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import _ from "underscore";
|
|
6
|
-
|
|
7
|
-
import {Errors} from "../logging/log";
|
|
8
|
-
import {PerseusError} from "../perseus-error";
|
|
9
|
-
|
|
10
|
-
import MovableHelperMethods from "./movable-helper-methods";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Compute the correct vendor-prefixed `transform`.
|
|
14
|
-
*/
|
|
15
|
-
let prefixedTransform = null;
|
|
16
|
-
function computePrefixedTransform(): string | null | undefined {
|
|
17
|
-
// Temporary element for testing prefix validity
|
|
18
|
-
const el = document.createElement("div");
|
|
19
|
-
|
|
20
|
-
const prefixes = [
|
|
21
|
-
"transform",
|
|
22
|
-
"msTransform",
|
|
23
|
-
"MozTransform",
|
|
24
|
-
"WebkitTransform",
|
|
25
|
-
"OTransform",
|
|
26
|
-
];
|
|
27
|
-
let correctPrefix = null;
|
|
28
|
-
_.each(prefixes, function (prefix) {
|
|
29
|
-
if (typeof el.style[prefix] !== "undefined") {
|
|
30
|
-
// @ts-expect-error - TS2322 - Type 'string' is not assignable to type 'null'.
|
|
31
|
-
correctPrefix = prefix;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
return correctPrefix;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Compute whether the browser can use 3d transforms by trying to use the
|
|
40
|
-
* translateZ transformation.
|
|
41
|
-
*/
|
|
42
|
-
let canUse3dTransform = null;
|
|
43
|
-
function computeCanUse3dTransform(): boolean {
|
|
44
|
-
const el = document.createElement("div");
|
|
45
|
-
|
|
46
|
-
const prefix = InteractiveUtil.getPrefixedTransform();
|
|
47
|
-
|
|
48
|
-
// Prefix could be null.
|
|
49
|
-
// @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type.
|
|
50
|
-
el.style[prefix] = "translateZ(0px)";
|
|
51
|
-
// @ts-expect-error - TS2538 - Type 'null' cannot be used as an index type. | TS2538 - Type 'undefined' cannot be used as an index type.
|
|
52
|
-
return !!el.style[prefix];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const FUNCTION_ARRAY_OPTIONS = [
|
|
56
|
-
"add",
|
|
57
|
-
"modify",
|
|
58
|
-
"draw",
|
|
59
|
-
"remove",
|
|
60
|
-
"constraints",
|
|
61
|
-
"onMoveStart",
|
|
62
|
-
"onMove",
|
|
63
|
-
"onMoveEnd",
|
|
64
|
-
"onClick",
|
|
65
|
-
];
|
|
66
|
-
|
|
67
|
-
const InteractiveUtil = {
|
|
68
|
-
assert: function (isTrue: boolean, message?: string) {
|
|
69
|
-
if (!isTrue) {
|
|
70
|
-
throw new PerseusError(
|
|
71
|
-
"Assertion Error" + (message ? ": " + message : ""),
|
|
72
|
-
Errors.Internal,
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Create getters for this.state, based on the default state, `defaults`
|
|
79
|
-
*/
|
|
80
|
-
createGettersFor: function (Class: any, defaults: Record<any, any>) {
|
|
81
|
-
_.each(_.keys(defaults), function (key) {
|
|
82
|
-
if (Class.prototype[key] === undefined) {
|
|
83
|
-
Class.prototype[key] = function () {
|
|
84
|
-
return this.state[key];
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Add MovableHelperMethods methods to a MovableThing class
|
|
92
|
-
*/
|
|
93
|
-
addMovableHelperMethodsTo: function (Class: any) {
|
|
94
|
-
_.each(MovableHelperMethods, function (methodFunc, methodName) {
|
|
95
|
-
if (Class.prototype[methodName] === undefined) {
|
|
96
|
-
Class.prototype[methodName] = methodFunc;
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Turn a function or an array of functions into an array of functions
|
|
103
|
-
*/
|
|
104
|
-
arrayify: function (
|
|
105
|
-
funcOrArray:
|
|
106
|
-
| ((...args: ReadonlyArray<unknown>) => unknown)
|
|
107
|
-
| ReadonlyArray<unknown>,
|
|
108
|
-
): ReadonlyArray<unknown> {
|
|
109
|
-
if (funcOrArray == null) {
|
|
110
|
-
return [];
|
|
111
|
-
}
|
|
112
|
-
if (_.isArray(funcOrArray)) {
|
|
113
|
-
return _.filter(_.flatten(funcOrArray), _.identity);
|
|
114
|
-
}
|
|
115
|
-
return [funcOrArray];
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Convert all function-or-array arguments to arrays of functions
|
|
120
|
-
*/
|
|
121
|
-
normalizeOptions: function (options: Record<any, any>): Record<any, any> {
|
|
122
|
-
const result = {...options};
|
|
123
|
-
FUNCTION_ARRAY_OPTIONS.forEach(function (eventName) {
|
|
124
|
-
// Only propagate values which were set; not present values
|
|
125
|
-
// shouldn't be added to options because we'd like them to
|
|
126
|
-
// fall through to defaults
|
|
127
|
-
if (options[eventName] !== undefined) {
|
|
128
|
-
result[eventName] = InteractiveUtil.arrayify(
|
|
129
|
-
options[eventName],
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
return result;
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Get the correct vendor-prefixed `transform`.
|
|
138
|
-
*/
|
|
139
|
-
getPrefixedTransform: function (): string | null | undefined {
|
|
140
|
-
// Cache result to avoid re-computation
|
|
141
|
-
// @ts-expect-error - TS2322 - Type 'string | null | undefined' is not assignable to type 'null'.
|
|
142
|
-
prefixedTransform = prefixedTransform || computePrefixedTransform();
|
|
143
|
-
return prefixedTransform;
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Get whether the browser can use 3d transforms.
|
|
148
|
-
*/
|
|
149
|
-
getCanUse3dTransform: function (): boolean {
|
|
150
|
-
if (canUse3dTransform == null) {
|
|
151
|
-
// @ts-expect-error - TS2322 - Type 'boolean' is not assignable to type 'null'.
|
|
152
|
-
canUse3dTransform = computeCanUse3dTransform();
|
|
153
|
-
}
|
|
154
|
-
// @ts-expect-error - TS2322 - Type 'null' is not assignable to type 'boolean'.
|
|
155
|
-
return canUse3dTransform;
|
|
156
|
-
},
|
|
157
|
-
} as const;
|
|
158
|
-
|
|
159
|
-
export default InteractiveUtil;
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @babel/no-invalid-this */
|
|
2
|
-
/**
|
|
3
|
-
* MovableThing convenience methods
|
|
4
|
-
*
|
|
5
|
-
* Usually added to a Movable* class through
|
|
6
|
-
* InteractiveUtils.addMovableHelperMethodsTo(), but these implementations
|
|
7
|
-
* are simply for convenience.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import {point as kpoint} from "@khanacademy/kmath";
|
|
11
|
-
import _ from "underscore";
|
|
12
|
-
|
|
13
|
-
import {Errors} from "../logging/log";
|
|
14
|
-
import {PerseusError} from "../perseus-error";
|
|
15
|
-
|
|
16
|
-
/* Local helper methods. */
|
|
17
|
-
|
|
18
|
-
function getKey(eventName: any, id: any) {
|
|
19
|
-
return eventName + ":" + id;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function getEventName(key) {
|
|
23
|
-
return key.split(":")[0];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const MovableHelperMethods: any = {
|
|
27
|
-
/**
|
|
28
|
-
* Fire an onSomething type event to all functions in listeners
|
|
29
|
-
*/
|
|
30
|
-
_fireEvent: function <F extends (...args: any[]) => any>(
|
|
31
|
-
listeners: F[],
|
|
32
|
-
...args: Parameters<F>
|
|
33
|
-
) {
|
|
34
|
-
for (const listener of listeners) {
|
|
35
|
-
listener.call(this, ...args);
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Combine the array of constraints functions
|
|
41
|
-
* Returns either an [x, y] coordinate or false
|
|
42
|
-
*/
|
|
43
|
-
_applyConstraints: function (current, previous, extraOptions) {
|
|
44
|
-
let skipRemaining = false;
|
|
45
|
-
|
|
46
|
-
return _.reduce(
|
|
47
|
-
this.state.constraints,
|
|
48
|
-
(memo, constraint) => {
|
|
49
|
-
// A move that has been cancelled won't be propagated to later
|
|
50
|
-
// constraints calls
|
|
51
|
-
if (memo === false) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (skipRemaining) {
|
|
56
|
-
return memo;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const result = constraint.call(this, memo, previous, {
|
|
60
|
-
onSkipRemaining: () => {
|
|
61
|
-
skipRemaining = true;
|
|
62
|
-
},
|
|
63
|
-
...extraOptions,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
if (result === false) {
|
|
67
|
-
// Returning false cancels the move
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
if (kpoint.is(result, 2)) {
|
|
71
|
-
// Returning a coord from constraints overrides the move
|
|
72
|
-
return result;
|
|
73
|
-
}
|
|
74
|
-
if (result === true || result == null) {
|
|
75
|
-
// Returning true or undefined allow the move to occur
|
|
76
|
-
return memo;
|
|
77
|
-
}
|
|
78
|
-
// Anything else is an error
|
|
79
|
-
throw new PerseusError(
|
|
80
|
-
"Constraint returned invalid result: " + result,
|
|
81
|
-
Errors.Internal,
|
|
82
|
-
);
|
|
83
|
-
},
|
|
84
|
-
current,
|
|
85
|
-
this,
|
|
86
|
-
);
|
|
87
|
-
},
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Call all draw functions, and update our prevState for the next
|
|
91
|
-
* draw function
|
|
92
|
-
*/
|
|
93
|
-
draw: function () {
|
|
94
|
-
const currState = this.cloneState();
|
|
95
|
-
MovableHelperMethods._fireEvent.call(
|
|
96
|
-
this,
|
|
97
|
-
this.state.draw,
|
|
98
|
-
currState,
|
|
99
|
-
this.prevState,
|
|
100
|
-
);
|
|
101
|
-
this.prevState = currState;
|
|
102
|
-
},
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Add a listener to any event: startMove, constraints, onMove, onMoveEnd,
|
|
106
|
-
* etc. If a listener is already bound to the given eventName and id, then
|
|
107
|
-
* it is overwritten by func.
|
|
108
|
-
*
|
|
109
|
-
* eventName: the string name of the event to listen to. one of:
|
|
110
|
-
* "onMoveStart", "onMove", "onMoveEnd", "draw", "remove"
|
|
111
|
-
*
|
|
112
|
-
* id: a string id that can be used to remove this event at a later time
|
|
113
|
-
* note: adding multiple listeners with the same id is undefined behavior
|
|
114
|
-
*
|
|
115
|
-
* func: the function to call when the event happens, which is called
|
|
116
|
-
* with the event's standard parameters [usually (coord, prevCoord) or
|
|
117
|
-
* (state, prevState)]
|
|
118
|
-
*/
|
|
119
|
-
listen: function (eventName, id, func) {
|
|
120
|
-
this._listenerMap = this._listenerMap || {};
|
|
121
|
-
|
|
122
|
-
// If there's an existing handler, replace it by using its index in
|
|
123
|
-
// `this.state[eventName]`; otherwise, add this handler to the end
|
|
124
|
-
const key = getKey(eventName, id);
|
|
125
|
-
const index = (this._listenerMap[key] =
|
|
126
|
-
this._listenerMap[key] || this.state[eventName].length);
|
|
127
|
-
this.state[eventName][index] = func;
|
|
128
|
-
},
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Remove a previously added listener, by the id specified in the
|
|
132
|
-
* corresponding listen() call
|
|
133
|
-
*
|
|
134
|
-
* If the given id has not been registered already, this is a no-op
|
|
135
|
-
*/
|
|
136
|
-
unlisten: function (eventName, id) {
|
|
137
|
-
this._listenerMap = this._listenerMap || {};
|
|
138
|
-
|
|
139
|
-
const key = getKey(eventName, id);
|
|
140
|
-
const index = this._listenerMap[key];
|
|
141
|
-
if (index !== undefined) {
|
|
142
|
-
// Remove handler from list of event handlers and listenerMap
|
|
143
|
-
this.state[eventName].splice(index, 1);
|
|
144
|
-
delete this._listenerMap[key];
|
|
145
|
-
|
|
146
|
-
// Re-index existing events: if they occur after `index`, decrement
|
|
147
|
-
const keys = _.keys(this._listenerMap);
|
|
148
|
-
_.each(
|
|
149
|
-
keys,
|
|
150
|
-
function (key) {
|
|
151
|
-
if (
|
|
152
|
-
getEventName(key) === eventName &&
|
|
153
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
154
|
-
this._listenerMap[key] > index
|
|
155
|
-
) {
|
|
156
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
157
|
-
this._listenerMap[key]--;
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
this,
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
export default MovableHelperMethods;
|