@khanacademy/perseus 0.0.1 → 0.2.1
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/.babelrc.js +1 -1
- package/CHANGELOG.md +29 -0
- package/dist/es/index.css +4361 -0
- package/dist/es/index.js +7 -1
- package/dist/es/index.js.map +1 -1
- package/dist/index.css +4361 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/strings.js +148 -46
- package/package.json +50 -4
- package/src/README.md +35 -0
- package/src/__stories__/item-renderer.stories.jsx +27 -0
- package/src/__stories__/server-item-renderer.stories.jsx +27 -0
- package/src/__testdata__/item-renderer_testdata.js +161 -0
- package/src/__testdata__/renderer_testdata.js +123 -0
- package/src/__tests__/__snapshots__/item-renderer_test.jsx.snap +233 -0
- package/src/__tests__/__snapshots__/perseus-markdown_test.jsx.snap +516 -0
- package/src/__tests__/__snapshots__/pure-markdown_test.js.snap +113 -0
- package/src/__tests__/__snapshots__/renderer_test.jsx.snap +576 -0
- package/src/__tests__/__snapshots__/server-item-renderer_test.jsx.snap +306 -0
- package/src/__tests__/a11y_test.jsx +304 -0
- package/src/__tests__/item-renderer_test.jsx +892 -0
- package/src/__tests__/mock-asset-loading-widget.jsx +57 -0
- package/src/__tests__/mock-widget.jsx +35 -0
- package/src/__tests__/perseus-markdown_test.jsx +747 -0
- package/src/__tests__/pure-markdown_test.js +552 -0
- package/src/__tests__/renderability_test.jsx +481 -0
- package/src/__tests__/renderer-api_test.jsx +333 -0
- package/src/__tests__/renderer_test.jsx +1792 -0
- package/src/__tests__/server-item-renderer_test.jsx +516 -0
- package/src/__tests__/test-items/image-item.js +25 -0
- package/src/__tests__/test-items/input-number-1-item.js +27 -0
- package/src/__tests__/test-items/input-number-2-item.js +39 -0
- package/src/__tests__/test-items/table-item.js +30 -0
- package/src/__tests__/tex-wrangler_test.js +83 -0
- package/src/__tests__/util_test.js +41 -0
- package/src/a11y.js +46 -0
- package/src/all-widgets.js +9 -0
- package/src/article-renderer.jsx +215 -0
- package/src/asset-context.js +30 -0
- package/src/basic-widgets.js +13 -0
- package/src/components/__stories__/button-group.stories.jsx +61 -0
- package/src/components/__stories__/fixed-to-responsive.stories.jsx +132 -0
- package/src/components/__stories__/graph.stories.jsx +27 -0
- package/src/components/__stories__/graphie.stories.jsx +28 -0
- package/src/components/__stories__/hud.stories.jsx +36 -0
- package/src/components/__stories__/icon.stories.jsx +56 -0
- package/src/components/__stories__/image-loader.stories.jsx +60 -0
- package/src/components/__stories__/info-tip.stories.jsx +33 -0
- package/src/components/__stories__/inline-icon.stories.jsx +39 -0
- package/src/components/__stories__/input-with-examples.stories.jsx +51 -0
- package/src/components/__stories__/lint.stories.jsx +40 -0
- package/src/components/__stories__/math-input.stories.jsx +29 -0
- package/src/components/__stories__/math-output.stories.jsx +24 -0
- package/src/components/__stories__/multi-button-group.stories.jsx +69 -0
- package/src/components/__stories__/number-input.stories.jsx +42 -0
- package/src/components/__stories__/possible-answers.stories.jsx +22 -0
- package/src/components/__stories__/prop-check-box.stories.jsx +62 -0
- package/src/components/__stories__/range-input.stories.jsx +28 -0
- package/src/components/__stories__/simple-keypad-input.stories.jsx +28 -0
- package/src/components/__stories__/sortable.stories.jsx +73 -0
- package/src/components/__stories__/stub-tag-editor.stories.jsx +44 -0
- package/src/components/__stories__/svg-image.stories.jsx +60 -0
- package/src/components/__stories__/tex.stories.jsx +18 -0
- package/src/components/__stories__/text-buttons.stories.jsx +51 -0
- package/src/components/__stories__/text-input.stories.jsx +34 -0
- package/src/components/__stories__/text-list-editor.stories.jsx +33 -0
- package/src/components/__stories__/zoomable-tex.stories.jsx +39 -0
- package/src/components/__stories__/zoomable.stories.jsx +40 -0
- package/src/components/__testdata__/sorter_testdata.js +20 -0
- package/src/components/__tests__/__snapshots__/sortable_test.jsx.snap +79 -0
- package/src/components/__tests__/__snapshots__/sorter_test.jsx.snap +297 -0
- package/src/components/__tests__/number-input_test.jsx +112 -0
- package/src/components/__tests__/sortable_test.jsx +234 -0
- package/src/components/__tests__/sorter_test.jsx +111 -0
- package/src/components/__tests__/zoomable_test.jsx +388 -0
- package/src/components/button-group.jsx +131 -0
- package/src/components/constants.js +15 -0
- package/src/components/fixed-to-responsive.jsx +164 -0
- package/src/components/graph.jsx +415 -0
- package/src/components/graphie-classes.jsx +148 -0
- package/src/components/graphie-movables.jsx +342 -0
- package/src/components/graphie.jsx +353 -0
- package/src/components/highlighting/highlightable-content.jsx +245 -0
- package/src/components/highlighting/highlights.js +208 -0
- package/src/components/highlighting/ranges.js +299 -0
- package/src/components/highlighting/types.js +73 -0
- package/src/components/highlighting/ui/highlight-renderer.jsx +179 -0
- package/src/components/highlighting/ui/highlight-set-renderer.jsx +190 -0
- package/src/components/highlighting/ui/highlight-tooltip.jsx +153 -0
- package/src/components/highlighting/ui/highlighting-ui.jsx +163 -0
- package/src/components/highlighting/ui/selection-tracker.jsx +195 -0
- package/src/components/highlighting/ui/types.js +21 -0
- package/src/components/highlighting/ui/util.js +166 -0
- package/src/components/highlighting/word-indexer.jsx +155 -0
- package/src/components/hud.jsx +179 -0
- package/src/components/icon.jsx +149 -0
- package/src/components/image-loader.jsx +175 -0
- package/src/components/info-tip/info-tip.jsx +146 -0
- package/src/components/info-tip.jsx +38 -0
- package/src/components/inline-icon.jsx +81 -0
- package/src/components/input-with-examples.jsx +231 -0
- package/src/components/lint.jsx +454 -0
- package/src/components/math-input.jsx +282 -0
- package/src/components/math-output.jsx +128 -0
- package/src/components/multi-button-group.jsx +137 -0
- package/src/components/new-tooltip/README.md +110 -0
- package/src/components/new-tooltip/__stories__/flexible-position.stories.jsx +437 -0
- package/src/components/new-tooltip/__stories__/new-tooltip.stories.jsx +665 -0
- package/src/components/new-tooltip/__stories__/tooltip-arrow.stories.jsx +70 -0
- package/src/components/new-tooltip/__stories__/tooltip-bubble.stories.jsx +98 -0
- package/src/components/new-tooltip/__tests__/style-constants_test.js +8 -0
- package/src/components/new-tooltip/__tests__/util_test.js +47 -0
- package/src/components/new-tooltip/flexible-position.jsx +182 -0
- package/src/components/new-tooltip/new-tooltip.jsx +399 -0
- package/src/components/new-tooltip/style-constants.js +13 -0
- package/src/components/new-tooltip/tooltip-arrow.jsx +184 -0
- package/src/components/new-tooltip/tooltip-bubble.jsx +223 -0
- package/src/components/new-tooltip/tooltip-portal.jsx +101 -0
- package/src/components/new-tooltip/tooltip-positioner.jsx +529 -0
- package/src/components/new-tooltip/types.js +183 -0
- package/src/components/new-tooltip/util.js +27 -0
- package/src/components/number-input.jsx +253 -0
- package/src/components/possible-answers.jsx +36 -0
- package/src/components/prop-check-box.jsx +80 -0
- package/src/components/range-input.jsx +61 -0
- package/src/components/simple-keypad-input.jsx +91 -0
- package/src/components/sortable.jsx +873 -0
- package/src/components/stub-tag-editor.jsx +54 -0
- package/src/components/svg-image.jsx +762 -0
- package/src/components/tex-buttons.jsx +322 -0
- package/src/components/tex.jsx +70 -0
- package/src/components/text-input.jsx +82 -0
- package/src/components/text-list-editor.jsx +157 -0
- package/src/components/tooltip.jsx +395 -0
- package/src/components/visibility-observer/__stories__/visibility-observer.stories.jsx +140 -0
- package/src/components/visibility-observer/get-scroll-parent.js +45 -0
- package/src/components/visibility-observer/visibility-observer.js +109 -0
- package/src/components/visibility-observer/visibility-observer.jsx +123 -0
- package/src/components/zoomable-tex.jsx +70 -0
- package/src/components/zoomable.jsx +304 -0
- package/src/components.js +17 -0
- package/src/dependencies.js +22 -0
- package/src/error-boundary.jsx +48 -0
- package/src/extra-widgets.js +75 -0
- package/src/gorgon/README +40 -0
- package/src/gorgon/__tests__/matcher_test.js +497 -0
- package/src/gorgon/__tests__/rule_test.js +101 -0
- package/src/gorgon/__tests__/rules_test.js +487 -0
- package/src/gorgon/__tests__/selector-parser_test.js +52 -0
- package/src/gorgon/__tests__/tree-transformer_test.js +446 -0
- package/src/gorgon/gorgon.js +290 -0
- package/src/gorgon/proptypes.js +29 -0
- package/src/gorgon/rule.js +413 -0
- package/src/gorgon/rules/absolute-url.js +24 -0
- package/src/gorgon/rules/all-rules.js +72 -0
- package/src/gorgon/rules/blockquoted-math.js +10 -0
- package/src/gorgon/rules/blockquoted-widget.js +10 -0
- package/src/gorgon/rules/double-spacing-after-terminal.js +12 -0
- package/src/gorgon/rules/extra-content-spacing.js +12 -0
- package/src/gorgon/rules/heading-level-1.js +14 -0
- package/src/gorgon/rules/heading-level-skip.js +20 -0
- package/src/gorgon/rules/heading-sentence-case.js +11 -0
- package/src/gorgon/rules/heading-title-case.js +63 -0
- package/src/gorgon/rules/image-alt-text.js +21 -0
- package/src/gorgon/rules/image-in-table.js +10 -0
- package/src/gorgon/rules/image-spaces-around-urls.js +35 -0
- package/src/gorgon/rules/image-widget.js +50 -0
- package/src/gorgon/rules/link-click-here.js +11 -0
- package/src/gorgon/rules/lint-utils.js +48 -0
- package/src/gorgon/rules/long-paragraph.js +14 -0
- package/src/gorgon/rules/math-adjacent.js +10 -0
- package/src/gorgon/rules/math-align-extra-break.js +11 -0
- package/src/gorgon/rules/math-align-linebreaks.js +43 -0
- package/src/gorgon/rules/math-empty.js +10 -0
- package/src/gorgon/rules/math-font-size.js +12 -0
- package/src/gorgon/rules/math-frac.js +10 -0
- package/src/gorgon/rules/math-nested.js +11 -0
- package/src/gorgon/rules/math-starts-with-space.js +12 -0
- package/src/gorgon/rules/math-text-empty.js +10 -0
- package/src/gorgon/rules/math-without-dollars.js +14 -0
- package/src/gorgon/rules/nested-lists.js +11 -0
- package/src/gorgon/rules/profanity.js +10 -0
- package/src/gorgon/rules/table-missing-cells.js +20 -0
- package/src/gorgon/rules/unbalanced-code-delimiters.js +14 -0
- package/src/gorgon/rules/unescaped-dollar.js +10 -0
- package/src/gorgon/rules/widget-in-table.js +10 -0
- package/src/gorgon/selector.js +506 -0
- package/src/gorgon/tree-transformer.js +588 -0
- package/src/hint-renderer.jsx +159 -0
- package/src/hints-renderer.jsx +359 -0
- package/src/icon-paths.js +120 -0
- package/src/index.js +149 -2
- package/src/init.js +49 -0
- package/src/interaction-tracker.js +60 -0
- package/src/interactive2/__tests__/movable-mock.js +48 -0
- package/src/interactive2/__tests__/movable-point_test.js +146 -0
- package/src/interactive2/interactive-util.js +152 -0
- package/src/interactive2/movable-helper-methods.js +160 -0
- package/src/interactive2/movable-line-options.js +392 -0
- package/src/interactive2/movable-line.js +322 -0
- package/src/interactive2/movable-point-options.js +190 -0
- package/src/interactive2/movable-point.jsx +603 -0
- package/src/interactive2/movable-polygon-options.js +351 -0
- package/src/interactive2/movable-polygon.js +368 -0
- package/src/interactive2/movable.js +273 -0
- package/src/interactive2/objective_.js +79 -0
- package/src/interactive2/types.js +3 -0
- package/src/interactive2/wrapped-defaults.js +86 -0
- package/src/interactive2/wrapped-ellipse.js +87 -0
- package/src/interactive2/wrapped-line.js +109 -0
- package/src/interactive2/wrapped-path.js +47 -0
- package/src/interactive2.js +91 -0
- package/src/item-renderer.jsx +518 -0
- package/src/item-version.js +12 -0
- package/src/jipt-paragraphs.js +44 -0
- package/src/jquery.mobile.vmouse.js +545 -0
- package/src/keypad-context.js +33 -0
- package/src/loading-context.js +20 -0
- package/src/logging/log.js +107 -0
- package/src/logging/log_test.js +41 -0
- package/src/mixins/changeable.jsx +115 -0
- package/src/mixins/editor-jsonify.jsx +13 -0
- package/src/mixins/provide-keypad.jsx +129 -0
- package/src/mixins/widget-jsonify-deprecated.jsx +23 -0
- package/src/mixins/widget-prop-blacklist.js +36 -0
- package/src/multi-items/__stories__/multi-renderer.stories.js +88 -0
- package/src/multi-items/__testdata__/multi-renderer_testdata.js +174 -0
- package/src/multi-items/__tests__/__snapshots__/multi-renderer_test.js.snap +994 -0
- package/src/multi-items/__tests__/items_test.js +245 -0
- package/src/multi-items/__tests__/multi-renderer_test.js +903 -0
- package/src/multi-items/__tests__/prop-type-builders_test.js +134 -0
- package/src/multi-items/__tests__/shapes_test.js +44 -0
- package/src/multi-items/__tests__/trees_test.js +316 -0
- package/src/multi-items/item-types.js +55 -0
- package/src/multi-items/items.js +176 -0
- package/src/multi-items/multi-renderer.jsx +543 -0
- package/src/multi-items/prop-type-builders.js +105 -0
- package/src/multi-items/shape-types.js +47 -0
- package/src/multi-items/shapes.js +53 -0
- package/src/multi-items/tree-types.js +42 -0
- package/src/multi-items/trees.js +345 -0
- package/src/multi-items.js +76 -0
- package/src/not-gorgon.js +129 -0
- package/src/perseus-api.jsx +270 -0
- package/src/perseus-env.js +26 -0
- package/src/perseus-error.js +19 -0
- package/src/perseus-markdown.jsx +433 -0
- package/src/perseus-types.js +1597 -0
- package/src/pure-markdown.js +347 -0
- package/src/question-paragraph.jsx +30 -0
- package/src/renderability.jsx +108 -0
- package/src/renderer.jsx +1932 -0
- package/src/server-item-renderer.jsx +467 -0
- package/src/sigfigs.jsx +492 -0
- package/src/styles/articles.less +748 -0
- package/src/styles/constants.js +119 -0
- package/src/styles/global-constants.js +350 -0
- package/src/styles/global-styles.js +307 -0
- package/src/styles/khan-exercise.css +1304 -0
- package/src/styles/media-queries.js +48 -0
- package/src/styles/perseus-renderer.less +1007 -0
- package/src/styles/shared.js +132 -0
- package/src/styles/util.less +47 -0
- package/src/styles/variables.boostrap.less +301 -0
- package/src/styles/variables.less +68 -0
- package/src/styles/variables.shared.less +356 -0
- package/src/styles/widgets/categorizer.less +39 -0
- package/src/styles/widgets/definition.less +86 -0
- package/src/styles/widgets/dropdown.less +3 -0
- package/src/styles/widgets/expression.less +147 -0
- package/src/styles/widgets/graded-group.less +36 -0
- package/src/styles/widgets/grapher.less +11 -0
- package/src/styles/widgets/group.less +19 -0
- package/src/styles/widgets/image.less +29 -0
- package/src/styles/widgets/interactive-graph.less +61 -0
- package/src/styles/widgets/label-image.less +41 -0
- package/src/styles/widgets/matcher.less +8 -0
- package/src/styles/widgets/matrix.less +120 -0
- package/src/styles/widgets/measurer.less +20 -0
- package/src/styles/widgets/orderer.less +97 -0
- package/src/styles/widgets/passage.less +151 -0
- package/src/styles/widgets/plotter.less +33 -0
- package/src/styles/widgets/radio.less +52 -0
- package/src/styles/widgets/reaction-diagram.less +35 -0
- package/src/styles/widgets/sequence.less +5 -0
- package/src/styles/widgets/sortable.less +127 -0
- package/src/styles/widgets/table.less +56 -0
- package/src/styles/widgets/transformer.less +28 -0
- package/src/styles/widgets/unit.less +14 -0
- package/src/tex-wrangler.js +176 -0
- package/src/traversal.jsx +141 -0
- package/src/types.js +538 -0
- package/src/util/a11y.js +24 -0
- package/src/util/answer-types.js +862 -0
- package/src/util/answer-types_test.js +115 -0
- package/src/util/colors.js +94 -0
- package/src/util/fix-passage-refs.jsx +122 -0
- package/src/util/graph-utils.js +16 -0
- package/src/util/graphie.js +1586 -0
- package/src/util/interactive.js +4078 -0
- package/src/util/katex-preprocess.js +16 -0
- package/src/util/math.js +296 -0
- package/src/util/mobile-native-utils.js +14 -0
- package/src/util/mobile-native-utils_test.js +24 -0
- package/src/util/register-all-widgets-for-testing.js +12 -0
- package/src/util/scroll-utils.js +162 -0
- package/src/util/sizing-utils.js +46 -0
- package/src/util/tex.js +203 -0
- package/src/util/url-utils.js +36 -0
- package/src/util.js +990 -0
- package/src/version.js +11 -0
- package/src/widget-container.jsx +174 -0
- package/src/widgets/__stories__/categorizer.stories.jsx +15 -0
- package/src/widgets/__stories__/cs-program.stories.jsx +15 -0
- package/src/widgets/__stories__/definition.stories.jsx +38 -0
- package/src/widgets/__stories__/dropdown.stories.jsx +15 -0
- package/src/widgets/__stories__/explanation.stories.jsx +19 -0
- package/src/widgets/__stories__/expression.stories.jsx +26 -0
- package/src/widgets/__stories__/graded-group-set.stories.jsx +32 -0
- package/src/widgets/__stories__/graded-group.stories.jsx +32 -0
- package/src/widgets/__stories__/grapher.stories.jsx +47 -0
- package/src/widgets/__stories__/group.stories.jsx +15 -0
- package/src/widgets/__stories__/iframe.stories.jsx +15 -0
- package/src/widgets/__stories__/image.stories.jsx +62 -0
- package/src/widgets/__stories__/input-number.stories.jsx +90 -0
- package/src/widgets/__stories__/interaction.stories.jsx +15 -0
- package/src/widgets/__stories__/interactive-graph.stories.jsx +61 -0
- package/src/widgets/__stories__/matcher.stories.jsx +15 -0
- package/src/widgets/__stories__/matrix.stories.jsx +15 -0
- package/src/widgets/__stories__/number-line.stories.jsx +15 -0
- package/src/widgets/__stories__/numeric-input.stories.jsx +19 -0
- package/src/widgets/__stories__/orderer.stories.jsx +15 -0
- package/src/widgets/__stories__/passage-ref.stories.jsx +19 -0
- package/src/widgets/__stories__/passage.stories.jsx +19 -0
- package/src/widgets/__stories__/radio.stories.jsx +82 -0
- package/src/widgets/__stories__/sorter.stories.jsx +15 -0
- package/src/widgets/__stories__/transformer.stories.jsx +15 -0
- package/src/widgets/__stories__/unit.stories.jsx +45 -0
- package/src/widgets/__stories__/video-transcript-link.stories.jsx +24 -0
- package/src/widgets/__stories__/video.stories.jsx +15 -0
- package/src/widgets/__testdata__/categorizer_testdata.js +50 -0
- package/src/widgets/__testdata__/cs-program_testdata.js +28 -0
- package/src/widgets/__testdata__/dropdown_testdata.js +34 -0
- package/src/widgets/__testdata__/explanation_testdata.js +56 -0
- package/src/widgets/__testdata__/expression_testdata.js +95 -0
- package/src/widgets/__testdata__/graded-group-set_testdata.js +358 -0
- package/src/widgets/__testdata__/graded-group_testdata.js +79 -0
- package/src/widgets/__testdata__/grapher_testdata.js +376 -0
- package/src/widgets/__testdata__/group_testdata.js +156 -0
- package/src/widgets/__testdata__/iframe_testdata.js +36 -0
- package/src/widgets/__testdata__/image_testdata.js +38 -0
- package/src/widgets/__testdata__/input-number_testdata.js +73 -0
- package/src/widgets/__testdata__/interaction_testdata.js +264 -0
- package/src/widgets/__testdata__/interactive-graph_testdata.js +646 -0
- package/src/widgets/__testdata__/matcher_testdata.js +34 -0
- package/src/widgets/__testdata__/matrix_testdata.js +29 -0
- package/src/widgets/__testdata__/number-line_testdata.js +31 -0
- package/src/widgets/__testdata__/numeric-input_testdata.js +266 -0
- package/src/widgets/__testdata__/orderer_testdata.js +58 -0
- package/src/widgets/__testdata__/passage-ref_testdata.js +41 -0
- package/src/widgets/__testdata__/passage_testdata.js +71 -0
- package/src/widgets/__testdata__/radio_testdata.js +210 -0
- package/src/widgets/__testdata__/sorter_testdata.js +20 -0
- package/src/widgets/__testdata__/transformer_testdata.js +109 -0
- package/src/widgets/__testdata__/video_testdata.js +22 -0
- package/src/widgets/__tests__/__snapshots__/categorizer_test.jsx.snap +928 -0
- package/src/widgets/__tests__/__snapshots__/cs-program_test.jsx.snap +75 -0
- package/src/widgets/__tests__/__snapshots__/definition_test.js.snap +99 -0
- package/src/widgets/__tests__/__snapshots__/dropdown_test.jsx.snap +143 -0
- package/src/widgets/__tests__/__snapshots__/explanation_test.js.snap +473 -0
- package/src/widgets/__tests__/__snapshots__/expression_test.jsx.snap +38 -0
- package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt_test.jsx.snap +754 -0
- package/src/widgets/__tests__/__snapshots__/graded-group-set_test.jsx.snap +310 -0
- package/src/widgets/__tests__/__snapshots__/graded-group_test.jsx.snap +863 -0
- package/src/widgets/__tests__/__snapshots__/grapher_test.jsx.snap +2880 -0
- package/src/widgets/__tests__/__snapshots__/group_test.jsx.snap +1154 -0
- package/src/widgets/__tests__/__snapshots__/iframe_test.jsx.snap +69 -0
- package/src/widgets/__tests__/__snapshots__/image_test.jsx.snap +388 -0
- package/src/widgets/__tests__/__snapshots__/input-number_test.jsx.snap +978 -0
- package/src/widgets/__tests__/__snapshots__/interaction_test.jsx.snap +311 -0
- package/src/widgets/__tests__/__snapshots__/interactive-graph_test.jsx.snap +2915 -0
- package/src/widgets/__tests__/__snapshots__/matcher_test.jsx.snap +1039 -0
- package/src/widgets/__tests__/__snapshots__/matrix_test.jsx.snap +450 -0
- package/src/widgets/__tests__/__snapshots__/number-line_test.jsx.snap +888 -0
- package/src/widgets/__tests__/__snapshots__/numeric-input_test.jsx.snap +930 -0
- package/src/widgets/__tests__/__snapshots__/orderer_test.jsx.snap +275 -0
- package/src/widgets/__tests__/__snapshots__/passage-ref_test.jsx.snap +446 -0
- package/src/widgets/__tests__/__snapshots__/passage_test.jsx.snap +1988 -0
- package/src/widgets/__tests__/__snapshots__/radio_test.jsx.snap +7107 -0
- package/src/widgets/__tests__/__snapshots__/video_test.jsx.snap +163 -0
- package/src/widgets/__tests__/categorizer_test.jsx +205 -0
- package/src/widgets/__tests__/cs-program_test.jsx +45 -0
- package/src/widgets/__tests__/definition_test.js +152 -0
- package/src/widgets/__tests__/dropdown_test.jsx +106 -0
- package/src/widgets/__tests__/explanation_test.js +199 -0
- package/src/widgets/__tests__/expression_test.jsx +439 -0
- package/src/widgets/__tests__/graded-group-set-jipt_test.jsx +33 -0
- package/src/widgets/__tests__/graded-group-set_test.jsx +270 -0
- package/src/widgets/__tests__/graded-group_test.jsx +233 -0
- package/src/widgets/__tests__/grapher.cypress.jsx +486 -0
- package/src/widgets/__tests__/grapher_test.jsx +35 -0
- package/src/widgets/__tests__/group_test.jsx +512 -0
- package/src/widgets/__tests__/iframe_test.jsx +47 -0
- package/src/widgets/__tests__/image_test.jsx +65 -0
- package/src/widgets/__tests__/input-number_test.jsx +360 -0
- package/src/widgets/__tests__/interaction_test.jsx +33 -0
- package/src/widgets/__tests__/interactive-graph.cypress.jsx +697 -0
- package/src/widgets/__tests__/interactive-graph_test.jsx +105 -0
- package/src/widgets/__tests__/matcher_test.jsx +157 -0
- package/src/widgets/__tests__/matrix_test.jsx +84 -0
- package/src/widgets/__tests__/number-line_test.jsx +81 -0
- package/src/widgets/__tests__/numeric-input_test.jsx +574 -0
- package/src/widgets/__tests__/orderer_test.jsx +75 -0
- package/src/widgets/__tests__/passage-ref_test.jsx +166 -0
- package/src/widgets/__tests__/passage_test.jsx +133 -0
- package/src/widgets/__tests__/radio/base-radio_test.jsx +82 -0
- package/src/widgets/__tests__/radio_test.jsx +651 -0
- package/src/widgets/__tests__/renderQuestion.jsx +66 -0
- package/src/widgets/__tests__/unit_test.jsx +144 -0
- package/src/widgets/__tests__/video_test.jsx +55 -0
- package/src/widgets/categorizer.jsx +338 -0
- package/src/widgets/cs-program.jsx +227 -0
- package/src/widgets/definition.jsx +141 -0
- package/src/widgets/dropdown.jsx +143 -0
- package/src/widgets/explanation.jsx +315 -0
- package/src/widgets/expression.jsx +652 -0
- package/src/widgets/graded-group-answer-bar.jsx +152 -0
- package/src/widgets/graded-group-set.jsx +285 -0
- package/src/widgets/graded-group.jsx +448 -0
- package/src/widgets/grapher/util.jsx +806 -0
- package/src/widgets/grapher.jsx +663 -0
- package/src/widgets/group.jsx +213 -0
- package/src/widgets/iframe.jsx +198 -0
- package/src/widgets/image.jsx +310 -0
- package/src/widgets/input-number.jsx +411 -0
- package/src/widgets/interaction/arrow-picker.jsx +39 -0
- package/src/widgets/interaction/color-picker.jsx +69 -0
- package/src/widgets/interaction/dash-picker.jsx +46 -0
- package/src/widgets/interaction/element-container.jsx +97 -0
- package/src/widgets/interaction.jsx +742 -0
- package/src/widgets/interactive-graph.jsx +2820 -0
- package/src/widgets/label-image/__stories__/answer-choices.stories.jsx +93 -0
- package/src/widgets/label-image/__stories__/marker.stories.jsx +172 -0
- package/src/widgets/label-image/answer-choices.jsx +311 -0
- package/src/widgets/label-image/marker.jsx +365 -0
- package/src/widgets/label-image/types.js +33 -0
- package/src/widgets/label-image.jsx +841 -0
- package/src/widgets/label-image_test.js +840 -0
- package/src/widgets/lights-puzzle.jsx +356 -0
- package/src/widgets/matcher.jsx +271 -0
- package/src/widgets/matrix.jsx +616 -0
- package/src/widgets/measurer.jsx +215 -0
- package/src/widgets/molecule/__tests__/layout_test.jsx +159 -0
- package/src/widgets/molecule/__tests__/parser_test.jsx +142 -0
- package/src/widgets/molecule/molecule-drawing.jsx +175 -0
- package/src/widgets/molecule/molecule-layout.jsx +367 -0
- package/src/widgets/molecule/smiles-parser.jsx +300 -0
- package/src/widgets/molecule.jsx +172 -0
- package/src/widgets/number-line.jsx +858 -0
- package/src/widgets/numeric-input.jsx +622 -0
- package/src/widgets/orderer.jsx +753 -0
- package/src/widgets/passage/__tests__/passage-markdown_test.jsx +382 -0
- package/src/widgets/passage/get-line-height-for-node.js +10 -0
- package/src/widgets/passage/passage-markdown.jsx +416 -0
- package/src/widgets/passage-ref-target.jsx +70 -0
- package/src/widgets/passage-ref.jsx +198 -0
- package/src/widgets/passage.jsx +601 -0
- package/src/widgets/plotter.jsx +1198 -0
- package/src/widgets/radio/__stories__/base-radio.stories.jsx +40 -0
- package/src/widgets/radio/__stories__/choice-icon.stories.jsx +157 -0
- package/src/widgets/radio/__stories__/choice-none-above.stories.jsx +26 -0
- package/src/widgets/radio/__stories__/cross-out-button.stories.jsx +64 -0
- package/src/widgets/radio/__stories__/cross-out-menu.stories.jsx +59 -0
- package/src/widgets/radio/__stories__/cross-out-tooltip.stories.jsx +59 -0
- package/src/widgets/radio/__stories__/focus-ring.stories.jsx +38 -0
- package/src/widgets/radio/__stories__/option-status.stories.jsx +118 -0
- package/src/widgets/radio/__stories__/toggleable-radio-button.stories.jsx +28 -0
- package/src/widgets/radio/base-radio.jsx +642 -0
- package/src/widgets/radio/choice-icon.jsx +468 -0
- package/src/widgets/radio/choice-none-above.jsx +54 -0
- package/src/widgets/radio/choice.jsx +692 -0
- package/src/widgets/radio/choice.jsx.fixture.js +64 -0
- package/src/widgets/radio/cross-out-button.jsx +136 -0
- package/src/widgets/radio/cross-out-menu-wrapper.jsx +492 -0
- package/src/widgets/radio/cross-out-tooltip.jsx +129 -0
- package/src/widgets/radio/focus-ring.jsx +51 -0
- package/src/widgets/radio/option-status.jsx +89 -0
- package/src/widgets/radio/toggleable-radio-button.jsx +133 -0
- package/src/widgets/radio/util.js +32 -0
- package/src/widgets/radio/util_test.js +19 -0
- package/src/widgets/radio/widget.jsx +470 -0
- package/src/widgets/radio.jsx +156 -0
- package/src/widgets/reaction-diagram.jsx +137 -0
- package/src/widgets/sequence.jsx +140 -0
- package/src/widgets/simulator.jsx +808 -0
- package/src/widgets/sorter.jsx +146 -0
- package/src/widgets/table.jsx +394 -0
- package/src/widgets/transformer.jsx +2876 -0
- package/src/widgets/unit.jsx +372 -0
- package/src/widgets/video-transcript-link.jsx +84 -0
- package/src/widgets/video-transcript-link_test.js +211 -0
- package/src/widgets/video.jsx +126 -0
- package/src/widgets.js +431 -0
- package/src/zoom.js +539 -0
- package/README.md +0 -3
- package/src/__tests__/index.test.js +0 -14
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
import TooltipArrow from "../tooltip-arrow.jsx";
|
|
5
|
+
|
|
6
|
+
type StoryArgs = {||};
|
|
7
|
+
|
|
8
|
+
type Story = {|
|
|
9
|
+
title: string,
|
|
10
|
+
|};
|
|
11
|
+
|
|
12
|
+
export default ({
|
|
13
|
+
title: "Perseus/Components/Tooltip Arrow",
|
|
14
|
+
}: Story);
|
|
15
|
+
|
|
16
|
+
export const DownPointingArrow = (args: StoryArgs): React.Node => {
|
|
17
|
+
const props = {
|
|
18
|
+
tooltipProps: {
|
|
19
|
+
inverted: false,
|
|
20
|
+
color: "red", // this should have no effect because we're not inverted
|
|
21
|
+
side: "top",
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return <TooltipArrow {...props} />;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const BlueDownPointingArrow = (args: StoryArgs): React.Node => {
|
|
29
|
+
const props = {
|
|
30
|
+
tooltipProps: {
|
|
31
|
+
inverted: true,
|
|
32
|
+
color: "blue",
|
|
33
|
+
side: "top",
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
return <TooltipArrow {...props} />;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const UpPointingArrow = (args: StoryArgs): React.Node => {
|
|
40
|
+
const props = {
|
|
41
|
+
tooltipProps: {
|
|
42
|
+
inverted: false,
|
|
43
|
+
color: "red", // this should have no effect because we're not inverted
|
|
44
|
+
side: "bottom",
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return <TooltipArrow {...props} />;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const RightPointingArrow = (args: StoryArgs): React.Node => {
|
|
51
|
+
const props = {
|
|
52
|
+
tooltipProps: {
|
|
53
|
+
inverted: false,
|
|
54
|
+
color: "red", // this should have no effect because we're not inverted
|
|
55
|
+
side: "left",
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
return <TooltipArrow {...props} />;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const LeftPointingArrow = (args: StoryArgs): React.Node => {
|
|
62
|
+
const props = {
|
|
63
|
+
tooltipProps: {
|
|
64
|
+
inverted: false,
|
|
65
|
+
color: "red", // this should have no effect because we're not inverted
|
|
66
|
+
side: "right",
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
return <TooltipArrow {...props} />;
|
|
70
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import Color from "@khanacademy/wonder-blocks-color";
|
|
3
|
+
import {action} from "@storybook/addon-actions";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
|
|
6
|
+
import TooltipBubble from "../tooltip-bubble.jsx";
|
|
7
|
+
|
|
8
|
+
type StoryArgs = {||};
|
|
9
|
+
|
|
10
|
+
type Story = {|
|
|
11
|
+
title: string,
|
|
12
|
+
|};
|
|
13
|
+
|
|
14
|
+
export default ({
|
|
15
|
+
title: "Perseus/Components/Tooltip Bubble",
|
|
16
|
+
}: Story);
|
|
17
|
+
|
|
18
|
+
const defaultProps = {
|
|
19
|
+
side: "top",
|
|
20
|
+
offset: 0,
|
|
21
|
+
offsetFrom: "bubble",
|
|
22
|
+
tooltipMargin: 0,
|
|
23
|
+
noPadding: false,
|
|
24
|
+
color: Color.offBlack16,
|
|
25
|
+
inverted: false,
|
|
26
|
+
dismissOnClickClose: false,
|
|
27
|
+
toggleOnHover: true,
|
|
28
|
+
showOnMount: false,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const logDismissAction = (...args) => action("dismiss")(...args);
|
|
32
|
+
|
|
33
|
+
export const DefaultBubble = (args: StoryArgs): React.Node => {
|
|
34
|
+
const params = {
|
|
35
|
+
tooltipProps: {
|
|
36
|
+
...defaultProps,
|
|
37
|
+
content: "Hello, world!",
|
|
38
|
+
a11y: {title: "Default bubble"},
|
|
39
|
+
},
|
|
40
|
+
dismiss: logDismissAction,
|
|
41
|
+
};
|
|
42
|
+
return <TooltipBubble {...params} />;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const DefaultBubbleWithCloseButton = (args: StoryArgs): React.Node => {
|
|
46
|
+
const params = {
|
|
47
|
+
tooltipProps: {
|
|
48
|
+
...defaultProps,
|
|
49
|
+
content: "Hello, world!",
|
|
50
|
+
dismissOnClickClose: true,
|
|
51
|
+
a11y: {title: "Default bubble with close button"},
|
|
52
|
+
},
|
|
53
|
+
dismiss: logDismissAction,
|
|
54
|
+
};
|
|
55
|
+
return <TooltipBubble {...params} />;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const BlueTextOnWhiteBubble = (args: StoryArgs): React.Node => {
|
|
59
|
+
const params = {
|
|
60
|
+
tooltipProps: {
|
|
61
|
+
...defaultProps,
|
|
62
|
+
content: "Hello, world!",
|
|
63
|
+
color: "blue",
|
|
64
|
+
dismissOnClickClose: true,
|
|
65
|
+
a11y: {title: "Blue text on white bubble"},
|
|
66
|
+
},
|
|
67
|
+
dismiss: logDismissAction,
|
|
68
|
+
};
|
|
69
|
+
return <TooltipBubble {...params} />;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const WhiteTextOnBlueBubble = (args: StoryArgs): React.Node => {
|
|
73
|
+
const params = {
|
|
74
|
+
tooltipProps: {
|
|
75
|
+
...defaultProps,
|
|
76
|
+
content: "Hello, world!",
|
|
77
|
+
color: "blue",
|
|
78
|
+
inverted: true,
|
|
79
|
+
dismissOnClickClose: true,
|
|
80
|
+
a11y: {title: "White text on blue bubble"},
|
|
81
|
+
},
|
|
82
|
+
dismiss: logDismissAction,
|
|
83
|
+
};
|
|
84
|
+
return <TooltipBubble {...params} />;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const NoPaddingAroundContentInBubble = (args: StoryArgs): React.Node => {
|
|
88
|
+
const params = {
|
|
89
|
+
tooltipProps: {
|
|
90
|
+
...defaultProps,
|
|
91
|
+
content: "Hello, world!",
|
|
92
|
+
noPadding: true,
|
|
93
|
+
a11y: {title: "No padding around content in bubble"},
|
|
94
|
+
},
|
|
95
|
+
dismiss: logDismissAction,
|
|
96
|
+
};
|
|
97
|
+
return <TooltipBubble {...params} />;
|
|
98
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import Color from "@khanacademy/wonder-blocks-color";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
import {getTooltipColors} from "../util.js";
|
|
6
|
+
|
|
7
|
+
const defaultProps = {
|
|
8
|
+
side: "top",
|
|
9
|
+
offset: 0,
|
|
10
|
+
offsetFrom: "bubble",
|
|
11
|
+
tooltipMargin: 0,
|
|
12
|
+
noPadding: false,
|
|
13
|
+
color: Color.offBlack16,
|
|
14
|
+
inverted: false,
|
|
15
|
+
dismissOnClickClose: false,
|
|
16
|
+
toggleOnHover: true,
|
|
17
|
+
showOnMount: false,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
describe("getTooltipColors", () => {
|
|
21
|
+
it("returns <color>-on-white when not inverted", () => {
|
|
22
|
+
const {backgroundColor, textColor} = getTooltipColors({
|
|
23
|
+
...defaultProps,
|
|
24
|
+
children: <div>(unused)</div>,
|
|
25
|
+
content: "Hello, world!",
|
|
26
|
+
color: "#123",
|
|
27
|
+
a11y: {title: "returns <color>-on-white when not inverted"}, // Does nothing
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
expect(backgroundColor).toEqual(Color.white);
|
|
31
|
+
expect(textColor).toEqual("#123");
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("returns white-on-<color> when inverted", () => {
|
|
35
|
+
const {backgroundColor, textColor} = getTooltipColors({
|
|
36
|
+
...defaultProps,
|
|
37
|
+
children: <div>(unused)</div>,
|
|
38
|
+
content: "Hello, world!",
|
|
39
|
+
color: "#123",
|
|
40
|
+
inverted: true,
|
|
41
|
+
a11y: {title: "returns white-on-<color> when inverted"}, // Does nothing
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
expect(backgroundColor).toEqual("#123");
|
|
45
|
+
expect(textColor).toEqual(Color.white);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
/**
|
|
3
|
+
* This is FlexiblePosition, part of NewTooltip.
|
|
4
|
+
*
|
|
5
|
+
* This generalizable component attempts to center its children relative to a
|
|
6
|
+
* given point... but refuses to allow the children to overflow their
|
|
7
|
+
* container. If the children *would* overflow, we first use the Flexbox
|
|
8
|
+
* algorithm to shift the element off-center. If that still doesn't work (i.e.,
|
|
9
|
+
* the children are larger than the container), then we shrink the children.
|
|
10
|
+
*
|
|
11
|
+
* This layout algorithm is entirely implemented via Flexbox. We have three
|
|
12
|
+
* elements: the pre-content spacer, the content, and the post-content spacer.
|
|
13
|
+
* The pre-content spacer and post-content spacer use their basis sizes to
|
|
14
|
+
* position the content at the target point, then shrink by equal amounts in
|
|
15
|
+
* order to *center* the content at the target point.
|
|
16
|
+
*
|
|
17
|
+
* To understand the algorithm, first consider *just* the spacer elements.
|
|
18
|
+
* If the container is 80px wide, and we're targeting a point 60px from the
|
|
19
|
+
* right and 20px from the left, then the spacer elements will use those values
|
|
20
|
+
* as their flex-basis:
|
|
21
|
+
*
|
|
22
|
+
* [ pre-content ][ post-content ]
|
|
23
|
+
*
|
|
24
|
+
* They take up 100% of the container by default. But, if the content element
|
|
25
|
+
* _also_ wants space, then the pre-content and post-content spacers need to
|
|
26
|
+
* shrink. We've configured them to shrink by equal amounts, which therefore
|
|
27
|
+
* center-aligns the target element at the target point.
|
|
28
|
+
*
|
|
29
|
+
* [ pre-content ][content ][post-content ]
|
|
30
|
+
*
|
|
31
|
+
* (Incidentally, the flex-shrink property is surprisingly complicated: it's
|
|
32
|
+
* defined relative to the element's own flex-basis. So, to get the spacers to
|
|
33
|
+
* shrink at equal rates, we define each spacer's flex-shrink to match the
|
|
34
|
+
* _other_ element's flex-basis. Fun! ^_^`)
|
|
35
|
+
*
|
|
36
|
+
* TODO(mdr): This component currently only supports horizontal positioning,
|
|
37
|
+
* but we'll probably extend it later to support vertical positioning, too.
|
|
38
|
+
*/
|
|
39
|
+
import {StyleSheet, css} from "aphrodite";
|
|
40
|
+
import * as React from "react";
|
|
41
|
+
|
|
42
|
+
type FlexiblePositionProps = {
|
|
43
|
+
children: React.Node,
|
|
44
|
+
// The direction along which to position the element.
|
|
45
|
+
//
|
|
46
|
+
// If "horizontal", this will be a full-width element that horizontally
|
|
47
|
+
// positions its children near a target x-coordinate.
|
|
48
|
+
//
|
|
49
|
+
// If "vertical", this will be a full-height element that vertically
|
|
50
|
+
// positions its children near a target y-coordinate.
|
|
51
|
+
direction: "horizontal" | "vertical",
|
|
52
|
+
// Specify the target point, by providing its distance from the flex-start
|
|
53
|
+
// and its distance from the flex-end. (These, together, must sum to the
|
|
54
|
+
// total container size.)
|
|
55
|
+
//
|
|
56
|
+
// If `direction` is "horizontal", then `pxFromStart` is the target
|
|
57
|
+
// position's offset from the left of the container, and `pxFromEnd` is the
|
|
58
|
+
// offset from the right.
|
|
59
|
+
//
|
|
60
|
+
// If `direction` is "vertical", then `pxFromStart` is the target
|
|
61
|
+
// position's offset from the top of the container, and `pxFromEnd` is the
|
|
62
|
+
// offset from the bottom.
|
|
63
|
+
pxFromStart: number,
|
|
64
|
+
pxFromEnd: number,
|
|
65
|
+
...
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default class FlexiblePosition extends React.PureComponent<FlexiblePositionProps> {
|
|
69
|
+
render(): React.Element<"div"> {
|
|
70
|
+
const {direction, pxFromStart, pxFromEnd} = this.props;
|
|
71
|
+
|
|
72
|
+
const wrapperStyles = [
|
|
73
|
+
styles.wrapper,
|
|
74
|
+
direction === "horizontal" && styles.wrapperHorizontal,
|
|
75
|
+
direction === "vertical" && styles.wrapperVertical,
|
|
76
|
+
];
|
|
77
|
+
const contentStyles = [
|
|
78
|
+
styles.content,
|
|
79
|
+
direction === "horizontal" && styles.contentHorizontal,
|
|
80
|
+
direction === "vertical" && styles.contentVertical,
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
// We need to handle the zero cases specially, because otherwise we get
|
|
84
|
+
// spacer elements with `flex-shrink: 0` - that is, they don't shrink
|
|
85
|
+
// for the content at all!
|
|
86
|
+
if (pxFromStart === 0) {
|
|
87
|
+
return (
|
|
88
|
+
<div className={css(...wrapperStyles)}>
|
|
89
|
+
<div className={css(...contentStyles)}>
|
|
90
|
+
{this.props.children}
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
if (pxFromEnd === 0) {
|
|
96
|
+
return (
|
|
97
|
+
<div
|
|
98
|
+
className={css(...wrapperStyles, styles.wrapperAlignToEnd)}
|
|
99
|
+
>
|
|
100
|
+
<div className={css(...contentStyles)}>
|
|
101
|
+
{this.props.children}
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<div className={css(...wrapperStyles)}>
|
|
109
|
+
<div
|
|
110
|
+
style={{
|
|
111
|
+
flexShrink: pxFromEnd,
|
|
112
|
+
flexBasis: pxFromStart,
|
|
113
|
+
}}
|
|
114
|
+
/>
|
|
115
|
+
<div className={css(...contentStyles)}>
|
|
116
|
+
{this.props.children}
|
|
117
|
+
</div>
|
|
118
|
+
<div
|
|
119
|
+
style={{
|
|
120
|
+
flexShrink: pxFromStart,
|
|
121
|
+
flexBasis: pxFromEnd,
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
</div>
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const styles = StyleSheet.create({
|
|
130
|
+
wrapper: {
|
|
131
|
+
display: "flex",
|
|
132
|
+
overflow: "hidden",
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
wrapperHorizontal: {
|
|
136
|
+
flexDirection: "row",
|
|
137
|
+
|
|
138
|
+
// The FlexiblePosition container takes the full width of its parent,
|
|
139
|
+
// and will not allow overflow (see `styles.wrapper`). This ensures
|
|
140
|
+
// that we prefer to shrink our contents, rather than overflow our
|
|
141
|
+
// parent.
|
|
142
|
+
width: "100%",
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
wrapperVertical: {
|
|
146
|
+
flexDirection: "column",
|
|
147
|
+
|
|
148
|
+
// The FlexiblePosition container takes the full height of its parent,
|
|
149
|
+
// and will not allow overflow (see `styles.wrapper`). This ensures
|
|
150
|
+
// that we prefer to shrink our contents, rather than overflow our
|
|
151
|
+
// parent.
|
|
152
|
+
height: "100%",
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
wrapperAlignToEnd: {
|
|
156
|
+
justifyContent: "flex-end",
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
content: {
|
|
160
|
+
// The content element must not grow or shrink, and instead always use
|
|
161
|
+
// its basis value.
|
|
162
|
+
flex: "0 0 auto",
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
contentHorizontal: {
|
|
166
|
+
// The only case in which the content element should "shrink" is when
|
|
167
|
+
// the content itself is too large for the container. In this case, we
|
|
168
|
+
// constrain the size with maximum width. (We can't use flex-shrink for
|
|
169
|
+
// this behavior, because we need the spacer elements to be prioritized
|
|
170
|
+
// as the only flex-shrinkable elements.)
|
|
171
|
+
maxWidth: "100%",
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
contentVertical: {
|
|
175
|
+
// The only case in which the content element should "shrink" is when
|
|
176
|
+
// the content itself is too large for the container. In this case, we
|
|
177
|
+
// constrain the size with maximum height. (We can't use flex-shrink
|
|
178
|
+
// for this behavior, because we need the spacer elements to be
|
|
179
|
+
// prioritized as the only flex-shrinkable elements.)
|
|
180
|
+
maxHeight: "100%",
|
|
181
|
+
},
|
|
182
|
+
});
|