@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,410 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react/no-unsafe */
|
|
2
|
-
/**
|
|
3
|
-
* A generic tooltip library for React.js
|
|
4
|
-
*
|
|
5
|
-
* This should eventually end up in react-components
|
|
6
|
-
*
|
|
7
|
-
* Interface: ({a, b} means one of a or b)
|
|
8
|
-
* import Tooltip from "./tooltip";
|
|
9
|
-
* <Tooltip
|
|
10
|
-
* className="class-for-tooltip-contents"
|
|
11
|
-
* horizontalPosition={HoriziontalDirection.Left}
|
|
12
|
-
* horizontalAlign={HoriziontalDirection.Left}
|
|
13
|
-
* verticalPosition={VerticalDirection.Top}
|
|
14
|
-
* arrowSize={10} // arrow size in pixels
|
|
15
|
-
* borderColor="#ccc" // color of the border for the tooltip
|
|
16
|
-
* show={true} // whether the tooltip should currently be visible
|
|
17
|
-
* targetContainerStyle={targetContainerStyle}
|
|
18
|
-
* >
|
|
19
|
-
* <TargetElementOfTheTooltip />
|
|
20
|
-
* <TooltipContents1 />
|
|
21
|
-
* <TooltipContents2 />
|
|
22
|
-
* </Tooltip>
|
|
23
|
-
*
|
|
24
|
-
* To show/hide the tooltip, the parent component should call the
|
|
25
|
-
* .show() and .hide() methods of the tooltip when appropriate.
|
|
26
|
-
* (These are usually set up as handlers of events on the target element.)
|
|
27
|
-
*
|
|
28
|
-
* Notes:
|
|
29
|
-
* className should not specify a border; that is handled by borderColor
|
|
30
|
-
* so that the arrow and tooltip match
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
// __,,--``\\
|
|
34
|
-
// _,,-''`` \\ ,
|
|
35
|
-
// '----------_.------'-.___|\__
|
|
36
|
-
// _.--''`` `)__ )__ @\__
|
|
37
|
-
// ( .. ''---/___,,E/__,E'------`
|
|
38
|
-
// `-''`''
|
|
39
|
-
// Here be dragons.
|
|
40
|
-
|
|
41
|
-
// TODO(joel/aria) fix z-index issues https://s3.amazonaws.com/uploads.hipchat.com/6574/29028/yOApjwmgiMhEZYJ/Screen%20Shot%202014-05-30%20at%203.34.18%20PM.png
|
|
42
|
-
// z-index: 3 on perseus-formats-tooltip seemed to work
|
|
43
|
-
|
|
44
|
-
import * as React from "react";
|
|
45
|
-
import ReactDOM from "react-dom";
|
|
46
|
-
|
|
47
|
-
import type {Property} from "csstype";
|
|
48
|
-
|
|
49
|
-
const zIndex = 10;
|
|
50
|
-
|
|
51
|
-
export enum HorizontalDirection {
|
|
52
|
-
Left = "left",
|
|
53
|
-
Right = "right",
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export enum VerticalDirection {
|
|
57
|
-
Top = "top",
|
|
58
|
-
Bottom = "bottom",
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
type TriangleProps = {
|
|
62
|
-
color: string;
|
|
63
|
-
left: number;
|
|
64
|
-
top: number;
|
|
65
|
-
width: number;
|
|
66
|
-
height: number;
|
|
67
|
-
horizontalDirection: HorizontalDirection;
|
|
68
|
-
verticalDirection: VerticalDirection;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const Triangle = (props: TriangleProps) => {
|
|
72
|
-
let borderLeft;
|
|
73
|
-
let borderRight;
|
|
74
|
-
let borderTop;
|
|
75
|
-
let borderBottom;
|
|
76
|
-
|
|
77
|
-
const hBorder = `${props.width}px solid transparent`;
|
|
78
|
-
if (props.horizontalDirection === "right") {
|
|
79
|
-
borderLeft = hBorder;
|
|
80
|
-
} else {
|
|
81
|
-
borderRight = hBorder;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const vBorder = `${props.height}px solid ${props.color}`;
|
|
85
|
-
if (props.verticalDirection === "top") {
|
|
86
|
-
borderTop = vBorder;
|
|
87
|
-
} else {
|
|
88
|
-
borderBottom = vBorder;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<div
|
|
93
|
-
style={{
|
|
94
|
-
display: "block",
|
|
95
|
-
height: 0,
|
|
96
|
-
width: 0,
|
|
97
|
-
position: "absolute",
|
|
98
|
-
left: props.left,
|
|
99
|
-
top: props["top"],
|
|
100
|
-
borderLeft: borderLeft,
|
|
101
|
-
borderRight: borderRight,
|
|
102
|
-
borderTop: borderTop,
|
|
103
|
-
borderBottom: borderBottom,
|
|
104
|
-
}}
|
|
105
|
-
/>
|
|
106
|
-
);
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
type TooltipArrowProps = {
|
|
110
|
-
position: Property.Position;
|
|
111
|
-
visibility: Property.Visibility;
|
|
112
|
-
left: number;
|
|
113
|
-
top: number;
|
|
114
|
-
color: string; // a css color
|
|
115
|
-
border: string; // a css color
|
|
116
|
-
width: number;
|
|
117
|
-
height: number;
|
|
118
|
-
horizontalDirection: HorizontalDirection;
|
|
119
|
-
verticalDirection: VerticalDirection;
|
|
120
|
-
zIndex?: number;
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const TooltipArrow = (props: TooltipArrowProps) => {
|
|
124
|
-
// TODO(aria): Think about adding a box-shadow to the triangle here
|
|
125
|
-
// See http://css-tricks.com/triangle-with-shadow/
|
|
126
|
-
|
|
127
|
-
//const isRight = (this.props.horizontalDirection === "right");
|
|
128
|
-
const isTop = props.verticalDirection === "top";
|
|
129
|
-
|
|
130
|
-
const frontTopOffset = isTop ? 0 : 1;
|
|
131
|
-
const borderTopOffset = isTop ? 0 : -1;
|
|
132
|
-
|
|
133
|
-
return (
|
|
134
|
-
<div
|
|
135
|
-
style={{
|
|
136
|
-
display: "block",
|
|
137
|
-
position: props.position,
|
|
138
|
-
visibility: props.visibility,
|
|
139
|
-
left: props.left,
|
|
140
|
-
top: props["top"],
|
|
141
|
-
width: props.width + 2,
|
|
142
|
-
height: props.height + 1,
|
|
143
|
-
marginTop: -1,
|
|
144
|
-
marginBottom: -2,
|
|
145
|
-
zIndex: zIndex,
|
|
146
|
-
}}
|
|
147
|
-
>
|
|
148
|
-
{/* The background triangle used to create the effect of a
|
|
149
|
-
border around the foreground triangle*/}
|
|
150
|
-
<Triangle
|
|
151
|
-
horizontalDirection={props.horizontalDirection}
|
|
152
|
-
verticalDirection={props.verticalDirection}
|
|
153
|
-
color={props.border}
|
|
154
|
-
left={0}
|
|
155
|
-
top={borderTopOffset}
|
|
156
|
-
width={props.width + 2} // one extra for the diagonal
|
|
157
|
-
height={props.height + 2}
|
|
158
|
-
/>
|
|
159
|
-
{/* The foreground triangle covers all but the left/right edges
|
|
160
|
-
of the background triangle */}
|
|
161
|
-
<Triangle
|
|
162
|
-
horizontalDirection={props.horizontalDirection}
|
|
163
|
-
verticalDirection={props.verticalDirection}
|
|
164
|
-
color={props.color}
|
|
165
|
-
left={1}
|
|
166
|
-
top={frontTopOffset}
|
|
167
|
-
width={props.width}
|
|
168
|
-
height={props.height}
|
|
169
|
-
/>
|
|
170
|
-
</div>
|
|
171
|
-
);
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
TooltipArrow.defaultProps = {
|
|
175
|
-
position: "relative",
|
|
176
|
-
visibility: "visible",
|
|
177
|
-
left: 0,
|
|
178
|
-
top: 0,
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
const VERTICAL_CORNERS = {
|
|
182
|
-
top: {
|
|
183
|
-
top: "-100%",
|
|
184
|
-
},
|
|
185
|
-
bottom: {
|
|
186
|
-
top: 0,
|
|
187
|
-
},
|
|
188
|
-
} as const;
|
|
189
|
-
|
|
190
|
-
const HORIZONTAL_CORNERS = {
|
|
191
|
-
left: {
|
|
192
|
-
targetLeft: 0,
|
|
193
|
-
},
|
|
194
|
-
|
|
195
|
-
right: {
|
|
196
|
-
targetLeft: "100%",
|
|
197
|
-
},
|
|
198
|
-
} as const;
|
|
199
|
-
|
|
200
|
-
const HORIZONTAL_ALIGNMNENTS = {
|
|
201
|
-
left: {
|
|
202
|
-
tooltipLeft: 0,
|
|
203
|
-
arrowLeft: (arrowSize) => 0,
|
|
204
|
-
},
|
|
205
|
-
right: {
|
|
206
|
-
tooltipLeft: "-100%",
|
|
207
|
-
arrowLeft: (arrowSize) => -arrowSize - 2,
|
|
208
|
-
},
|
|
209
|
-
} as const;
|
|
210
|
-
|
|
211
|
-
type Props = {
|
|
212
|
-
show: boolean;
|
|
213
|
-
className: string;
|
|
214
|
-
arrowSize: number;
|
|
215
|
-
borderColor: string;
|
|
216
|
-
verticalPosition: VerticalDirection;
|
|
217
|
-
horizontalPosition: HorizontalDirection;
|
|
218
|
-
horizontalAlign: HorizontalDirection.Left;
|
|
219
|
-
children: React.ReactNode;
|
|
220
|
-
targetContainerStyle: any; // style object
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
type DefaultProps = {
|
|
224
|
-
className: Props["className"];
|
|
225
|
-
arrowSize: Props["arrowSize"];
|
|
226
|
-
borderColor: Props["borderColor"];
|
|
227
|
-
verticalPosition: Props["verticalPosition"];
|
|
228
|
-
horizontalPosition: Props["horizontalPosition"];
|
|
229
|
-
horizontalAlign: Props["horizontalAlign"];
|
|
230
|
-
targetContainerStyle: Props["targetContainerStyle"];
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
type State = {
|
|
234
|
-
height: number | null;
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
class Tooltip extends React.Component<Props, State> {
|
|
238
|
-
static defaultProps: DefaultProps = {
|
|
239
|
-
className: "",
|
|
240
|
-
arrowSize: 10,
|
|
241
|
-
borderColor: "#ccc",
|
|
242
|
-
verticalPosition: VerticalDirection.Bottom,
|
|
243
|
-
horizontalPosition: HorizontalDirection.Left,
|
|
244
|
-
horizontalAlign: HorizontalDirection.Left,
|
|
245
|
-
targetContainerStyle: {},
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
state: State = {
|
|
249
|
-
height: null, // used for offsetting "top" positioned tooltips
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
componentDidMount() {
|
|
253
|
-
this._updateHeight();
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
UNSAFE_componentWillReceiveProps() {
|
|
257
|
-
// If the contents have changed, reset our measure of the height
|
|
258
|
-
this.setState({height: null});
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
componentDidUpdate() {
|
|
262
|
-
this._updateHeight();
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
_renderToolTipDiv(isTooltipAbove?: boolean) {
|
|
266
|
-
const settings = Object.assign(
|
|
267
|
-
{},
|
|
268
|
-
HORIZONTAL_CORNERS[this.props.horizontalPosition],
|
|
269
|
-
HORIZONTAL_ALIGNMNENTS[this.props.horizontalAlign],
|
|
270
|
-
VERTICAL_CORNERS[this.props.verticalPosition],
|
|
271
|
-
);
|
|
272
|
-
|
|
273
|
-
let arrowAbove;
|
|
274
|
-
let arrowBelow;
|
|
275
|
-
|
|
276
|
-
if (isTooltipAbove) {
|
|
277
|
-
// We put an absolutely positioned arrow in the correct place
|
|
278
|
-
arrowAbove = (
|
|
279
|
-
<TooltipArrow
|
|
280
|
-
verticalDirection={VerticalDirection.Top}
|
|
281
|
-
horizontalDirection={this.props.horizontalAlign}
|
|
282
|
-
position="absolute"
|
|
283
|
-
color="white"
|
|
284
|
-
border={this.props.borderColor}
|
|
285
|
-
left={settings.arrowLeft(this.props.arrowSize)}
|
|
286
|
-
top={-this.props.arrowSize + 2}
|
|
287
|
-
width={this.props.arrowSize}
|
|
288
|
-
height={this.props.arrowSize}
|
|
289
|
-
zIndex={zIndex}
|
|
290
|
-
/>
|
|
291
|
-
);
|
|
292
|
-
|
|
293
|
-
// And we use a visibility: hidden arrow below to shift up the
|
|
294
|
-
// content by the correct amount
|
|
295
|
-
arrowBelow = (
|
|
296
|
-
<TooltipArrow
|
|
297
|
-
verticalDirection={VerticalDirection.Top}
|
|
298
|
-
horizontalDirection={this.props.horizontalAlign}
|
|
299
|
-
visibility="hidden"
|
|
300
|
-
color="white"
|
|
301
|
-
border={this.props.borderColor}
|
|
302
|
-
left={settings.arrowLeft(this.props.arrowSize)}
|
|
303
|
-
top={-1}
|
|
304
|
-
width={this.props.arrowSize}
|
|
305
|
-
height={this.props.arrowSize}
|
|
306
|
-
zIndex={zIndex}
|
|
307
|
-
/>
|
|
308
|
-
);
|
|
309
|
-
} else {
|
|
310
|
-
arrowAbove = (
|
|
311
|
-
<TooltipArrow
|
|
312
|
-
verticalDirection={VerticalDirection.Bottom}
|
|
313
|
-
horizontalDirection={this.props.horizontalAlign}
|
|
314
|
-
color="white"
|
|
315
|
-
border={this.props.borderColor}
|
|
316
|
-
left={settings.arrowLeft(this.props.arrowSize)}
|
|
317
|
-
top={-1}
|
|
318
|
-
width={this.props.arrowSize}
|
|
319
|
-
height={this.props.arrowSize}
|
|
320
|
-
zIndex={zIndex}
|
|
321
|
-
/>
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
arrowBelow = null;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/* A positioned div below the input to be the parent for our
|
|
328
|
-
tooltip */
|
|
329
|
-
return (
|
|
330
|
-
<div
|
|
331
|
-
style={{
|
|
332
|
-
position: "relative",
|
|
333
|
-
height: 0,
|
|
334
|
-
display: this.props.show ? "block" : "none",
|
|
335
|
-
}}
|
|
336
|
-
>
|
|
337
|
-
<div
|
|
338
|
-
// eslint-disable-next-line react/no-string-refs
|
|
339
|
-
ref="tooltipContainer"
|
|
340
|
-
className="tooltipContainer"
|
|
341
|
-
style={{
|
|
342
|
-
position: "absolute",
|
|
343
|
-
// height must start out undefined, not null, so that
|
|
344
|
-
// we can measure the actual height with jquery.
|
|
345
|
-
// This is used to position the tooltip with top: -100%
|
|
346
|
-
// when in verticalPosition: "top" mode
|
|
347
|
-
height: this.state.height || undefined,
|
|
348
|
-
left: settings.targetLeft,
|
|
349
|
-
}}
|
|
350
|
-
>
|
|
351
|
-
{arrowAbove}
|
|
352
|
-
|
|
353
|
-
{/* The contents of the tooltip */}
|
|
354
|
-
<div
|
|
355
|
-
className={this.props.className}
|
|
356
|
-
// eslint-disable-next-line react/no-string-refs
|
|
357
|
-
ref="tooltipContent"
|
|
358
|
-
style={{
|
|
359
|
-
position: "relative",
|
|
360
|
-
top: settings["top"],
|
|
361
|
-
left: settings.tooltipLeft,
|
|
362
|
-
border: "1px solid " + this.props.borderColor,
|
|
363
|
-
boxShadow: "0 1px 3px " + this.props.borderColor,
|
|
364
|
-
zIndex: zIndex - 1,
|
|
365
|
-
}}
|
|
366
|
-
>
|
|
367
|
-
{/* @ts-expect-error TS2533 - First child is target, rest is tooltip content */}
|
|
368
|
-
{this.props.children.slice(1)}
|
|
369
|
-
</div>
|
|
370
|
-
|
|
371
|
-
{arrowBelow}
|
|
372
|
-
</div>
|
|
373
|
-
</div>
|
|
374
|
-
);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
_updateHeight() {
|
|
378
|
-
const tooltipContainer = ReactDOM.findDOMNode(
|
|
379
|
-
// eslint-disable-next-line react/no-string-refs
|
|
380
|
-
this.refs.tooltipContainer,
|
|
381
|
-
) as HTMLDivElement;
|
|
382
|
-
const height = tooltipContainer.offsetHeight;
|
|
383
|
-
if (height !== this.state.height) {
|
|
384
|
-
this.setState({height});
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
render() {
|
|
389
|
-
const isTooltipAbove = this.props.verticalPosition === "top";
|
|
390
|
-
|
|
391
|
-
/* We wrap the entire output in a span so that it displays inline */
|
|
392
|
-
return (
|
|
393
|
-
<span>
|
|
394
|
-
{isTooltipAbove && this._renderToolTipDiv(isTooltipAbove)}
|
|
395
|
-
|
|
396
|
-
{/* We wrap our input in a div so that we can put the tooltip in a
|
|
397
|
-
div above/below it */}
|
|
398
|
-
<div style={this.props.targetContainerStyle}>
|
|
399
|
-
{/* @ts-expect-error TS2533 - First child is target, rest is tooltip content */}
|
|
400
|
-
{this.props.children[0]}
|
|
401
|
-
</div>
|
|
402
|
-
|
|
403
|
-
{!isTooltipAbove && this._renderToolTipDiv()}
|
|
404
|
-
</span>
|
|
405
|
-
);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// Sorry. // Apology-Oriented-Programming
|
|
410
|
-
export default Tooltip;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
// eslint-disable-next-line import/no-named-as-default
|
|
4
|
-
import VisibilityObserver from "../visibility-observer";
|
|
5
|
-
|
|
6
|
-
import type {ScrollVisibility} from "../visibility-observer";
|
|
7
|
-
|
|
8
|
-
type StoryArgs = Record<any, any>;
|
|
9
|
-
|
|
10
|
-
type Story = {
|
|
11
|
-
title: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export default {
|
|
15
|
-
title: "Perseus/Components/Visibility Observer",
|
|
16
|
-
} as Story;
|
|
17
|
-
|
|
18
|
-
type Props = Record<any, any>;
|
|
19
|
-
type State = {
|
|
20
|
-
sectionVisibility: ScrollVisibility;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
class VisibilityTest extends React.Component<Props, State> {
|
|
24
|
-
state: State = {
|
|
25
|
-
sectionVisibility: "unknown",
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
handleVisibilityChanged = (visibility: ScrollVisibility) => {
|
|
29
|
-
this.setState({sectionVisibility: visibility});
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
render(): React.ReactNode {
|
|
33
|
-
const {sectionVisibility} = this.state;
|
|
34
|
-
|
|
35
|
-
const visibleText =
|
|
36
|
-
sectionVisibility === "visible" ? "Visible" : "Not Visible";
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<div>
|
|
40
|
-
<p>Visibility: {visibleText}</p>
|
|
41
|
-
|
|
42
|
-
<p>
|
|
43
|
-
{sectionVisibility === "hidden-above"
|
|
44
|
-
? "The Section IS UP HERE!!!"
|
|
45
|
-
: "---"}
|
|
46
|
-
</p>
|
|
47
|
-
|
|
48
|
-
<div
|
|
49
|
-
style={{
|
|
50
|
-
height: 150,
|
|
51
|
-
width: 800,
|
|
52
|
-
overflow: "scroll",
|
|
53
|
-
backgroundColor: "white",
|
|
54
|
-
// @ts-expect-error [FEI-5003] - TS2322 - Type '{ height: number; width: number; overflow: "scroll"; backgroundColor: "white"; scrollbars: string; }' is not assignable to type 'Properties<string | number, string & {}>'.
|
|
55
|
-
scrollbars: "visible",
|
|
56
|
-
}}
|
|
57
|
-
>
|
|
58
|
-
<p>
|
|
59
|
-
Ocicat american shorthair. Egyptian mau himalayan or
|
|
60
|
-
grimalkin maine coon cheetah lion but himalayan.
|
|
61
|
-
American bobtail lion kitten. Kitty bombay puma.
|
|
62
|
-
Savannah scottish fold for tabby but sphynx for bombay
|
|
63
|
-
kitten ragdoll. Puma russian blue yet singapura birman
|
|
64
|
-
and kitty russian blue. Egyptian mau cheetah, donskoy
|
|
65
|
-
for himalayan singapura abyssinian . Singapura
|
|
66
|
-
himalayan. Malkin abyssinian but balinese but bobcat.
|
|
67
|
-
Leopard puma, norwegian forest mouser and turkish
|
|
68
|
-
angora. Lynx bengal tiger. American shorthair. Donskoy
|
|
69
|
-
ragdoll. Siberian turkish angora cougar and russian
|
|
70
|
-
blue. Burmese savannah and siamese norwegian forest yet
|
|
71
|
-
cheetah himalayan lion. Ocelot kitten or munchkin but
|
|
72
|
-
kitten savannah. Cougar manx or russian blue american
|
|
73
|
-
shorthair so jaguar but havana brown. Cheetah havana
|
|
74
|
-
brown manx. Tiger thai american bobtail. Ragdoll bengal
|
|
75
|
-
yet kitten, bengal grimalkin scottish fold. Abyssinian
|
|
76
|
-
jaguar. Turkish angora bengal but kitty sphynx.{" "}
|
|
77
|
-
</p>
|
|
78
|
-
|
|
79
|
-
<VisibilityObserver
|
|
80
|
-
scrollParentIsNotBody={true}
|
|
81
|
-
onChange={this.handleVisibilityChanged}
|
|
82
|
-
>
|
|
83
|
-
<p
|
|
84
|
-
style={{
|
|
85
|
-
backgroundColor: "#eeddee",
|
|
86
|
-
fontWeight: "bold",
|
|
87
|
-
}}
|
|
88
|
-
>
|
|
89
|
-
American shorthair devonshire rex but cheetah and
|
|
90
|
-
ragdoll but bombay. Kitty. Tomcat cornish rex
|
|
91
|
-
donskoy but tom donskoy havana brown. Jaguar sphynx.
|
|
92
|
-
Cheetah kitty for kitty, but balinese . British
|
|
93
|
-
shorthair cheetah devonshire rex birman panther.
|
|
94
|
-
Kitten tabby but siamese, sphynx. Bombay maine coon
|
|
95
|
-
so lynx and donskoy kitten, but cougar. Sphynx
|
|
96
|
-
sphynx, so american bobtail or mouser or puma.
|
|
97
|
-
Mouser munchkin and ragdoll yet mouser cheetah
|
|
98
|
-
balinese . Egyptian mau siamese mouser, cougar
|
|
99
|
-
ragdoll. Persian birman tabby. Norwegian forest
|
|
100
|
-
norwegian forest cornish rex bengal. Panther bombay.
|
|
101
|
-
Kitty siamese ragdoll and egyptian mau. Tabby.
|
|
102
|
-
Cheetah havana brown, kitty for havana brown.
|
|
103
|
-
Cornish rex siberian russian blue so persian but
|
|
104
|
-
thai burmese. Maine coon puma. Lynx.
|
|
105
|
-
</p>
|
|
106
|
-
</VisibilityObserver>
|
|
107
|
-
|
|
108
|
-
<p>
|
|
109
|
-
Jaguar tom but himalayan birman. Turkish angora balinese
|
|
110
|
-
grimalkin but birman or kitty or munchkin. American
|
|
111
|
-
shorthair bobcat. Donskoy cornish rex malkin. Ocicat
|
|
112
|
-
tabby or siamese, birman. Devonshire rex tomcat yet thai
|
|
113
|
-
jaguar mouser and donskoy, lynx. Grimalkin bombay.{" "}
|
|
114
|
-
</p>
|
|
115
|
-
<p>
|
|
116
|
-
Eat grass, throw it back up mice and cats are fats i
|
|
117
|
-
like to pets them they like to meow back, cough furball
|
|
118
|
-
into food bowl then scratch owner for a new one purr as
|
|
119
|
-
loud as possible, be the most annoying cat that you can,
|
|
120
|
-
and, knock everything off the table, lick the other
|
|
121
|
-
cats. Furrier and even more furrier hairball cat is
|
|
122
|
-
love, cat is life so ooh, are those your $250 dollar
|
|
123
|
-
sandals? lemme use that as my litter box. Lick arm hair
|
|
124
|
-
love to play with owner's hair tie hunt anything that
|
|
125
|
-
moves. Destroy couch as revenge when in doubt, wash.
|
|
126
|
-
</p>
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
<p>
|
|
130
|
-
{sectionVisibility === "hidden-below"
|
|
131
|
-
? "The Section IS DOWN HERE!!!"
|
|
132
|
-
: "---"}
|
|
133
|
-
</p>
|
|
134
|
-
</div>
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export const AlertWhenNotVisible = (args: StoryArgs): React.ReactElement => {
|
|
140
|
-
return <VisibilityTest />;
|
|
141
|
-
};
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VisibilityObserver watches a target element for changes to visibility,
|
|
3
|
-
* relative to a given root node.
|
|
4
|
-
*
|
|
5
|
-
* When the target element entirely disappears, or partially reappears, the
|
|
6
|
-
* caller is notified via the `onVisibilityChange` callback.
|
|
7
|
-
*
|
|
8
|
-
* Potential visibility changes include:
|
|
9
|
-
* - Being scrolled out of view, by any scroll container between the target
|
|
10
|
-
* and the root.
|
|
11
|
-
* - Style changes to the target element or an ancestor, like `display: none`.
|
|
12
|
-
*
|
|
13
|
-
* The VisibilityObserver relies on the IntersectionObserver, which does not
|
|
14
|
-
* exist on Safari and is buggy on Edge. Instead, we will polyfill the
|
|
15
|
-
* IntersectionObserver on those platforms.
|
|
16
|
-
*
|
|
17
|
-
* TODO(mdr): Currently, we emulate the API of IntersectionObserver. It might
|
|
18
|
-
* be nicer to instead use a more React-y API: let `targetElement` be a
|
|
19
|
-
* required prop, and render the element only when it's present. Then, we
|
|
20
|
-
* can use React lifecycle methods to set-up/tear-down handlers. Not sure
|
|
21
|
-
* that's _actually_ a net win, though, in complexity or performance - but
|
|
22
|
-
* worth thinking about if this API is causing too much entanglement!
|
|
23
|
-
*/
|
|
24
|
-
// NOTE(jeresig): As of 2021-03-02 there are still a non-trivial number of
|
|
25
|
-
// pre-Safari 12.1 users and they need a polyfill for IntersectionObserver
|
|
26
|
-
// eslint-disable-next-line import/no-unassigned-import
|
|
27
|
-
import "intersection-observer";
|
|
28
|
-
|
|
29
|
-
export interface VisibilityObserver {
|
|
30
|
-
// Set the element whose visibility we're observing.
|
|
31
|
-
setTargetElement(targetElement: HTMLElement): void;
|
|
32
|
-
// Stop observing the previously-set target element, if any.
|
|
33
|
-
//
|
|
34
|
-
// When the target element unmounts, please call this method to clean up!
|
|
35
|
-
disconnect(): void;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
type VisibilityChangeCallback = (
|
|
39
|
-
isVisible: boolean,
|
|
40
|
-
rootBounds: DOMRectReadOnly,
|
|
41
|
-
) => void;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Create a new VisibilityObserver.
|
|
45
|
-
*/
|
|
46
|
-
export function createVisibilityObserver(
|
|
47
|
-
rootElement: HTMLElement | null | undefined,
|
|
48
|
-
onVisibilityChange: VisibilityChangeCallback,
|
|
49
|
-
rootMargin?: string,
|
|
50
|
-
): VisibilityObserver {
|
|
51
|
-
return new NativeVisibilityObserver(
|
|
52
|
-
rootElement,
|
|
53
|
-
onVisibilityChange,
|
|
54
|
-
rootMargin,
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* A VisibilityObserver that uses IntersectionObserver to leverage the
|
|
60
|
-
* browser's native ability to determine how much of an element is visible.
|
|
61
|
-
* https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
|
|
62
|
-
*/
|
|
63
|
-
class NativeVisibilityObserver implements VisibilityObserver {
|
|
64
|
-
_intersectionObserver: IntersectionObserver;
|
|
65
|
-
_onVisibilityChange: VisibilityChangeCallback;
|
|
66
|
-
|
|
67
|
-
constructor(
|
|
68
|
-
rootElement: HTMLElement | null | undefined,
|
|
69
|
-
onVisibilityChange: VisibilityChangeCallback,
|
|
70
|
-
rootMargin?: string,
|
|
71
|
-
) {
|
|
72
|
-
// Create an IntersectionObserver with a threshold of "epsilon", the
|
|
73
|
-
// smallest positive non-zero number. This means that, whenever the
|
|
74
|
-
// target element enters or exits total invisibility, the handler will
|
|
75
|
-
// be called.
|
|
76
|
-
this._intersectionObserver = new IntersectionObserver(
|
|
77
|
-
this._handleIntersection,
|
|
78
|
-
{
|
|
79
|
-
root: rootElement,
|
|
80
|
-
threshold: Number.EPSILON,
|
|
81
|
-
rootMargin,
|
|
82
|
-
},
|
|
83
|
-
);
|
|
84
|
-
this._onVisibilityChange = onVisibilityChange;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
_handleIntersection = (
|
|
88
|
-
entries: ReadonlyArray<IntersectionObserverEntry>,
|
|
89
|
-
) => {
|
|
90
|
-
// There should be exactly one entry, but let's be defensive and loop.
|
|
91
|
-
//
|
|
92
|
-
for (const entry of entries) {
|
|
93
|
-
// @ts-expect-error - TS2345 - Argument of type 'DOMRectReadOnly | null' is not assignable to parameter of type 'DOMRectReadOnly'.
|
|
94
|
-
this._onVisibilityChange(entry.isIntersecting, entry.rootBounds);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
setTargetElement(targetElement: HTMLElement) {
|
|
99
|
-
// Because this class only watches one element at a time, we disconnect
|
|
100
|
-
// from all other observed elements first, just in case.
|
|
101
|
-
this._intersectionObserver.disconnect();
|
|
102
|
-
this._intersectionObserver.observe(targetElement);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
disconnect() {
|
|
106
|
-
this._intersectionObserver.disconnect();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
// Utility for finding the scroll parent of a chile
|
|
2
|
-
// Taken and updated to our standards from
|
|
3
|
-
// https://github.com/olahol/scrollparent.js
|
|
4
|
-
|
|
5
|
-
const getParents = function (node: Node, parents): ReadonlyArray<Node> {
|
|
6
|
-
if (!node.parentNode) {
|
|
7
|
-
return parents;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
return getParents(node.parentNode, parents.concat([node]));
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const style = function (node: Element, prop) {
|
|
14
|
-
return getComputedStyle(node).getPropertyValue(prop);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const overflow = function (node: Element) {
|
|
18
|
-
return (
|
|
19
|
-
style(node, "overflow") +
|
|
20
|
-
style(node, "overflow-y") +
|
|
21
|
-
style(node, "overflow-x")
|
|
22
|
-
);
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const scroll = function (node: Element) {
|
|
26
|
-
return /(auto|scroll)/.test(overflow(node));
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const getScrollParent = function (
|
|
30
|
-
node: Element,
|
|
31
|
-
): Element | null | undefined {
|
|
32
|
-
if (!(node instanceof HTMLElement)) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const parents = node.parentNode ? getParents(node.parentNode, []) : [];
|
|
37
|
-
|
|
38
|
-
for (let i = 0; i < parents.length; i += 1) {
|
|
39
|
-
const element = parents[i] as Element;
|
|
40
|
-
if (scroll(element)) {
|
|
41
|
-
return element;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return document.documentElement;
|
|
46
|
-
};
|