@khanacademy/perseus 19.1.5 → 19.1.7
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/graph.d.ts +0 -1
- package/dist/components/graphie.d.ts +0 -1
- package/dist/es/index.js +319 -212
- package/dist/es/index.js.map +1 -1
- package/dist/index.js +338 -222
- package/dist/index.js.map +1 -1
- package/dist/interactive2/movable-point.d.ts +195 -1
- package/dist/interactive2/movable.d.ts +1 -1
- package/dist/interactive2/types.d.ts +4 -2
- package/dist/interactive2.d.ts +2 -1
- package/dist/server-item-renderer.d.ts +2 -2
- package/dist/util/graphie.d.ts +12 -2
- package/dist/widgets/expression.d.ts +6 -6
- package/package.json +11 -8
- package/.babelrc.js +0 -8
- package/.eslintrc.js +0 -12
- package/CHANGELOG.md +0 -1432
- 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 -400
- 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 -55
- package/src/interactive2/__tests__/movable-point.test.ts +0 -144
- 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 -224
- 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.test.ts +0 -249
- package/src/interactive2/movable.ts +0 -437
- package/src/interactive2/objective_.ts +0 -79
- package/src/interactive2/types.ts +0 -17
- 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 -1576
- package/src/util/interactive.ts +0 -4174
- 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,585 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates and adds a point to the graph that can be dragged around.
|
|
3
|
-
* It allows constraints on its movement and draws when moves happen.
|
|
4
|
-
*
|
|
5
|
-
* Options can be passed to the constructor to control how the point behaves:
|
|
6
|
-
* coord: [x, y]
|
|
7
|
-
* The initial position of the point
|
|
8
|
-
* pointSize:
|
|
9
|
-
* changes the size of the point. defaults to 4
|
|
10
|
-
* static: boolean
|
|
11
|
-
* draw the point, but don't let it be interactable
|
|
12
|
-
* cursor: "move", "pointer"
|
|
13
|
-
* css cursor for this point
|
|
14
|
-
* add: [function(state)]
|
|
15
|
-
* called immediately when this movablePoint is added
|
|
16
|
-
* default: apply any constraints and draw
|
|
17
|
-
* draw: [function(prevState, currentState)]
|
|
18
|
-
* drawing functions. default to [basic, highlight]
|
|
19
|
-
* remove: [function(state)]
|
|
20
|
-
* called when this movablePoint is removed
|
|
21
|
-
* onMoveStart: [function(coord)]
|
|
22
|
-
* called when this point is clicked on
|
|
23
|
-
* constraints: [function(coord)]
|
|
24
|
-
* called when this point is dragged
|
|
25
|
-
* return true or nothing to accept the move
|
|
26
|
-
* return false to cancel the move
|
|
27
|
-
* return an [x, y] coordinate to override the move
|
|
28
|
-
* onMove: [function(coord)]
|
|
29
|
-
* called after all constraints functions pass and the point
|
|
30
|
-
* is moved to a new location
|
|
31
|
-
* onMoveEnd: [function(coord)]
|
|
32
|
-
* called when the mouse is released from a click or move
|
|
33
|
-
* onClick: [function(coord)]
|
|
34
|
-
* called when someone mouses down, doesn't move the point,
|
|
35
|
-
* and mouses up.
|
|
36
|
-
* normalStyle:
|
|
37
|
-
* the raphael/graphie style of the point when not hovering
|
|
38
|
-
* highlightStyle:
|
|
39
|
-
* the raphael/graphie style of the point when hovering, if
|
|
40
|
-
* MovablePoint.draw.highlight is used
|
|
41
|
-
*
|
|
42
|
-
* This creates a MovablePoint object with the following methods:
|
|
43
|
-
* setCoord: [x, y]
|
|
44
|
-
* changes the point's coordinate
|
|
45
|
-
* draw:
|
|
46
|
-
* redraws the coord
|
|
47
|
-
* modify: {options}
|
|
48
|
-
* modifies the original options passed to the point
|
|
49
|
-
* remove:
|
|
50
|
-
* removes the point from graphie
|
|
51
|
-
*/
|
|
52
|
-
import {point as kpoint, vector as kvector} from "@khanacademy/kmath";
|
|
53
|
-
import * as React from "react";
|
|
54
|
-
import _ from "underscore";
|
|
55
|
-
|
|
56
|
-
import InlineIcon from "../components/inline-icon";
|
|
57
|
-
import {iconTrash} from "../icon-paths";
|
|
58
|
-
import KhanColors from "../util/colors";
|
|
59
|
-
import reactRender from "../util/react-render";
|
|
60
|
-
import Tex from "../util/tex";
|
|
61
|
-
|
|
62
|
-
import InteractiveUtil from "./interactive-util";
|
|
63
|
-
import MovablePointOptions from "./movable-point-options";
|
|
64
|
-
import objective_ from "./objective_";
|
|
65
|
-
import WrappedEllipse from "./wrapped-ellipse";
|
|
66
|
-
|
|
67
|
-
const assert = InteractiveUtil.assert;
|
|
68
|
-
const normalizeOptions = InteractiveUtil.normalizeOptions;
|
|
69
|
-
|
|
70
|
-
const {processMath} = Tex;
|
|
71
|
-
|
|
72
|
-
// Default "props" and "state". Both are added to this.state and
|
|
73
|
-
// receive magic getter methods (this.coord() etc).
|
|
74
|
-
// However, properties in DEFAULT_PROPS are updated on `modify()`,
|
|
75
|
-
// while those in DEFAULT_STATE persist and are not updated.
|
|
76
|
-
// Things that the user might want to change should be on "props",
|
|
77
|
-
// while things used to render the point should be on "state".
|
|
78
|
-
const DEFAULT_PROPS = {
|
|
79
|
-
coord: [0, 0],
|
|
80
|
-
pointSize: 4,
|
|
81
|
-
static: false,
|
|
82
|
-
cursor: "move",
|
|
83
|
-
normalStyle: null, // turned into an object in this.modify
|
|
84
|
-
highlightStyle: null, // likewise
|
|
85
|
-
shadow: false,
|
|
86
|
-
tooltip: false,
|
|
87
|
-
} as const;
|
|
88
|
-
const DEFAULT_STATE = {
|
|
89
|
-
added: false,
|
|
90
|
-
hasMoved: false,
|
|
91
|
-
visibleShape: null,
|
|
92
|
-
outOfBounds: false,
|
|
93
|
-
mouseTarget: null,
|
|
94
|
-
touchOffset: null,
|
|
95
|
-
} as const;
|
|
96
|
-
|
|
97
|
-
const tooltipResetFunctions: Array<() => void> = [];
|
|
98
|
-
|
|
99
|
-
const MovablePoint = function (graphie: any, movable: any, options: any) {
|
|
100
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
101
|
-
_.extend(this, {
|
|
102
|
-
graphie,
|
|
103
|
-
movable,
|
|
104
|
-
state: {
|
|
105
|
-
// Set here because this must be unique for each instance
|
|
106
|
-
id: _.uniqueId("movablePoint"),
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
// We only set DEFAULT_STATE once, here
|
|
111
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
112
|
-
this.modify(_.extend({}, DEFAULT_STATE, options));
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
_.extend(MovablePoint, MovablePointOptions);
|
|
116
|
-
InteractiveUtil.createGettersFor(
|
|
117
|
-
MovablePoint,
|
|
118
|
-
_.extend({}, DEFAULT_PROPS, DEFAULT_STATE),
|
|
119
|
-
);
|
|
120
|
-
InteractiveUtil.addMovableHelperMethodsTo(MovablePoint);
|
|
121
|
-
|
|
122
|
-
_.extend(MovablePoint.prototype, {
|
|
123
|
-
cloneState: function () {
|
|
124
|
-
return _.extend(this.movable.cloneState(), this.state);
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
_createDefaultState: function () {
|
|
128
|
-
return _.extend(
|
|
129
|
-
{
|
|
130
|
-
id: this.state.id,
|
|
131
|
-
},
|
|
132
|
-
normalizeOptions(
|
|
133
|
-
// Defaults are copied from MovablePointOptions.*.standard
|
|
134
|
-
// These defaults are set here instead of DEFAULT_PROPS/STATE
|
|
135
|
-
// because they:
|
|
136
|
-
// - are objects, not primitives (and need a deeper copy)
|
|
137
|
-
// - they don't need getters created for them
|
|
138
|
-
// TODO(jack): Consider "default" once we es3ify perseus
|
|
139
|
-
objective_.pluck(MovablePointOptions, "standard"),
|
|
140
|
-
|
|
141
|
-
// We only update props here, because we want things on state to
|
|
142
|
-
// be persistent, and updated appropriately in modify()
|
|
143
|
-
),
|
|
144
|
-
DEFAULT_PROPS,
|
|
145
|
-
);
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Resets the object to its state as if it were constructed with
|
|
150
|
-
* `options` originally. state not on DEFAULT_PROPS is maintained.
|
|
151
|
-
*
|
|
152
|
-
* Analogous to React.js's replaceProps
|
|
153
|
-
*/
|
|
154
|
-
modify: function (options) {
|
|
155
|
-
this.update(_.extend(this._createDefaultState(), options));
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Displays a tooltip above the point, replacing any previous contents. If
|
|
160
|
-
* there is no tooltip initialized, adds the tooltip.
|
|
161
|
-
*
|
|
162
|
-
* If the type of contents is string, the contents will be rendered with
|
|
163
|
-
* KaTeX. Otherwise, the content will be assumed to be a DOM node and will
|
|
164
|
-
* be appended inside the tooltip.
|
|
165
|
-
*/
|
|
166
|
-
_showTooltip: function (contents) {
|
|
167
|
-
if (!this._tooltip) {
|
|
168
|
-
this._tooltip = document.createElement("div");
|
|
169
|
-
this._tooltip.className = "tooltip-content";
|
|
170
|
-
this.state.visibleShape.wrapper.className = "tooltip";
|
|
171
|
-
this.state.visibleShape.wrapper.appendChild(this._tooltip);
|
|
172
|
-
|
|
173
|
-
// Only one tooltip should be displayed at a time, so store a list
|
|
174
|
-
// of all the tooltips initialized.
|
|
175
|
-
tooltipResetFunctions.push(() => {
|
|
176
|
-
if (this.state.added) {
|
|
177
|
-
this._hideTooltip();
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
if (this._tooltip.firstChild) {
|
|
183
|
-
this._tooltip.removeChild(this._tooltip.firstChild);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
this.state.visibleShape.wrapper.className = "tooltip visible";
|
|
187
|
-
this._tooltip.appendChild(document.createElement("span"));
|
|
188
|
-
|
|
189
|
-
if (typeof contents === "string") {
|
|
190
|
-
processMath(this._tooltip.firstChild, contents, false);
|
|
191
|
-
} else if (typeof contents === "function") {
|
|
192
|
-
contents(this._tooltip.firstChild);
|
|
193
|
-
} else {
|
|
194
|
-
this._tooltip.firstChild.appendChild(contents);
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
_hideTooltip: function () {
|
|
199
|
-
if (this._tooltip) {
|
|
200
|
-
// Without the visible class, tooltips have display: none set
|
|
201
|
-
this.state.visibleShape.wrapper.className = "tooltip";
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Adjusts constructor parameters without changing previous settings
|
|
207
|
-
* for any option not specified
|
|
208
|
-
*
|
|
209
|
-
* Analogous to React.js's setProps
|
|
210
|
-
*/
|
|
211
|
-
update: function (options) {
|
|
212
|
-
const self = this;
|
|
213
|
-
const graphie = self.graphie;
|
|
214
|
-
const state = _.extend(self.state, normalizeOptions(options));
|
|
215
|
-
|
|
216
|
-
assert(kpoint.is(state.coord));
|
|
217
|
-
|
|
218
|
-
// Default things inside the state.normalStyle object, because
|
|
219
|
-
// _.extend is not deep.
|
|
220
|
-
// We use _.extend instead of _.defaults because we don't want
|
|
221
|
-
// to modify the passed-in copy (especially if it's from
|
|
222
|
-
// DEFAULT_PROPS/STATE!)
|
|
223
|
-
const normalColor = state.static
|
|
224
|
-
? KhanColors.DYNAMIC
|
|
225
|
-
: KhanColors.INTERACTIVE;
|
|
226
|
-
state.normalStyle = _.extend(
|
|
227
|
-
{
|
|
228
|
-
fill: normalColor,
|
|
229
|
-
stroke: normalColor,
|
|
230
|
-
scale: 1,
|
|
231
|
-
},
|
|
232
|
-
state.normalStyle,
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
state.highlightStyle = _.extend(
|
|
236
|
-
{
|
|
237
|
-
fill: KhanColors.INTERACTING,
|
|
238
|
-
stroke: KhanColors.INTERACTING,
|
|
239
|
-
scale: 2,
|
|
240
|
-
},
|
|
241
|
-
state.highlightStyle,
|
|
242
|
-
);
|
|
243
|
-
|
|
244
|
-
if (!state.static) {
|
|
245
|
-
// the invisible shape in front of the point that gets mouse events
|
|
246
|
-
if (!state.mouseTarget) {
|
|
247
|
-
const center = self.state.coord;
|
|
248
|
-
const radii = graphie.unscaleVector(24);
|
|
249
|
-
const options = {
|
|
250
|
-
mouselayer: true,
|
|
251
|
-
padding: 0,
|
|
252
|
-
interactiveKindForTesting: "movable-point",
|
|
253
|
-
} as const;
|
|
254
|
-
state.mouseTarget = new WrappedEllipse(
|
|
255
|
-
graphie,
|
|
256
|
-
center,
|
|
257
|
-
radii,
|
|
258
|
-
options,
|
|
259
|
-
);
|
|
260
|
-
state.mouseTarget.attr({fill: "#000", opacity: 0.0});
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const showTrashTooltip = () => {
|
|
265
|
-
this._showTooltip((container) => {
|
|
266
|
-
reactRender(
|
|
267
|
-
<span style={{fontSize: "2em"}}>
|
|
268
|
-
<InlineIcon
|
|
269
|
-
{...iconTrash}
|
|
270
|
-
style={{
|
|
271
|
-
position: "static",
|
|
272
|
-
color: KhanColors.INTERACTIVE,
|
|
273
|
-
marginLeft: 9,
|
|
274
|
-
marginRight: 9,
|
|
275
|
-
}}
|
|
276
|
-
/>
|
|
277
|
-
</span>,
|
|
278
|
-
container,
|
|
279
|
-
);
|
|
280
|
-
});
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
// The starting coord of any move, sent to onMoveEnd as the previous
|
|
284
|
-
// value
|
|
285
|
-
let startCoord = state.coord;
|
|
286
|
-
|
|
287
|
-
// The Movable representing this movablePoint's representation
|
|
288
|
-
// This handles mouse events for us, which we propagate in
|
|
289
|
-
// onMove
|
|
290
|
-
self.movable.modify(
|
|
291
|
-
_.extend({}, state, {
|
|
292
|
-
add: null,
|
|
293
|
-
modify: null,
|
|
294
|
-
draw: self.draw.bind(self),
|
|
295
|
-
remove: null,
|
|
296
|
-
onMoveStart: (startMouseCoord) => {
|
|
297
|
-
state.hasMoved = false;
|
|
298
|
-
startCoord = state.coord;
|
|
299
|
-
|
|
300
|
-
// Save the offset between the cursor and the initial coordinate
|
|
301
|
-
// of the point. This is tracked so as to avoid locking the
|
|
302
|
-
// moving point to the user's finger on touch devices, which
|
|
303
|
-
// would obscure it, no matter how large we made the touch
|
|
304
|
-
// target. Instead, we respect the offset at which the point was
|
|
305
|
-
// grabbed for the entirety of the gesture, if it's a
|
|
306
|
-
// touch-based interaction.
|
|
307
|
-
if (state.touchOffset == null) {
|
|
308
|
-
const isMouse = !("ontouchstart" in window);
|
|
309
|
-
state.touchOffset = isMouse
|
|
310
|
-
? [0, 0]
|
|
311
|
-
: kvector.subtract(startCoord, startMouseCoord);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
const svgElem = state.visibleShape.wrapper;
|
|
315
|
-
if (state.shadow) {
|
|
316
|
-
const filter = "none";
|
|
317
|
-
svgElem.style.filter = filter;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
if (state.showHairlines) {
|
|
321
|
-
state.showHairlines(state.coord);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
tooltipResetFunctions.forEach((f) => f());
|
|
325
|
-
if (state.tooltip) {
|
|
326
|
-
if (state.xOnlyTooltip) {
|
|
327
|
-
this._showTooltip(`${state.coord[0]}`);
|
|
328
|
-
} else {
|
|
329
|
-
this._showTooltip(
|
|
330
|
-
`(${state.coord[0]}, ${state.coord[1]})`,
|
|
331
|
-
);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
if (state.shadow) {
|
|
335
|
-
const content =
|
|
336
|
-
svgElem.getElementsByClassName(
|
|
337
|
-
"tooltip-content",
|
|
338
|
-
)[0];
|
|
339
|
-
const filter =
|
|
340
|
-
"drop-shadow(0px 0px 5px rgba(0, 0, 0, 0.5))";
|
|
341
|
-
|
|
342
|
-
content.style.filter = filter;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
self._fireEvent(state.onMoveStart, startCoord, startCoord);
|
|
347
|
-
self.draw();
|
|
348
|
-
},
|
|
349
|
-
onMove: (mouseCoord, prevMouseCoord) => {
|
|
350
|
-
const transformedCoord = kvector.add(
|
|
351
|
-
mouseCoord,
|
|
352
|
-
state.touchOffset,
|
|
353
|
-
);
|
|
354
|
-
|
|
355
|
-
self.moveTo(transformedCoord);
|
|
356
|
-
|
|
357
|
-
if (state.showHairlines) {
|
|
358
|
-
if (!this.state.outOfBounds) {
|
|
359
|
-
state.showHairlines(state.coord);
|
|
360
|
-
} else {
|
|
361
|
-
state.hideHairlines();
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
if (state.tooltip) {
|
|
366
|
-
if (!this.state.outOfBounds) {
|
|
367
|
-
if (state.xOnlyTooltip) {
|
|
368
|
-
this._showTooltip(`${state.coord[0]}`);
|
|
369
|
-
} else {
|
|
370
|
-
this._showTooltip(
|
|
371
|
-
`(${state.coord[0]}, ${state.coord[1]})`,
|
|
372
|
-
);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
if (state.onRemove && this.state.outOfBounds) {
|
|
378
|
-
showTrashTooltip();
|
|
379
|
-
}
|
|
380
|
-
},
|
|
381
|
-
onMoveEnd: () => {
|
|
382
|
-
if (self.isHovering() && !state.hasMoved) {
|
|
383
|
-
self._fireEvent(state.onClick, state.coord, startCoord);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
const svgElem = state.visibleShape.wrapper;
|
|
387
|
-
|
|
388
|
-
if (state.shadow) {
|
|
389
|
-
const filter =
|
|
390
|
-
"drop-shadow(0px 0px 5px rgba(0, 0, 0, 0.5))";
|
|
391
|
-
svgElem.style.filter = filter;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
if (state.hideHairlines) {
|
|
395
|
-
state.hideHairlines();
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
if (state.hasMoved) {
|
|
399
|
-
this._hideTooltip();
|
|
400
|
-
} else if (state.onRemove) {
|
|
401
|
-
// If we haven't moved and we should be displaying trash
|
|
402
|
-
// tooltips.
|
|
403
|
-
showTrashTooltip();
|
|
404
|
-
|
|
405
|
-
const content =
|
|
406
|
-
svgElem.getElementsByClassName(
|
|
407
|
-
"tooltip-content",
|
|
408
|
-
)[0];
|
|
409
|
-
|
|
410
|
-
content.style.filter = "none";
|
|
411
|
-
|
|
412
|
-
this._tooltip.firstChild.addEventListener(
|
|
413
|
-
"touchstart",
|
|
414
|
-
(e) => {
|
|
415
|
-
// Prevent creation of a new point when the event is
|
|
416
|
-
// propagated up the DOM.
|
|
417
|
-
e.stopPropagation();
|
|
418
|
-
},
|
|
419
|
-
true,
|
|
420
|
-
);
|
|
421
|
-
|
|
422
|
-
this._tooltip.firstChild.addEventListener(
|
|
423
|
-
"touchend",
|
|
424
|
-
(e) => {
|
|
425
|
-
// Remove the point and prevent creation of a
|
|
426
|
-
// new point.
|
|
427
|
-
state.onRemove();
|
|
428
|
-
e.stopPropagation();
|
|
429
|
-
},
|
|
430
|
-
true,
|
|
431
|
-
);
|
|
432
|
-
} else if (state.tooltip) {
|
|
433
|
-
this._hideTooltip();
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
if (state.outOfBounds) {
|
|
437
|
-
state.onRemove();
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
self._fireEvent(state.onMoveEnd, state.coord, startCoord);
|
|
441
|
-
state.hasMoved = false;
|
|
442
|
-
state.touchOffset = null;
|
|
443
|
-
self.draw();
|
|
444
|
-
},
|
|
445
|
-
}),
|
|
446
|
-
);
|
|
447
|
-
|
|
448
|
-
// Trigger an add event if this hasn't been added before
|
|
449
|
-
if (!state.added) {
|
|
450
|
-
self.prevState = {};
|
|
451
|
-
self._fireEvent(state.add, self.cloneState(), self.prevState);
|
|
452
|
-
state.added = true;
|
|
453
|
-
|
|
454
|
-
// Update the state for `added` and in case the add event
|
|
455
|
-
// changed it
|
|
456
|
-
self.prevState = self.cloneState();
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
// Trigger a modify event
|
|
460
|
-
self._fireEvent(state.modify, self.cloneState(), self.prevState);
|
|
461
|
-
},
|
|
462
|
-
|
|
463
|
-
remove: function () {
|
|
464
|
-
this.state.added = false;
|
|
465
|
-
this._fireEvent(this.state.remove);
|
|
466
|
-
if (this.movable) {
|
|
467
|
-
this.movable.remove();
|
|
468
|
-
}
|
|
469
|
-
// TODO(jack): This should really be moved off of
|
|
470
|
-
// movablePoint.state and only kept on movable.state
|
|
471
|
-
this.state.mouseTarget = null;
|
|
472
|
-
},
|
|
473
|
-
|
|
474
|
-
constrain: function () {
|
|
475
|
-
const result = this._applyConstraints(this.coord(), this.coord());
|
|
476
|
-
if (kpoint.is(result)) {
|
|
477
|
-
this.setCoord(result);
|
|
478
|
-
}
|
|
479
|
-
return result !== false;
|
|
480
|
-
},
|
|
481
|
-
|
|
482
|
-
setCoord: function (coord) {
|
|
483
|
-
assert(kpoint.is(coord, 2));
|
|
484
|
-
this.state.coord = _.clone(coord);
|
|
485
|
-
this.draw();
|
|
486
|
-
},
|
|
487
|
-
|
|
488
|
-
setCoordConstrained: function (coord) {
|
|
489
|
-
assert(kpoint.is(coord, 2));
|
|
490
|
-
const result = this._applyConstraints(coord, this.coord());
|
|
491
|
-
if (result !== false) {
|
|
492
|
-
this.state.coord = _.clone(result);
|
|
493
|
-
this.draw();
|
|
494
|
-
}
|
|
495
|
-
},
|
|
496
|
-
|
|
497
|
-
moveTo: function (coord) {
|
|
498
|
-
// The caller has the option of adding an onMove() method to the
|
|
499
|
-
// movablePoint object we return as a sort of event handler
|
|
500
|
-
// By returning false from onMove(), the move can be vetoed,
|
|
501
|
-
// providing custom constraints on where the point can be moved.
|
|
502
|
-
// By returning array [x, y], the move can be overridden
|
|
503
|
-
|
|
504
|
-
const state = this.state;
|
|
505
|
-
|
|
506
|
-
this.state.outOfBounds = false;
|
|
507
|
-
const result = this._applyConstraints(
|
|
508
|
-
coord,
|
|
509
|
-
state.coord,
|
|
510
|
-
state.onRemove
|
|
511
|
-
? {
|
|
512
|
-
onOutOfBounds: () => {
|
|
513
|
-
this.state.outOfBounds = true;
|
|
514
|
-
},
|
|
515
|
-
}
|
|
516
|
-
: {},
|
|
517
|
-
);
|
|
518
|
-
|
|
519
|
-
if (result === false) {
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
|
-
if (kpoint.is(result)) {
|
|
523
|
-
coord = result;
|
|
524
|
-
}
|
|
525
|
-
if (!kpoint.equal(coord, state.coord)) {
|
|
526
|
-
const prevCoord = state.coord;
|
|
527
|
-
state.coord = coord;
|
|
528
|
-
state.hasMoved = true;
|
|
529
|
-
this._fireEvent(state.onMove, state.coord, prevCoord);
|
|
530
|
-
this.draw();
|
|
531
|
-
}
|
|
532
|
-
},
|
|
533
|
-
|
|
534
|
-
// Clone these for use with raphael, which modifies the input
|
|
535
|
-
// style parameters
|
|
536
|
-
normalStyle: function () {
|
|
537
|
-
return _.clone(this.state.normalStyle);
|
|
538
|
-
},
|
|
539
|
-
|
|
540
|
-
highlightStyle: function () {
|
|
541
|
-
return _.clone(this.state.highlightStyle);
|
|
542
|
-
},
|
|
543
|
-
|
|
544
|
-
// Change z-order to back
|
|
545
|
-
toBack: function () {
|
|
546
|
-
this.movable.toBack();
|
|
547
|
-
if (this.state.visibleShape) {
|
|
548
|
-
this.state.visibleShape.toBack();
|
|
549
|
-
}
|
|
550
|
-
},
|
|
551
|
-
|
|
552
|
-
// Change z-order to front
|
|
553
|
-
toFront: function () {
|
|
554
|
-
if (this.state.visibleShape) {
|
|
555
|
-
this.state.visibleShape.toFront();
|
|
556
|
-
}
|
|
557
|
-
this.movable.toFront();
|
|
558
|
-
},
|
|
559
|
-
|
|
560
|
-
/**
|
|
561
|
-
* Forwarding methods to this.movable:
|
|
562
|
-
*/
|
|
563
|
-
isHovering: function () {
|
|
564
|
-
return this.movable.isHovering();
|
|
565
|
-
},
|
|
566
|
-
|
|
567
|
-
isDragging: function () {
|
|
568
|
-
return this.movable.isDragging();
|
|
569
|
-
},
|
|
570
|
-
|
|
571
|
-
mouseTarget: function () {
|
|
572
|
-
return this.movable.mouseTarget();
|
|
573
|
-
},
|
|
574
|
-
|
|
575
|
-
grab: function (coord) {
|
|
576
|
-
// Provide an explicit touchOffset override, so that we track the user's
|
|
577
|
-
// finger when a point has been grabbed.
|
|
578
|
-
this.state.touchOffset = [0, 0];
|
|
579
|
-
|
|
580
|
-
this.movable.grab(coord);
|
|
581
|
-
this.moveTo(coord);
|
|
582
|
-
},
|
|
583
|
-
});
|
|
584
|
-
|
|
585
|
-
export default MovablePoint;
|