@khanacademy/perseus 0.0.0-PR418-20230323233458

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.
Files changed (449) hide show
  1. package/.babelrc.js +8 -0
  2. package/.eslintrc.js +11 -0
  3. package/CHANGELOG.md +367 -0
  4. package/README.md +5 -0
  5. package/dist/es/index.css +4071 -0
  6. package/dist/es/index.js +51108 -0
  7. package/dist/es/index.js.map +1 -0
  8. package/dist/index.css +4071 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +51027 -0
  11. package/dist/index.js.flow +2 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/strings.js +150 -0
  14. package/package.json +95 -0
  15. package/src/__stories__/hints-renderer.stories.jsx +60 -0
  16. package/src/__stories__/item-renderer.stories.jsx +27 -0
  17. package/src/__stories__/server-item-renderer.stories.jsx +27 -0
  18. package/src/__testdata__/graphie_testdata.js +53 -0
  19. package/src/__testdata__/item-renderer_testdata.js +161 -0
  20. package/src/__testdata__/renderer_testdata.js +123 -0
  21. package/src/__tests__/__snapshots__/item-renderer_test.jsx.snap +232 -0
  22. package/src/__tests__/__snapshots__/perseus-markdown_test.jsx.snap +507 -0
  23. package/src/__tests__/__snapshots__/renderer_test.jsx.snap +585 -0
  24. package/src/__tests__/__snapshots__/server-item-renderer_test.jsx.snap +305 -0
  25. package/src/__tests__/a11y_test.jsx +304 -0
  26. package/src/__tests__/item-renderer_test.jsx +892 -0
  27. package/src/__tests__/jipt-paragraphs_test.js +34 -0
  28. package/src/__tests__/mock-asset-loading-widget.jsx +57 -0
  29. package/src/__tests__/mock-widget.jsx +35 -0
  30. package/src/__tests__/perseus-markdown_test.jsx +747 -0
  31. package/src/__tests__/renderability_test.jsx +481 -0
  32. package/src/__tests__/renderer-api_test.jsx +309 -0
  33. package/src/__tests__/renderer_test.jsx +1792 -0
  34. package/src/__tests__/server-item-renderer_test.jsx +516 -0
  35. package/src/__tests__/test-items/image-item.js +25 -0
  36. package/src/__tests__/test-items/input-number-1-item.js +27 -0
  37. package/src/__tests__/test-items/input-number-2-item.js +39 -0
  38. package/src/__tests__/test-items/table-item.js +30 -0
  39. package/src/__tests__/tex-wrangler_test.js +83 -0
  40. package/src/__tests__/util_test.js +41 -0
  41. package/src/a11y.js +46 -0
  42. package/src/all-widgets.js +9 -0
  43. package/src/article-renderer.jsx +214 -0
  44. package/src/asset-context.js +30 -0
  45. package/src/basic-widgets.js +13 -0
  46. package/src/components/__stories__/button-group.stories.jsx +61 -0
  47. package/src/components/__stories__/fixed-to-responsive.stories.jsx +132 -0
  48. package/src/components/__stories__/graph.stories.jsx +27 -0
  49. package/src/components/__stories__/graphie.stories.jsx +32 -0
  50. package/src/components/__stories__/hud.stories.jsx +36 -0
  51. package/src/components/__stories__/icon.stories.jsx +56 -0
  52. package/src/components/__stories__/image-loader.stories.jsx +60 -0
  53. package/src/components/__stories__/info-tip.stories.jsx +33 -0
  54. package/src/components/__stories__/inline-icon.stories.jsx +39 -0
  55. package/src/components/__stories__/input-with-examples.stories.jsx +52 -0
  56. package/src/components/__stories__/lint.stories.jsx +40 -0
  57. package/src/components/__stories__/math-input.stories.jsx +29 -0
  58. package/src/components/__stories__/math-output.stories.jsx +24 -0
  59. package/src/components/__stories__/multi-button-group.stories.jsx +69 -0
  60. package/src/components/__stories__/number-input.stories.jsx +42 -0
  61. package/src/components/__stories__/prop-check-box.stories.jsx +62 -0
  62. package/src/components/__stories__/range-input.stories.jsx +28 -0
  63. package/src/components/__stories__/simple-keypad-input.stories.jsx +28 -0
  64. package/src/components/__stories__/sortable.stories.jsx +73 -0
  65. package/src/components/__stories__/stub-tag-editor.stories.jsx +44 -0
  66. package/src/components/__stories__/svg-image.stories.jsx +71 -0
  67. package/src/components/__stories__/tex.stories.jsx +24 -0
  68. package/src/components/__stories__/text-buttons.stories.jsx +51 -0
  69. package/src/components/__stories__/text-input.stories.jsx +34 -0
  70. package/src/components/__stories__/text-list-editor.stories.jsx +33 -0
  71. package/src/components/__stories__/zoomable-tex.stories.jsx +39 -0
  72. package/src/components/__stories__/zoomable.stories.jsx +40 -0
  73. package/src/components/__testdata__/sorter_testdata.js +20 -0
  74. package/src/components/__tests__/__snapshots__/sortable_test.jsx.snap +79 -0
  75. package/src/components/__tests__/__snapshots__/sorter_test.jsx.snap +297 -0
  76. package/src/components/__tests__/number-input_test.jsx +112 -0
  77. package/src/components/__tests__/sortable_test.jsx +234 -0
  78. package/src/components/__tests__/sorter_test.jsx +111 -0
  79. package/src/components/__tests__/zoomable_test.jsx +388 -0
  80. package/src/components/button-group.jsx +131 -0
  81. package/src/components/constants.js +15 -0
  82. package/src/components/fixed-to-responsive.jsx +165 -0
  83. package/src/components/graph.jsx +413 -0
  84. package/src/components/graphie-classes.jsx +148 -0
  85. package/src/components/graphie-movables.jsx +342 -0
  86. package/src/components/graphie.jsx +353 -0
  87. package/src/components/highlighting/highlightable-content.jsx +245 -0
  88. package/src/components/highlighting/highlights.js +208 -0
  89. package/src/components/highlighting/ranges.js +299 -0
  90. package/src/components/highlighting/types.js +73 -0
  91. package/src/components/highlighting/ui/highlight-renderer.jsx +179 -0
  92. package/src/components/highlighting/ui/highlight-set-renderer.jsx +190 -0
  93. package/src/components/highlighting/ui/highlight-tooltip.jsx +143 -0
  94. package/src/components/highlighting/ui/highlighting-ui.jsx +163 -0
  95. package/src/components/highlighting/ui/selection-tracker.jsx +184 -0
  96. package/src/components/highlighting/ui/types.js +21 -0
  97. package/src/components/highlighting/ui/util.js +166 -0
  98. package/src/components/highlighting/word-indexer.jsx +155 -0
  99. package/src/components/hud.jsx +179 -0
  100. package/src/components/icon.jsx +149 -0
  101. package/src/components/image-loader.jsx +175 -0
  102. package/src/components/info-tip/info-tip.jsx +146 -0
  103. package/src/components/info-tip.jsx +38 -0
  104. package/src/components/inline-icon.jsx +81 -0
  105. package/src/components/input-with-examples.jsx +248 -0
  106. package/src/components/lint.jsx +455 -0
  107. package/src/components/math-input.jsx +293 -0
  108. package/src/components/math-output.jsx +128 -0
  109. package/src/components/multi-button-group.jsx +137 -0
  110. package/src/components/number-input.jsx +253 -0
  111. package/src/components/prop-check-box.jsx +80 -0
  112. package/src/components/range-input.jsx +61 -0
  113. package/src/components/simple-keypad-input.jsx +88 -0
  114. package/src/components/sortable.jsx +872 -0
  115. package/src/components/stub-tag-editor.jsx +54 -0
  116. package/src/components/svg-image.jsx +765 -0
  117. package/src/components/tex-buttons.jsx +320 -0
  118. package/src/components/tex.jsx +70 -0
  119. package/src/components/text-input.jsx +133 -0
  120. package/src/components/text-list-editor.jsx +157 -0
  121. package/src/components/tooltip.jsx +392 -0
  122. package/src/components/visibility-observer/__stories__/visibility-observer.stories.jsx +140 -0
  123. package/src/components/visibility-observer/get-scroll-parent.js +45 -0
  124. package/src/components/visibility-observer/visibility-observer.js +109 -0
  125. package/src/components/visibility-observer/visibility-observer.jsx +123 -0
  126. package/src/components/zoomable-tex.jsx +70 -0
  127. package/src/components/zoomable.jsx +294 -0
  128. package/src/components.js +17 -0
  129. package/src/definition-context.js +59 -0
  130. package/src/dependencies.js +22 -0
  131. package/src/error-boundary.jsx +48 -0
  132. package/src/extra-widgets.js +75 -0
  133. package/src/hint-renderer.jsx +155 -0
  134. package/src/hints-renderer.jsx +367 -0
  135. package/src/icon-paths.js +120 -0
  136. package/src/index.js +159 -0
  137. package/src/init.js +49 -0
  138. package/src/interaction-tracker.js +60 -0
  139. package/src/interactive2/__tests__/movable-mock.js +48 -0
  140. package/src/interactive2/__tests__/movable-point_test.js +146 -0
  141. package/src/interactive2/interactive-util.js +152 -0
  142. package/src/interactive2/movable-helper-methods.js +160 -0
  143. package/src/interactive2/movable-line-options.js +392 -0
  144. package/src/interactive2/movable-line.js +322 -0
  145. package/src/interactive2/movable-point-options.js +190 -0
  146. package/src/interactive2/movable-point.jsx +597 -0
  147. package/src/interactive2/movable-polygon-options.js +351 -0
  148. package/src/interactive2/movable-polygon.js +368 -0
  149. package/src/interactive2/movable.js +273 -0
  150. package/src/interactive2/objective_.js +79 -0
  151. package/src/interactive2/types.js +3 -0
  152. package/src/interactive2/wrapped-defaults.js +86 -0
  153. package/src/interactive2/wrapped-ellipse.js +86 -0
  154. package/src/interactive2/wrapped-line.js +109 -0
  155. package/src/interactive2/wrapped-path.js +47 -0
  156. package/src/interactive2.js +91 -0
  157. package/src/item-renderer.jsx +514 -0
  158. package/src/item-version.js +12 -0
  159. package/src/jipt-paragraphs.js +52 -0
  160. package/src/jquery.mobile.vmouse.js +546 -0
  161. package/src/keypad-context.js +33 -0
  162. package/src/loading-context.js +20 -0
  163. package/src/logging/log.js +107 -0
  164. package/src/logging/log_test.js +41 -0
  165. package/src/mixins/__tests__/widget-prop-denylist_test.js +23 -0
  166. package/src/mixins/changeable.jsx +115 -0
  167. package/src/mixins/editor-jsonify.jsx +13 -0
  168. package/src/mixins/provide-keypad.jsx +131 -0
  169. package/src/mixins/widget-jsonify-deprecated.jsx +23 -0
  170. package/src/mixins/widget-prop-denylist.js +49 -0
  171. package/src/multi-items/__stories__/multi-renderer.stories.js +88 -0
  172. package/src/multi-items/__testdata__/multi-renderer_testdata.js +174 -0
  173. package/src/multi-items/__tests__/__snapshots__/multi-renderer_test.js.snap +1220 -0
  174. package/src/multi-items/__tests__/items_test.js +245 -0
  175. package/src/multi-items/__tests__/multi-renderer_test.js +903 -0
  176. package/src/multi-items/__tests__/prop-type-builders_test.js +134 -0
  177. package/src/multi-items/__tests__/shapes_test.js +44 -0
  178. package/src/multi-items/__tests__/trees_test.js +316 -0
  179. package/src/multi-items/item-types.js +55 -0
  180. package/src/multi-items/items.js +176 -0
  181. package/src/multi-items/multi-renderer.jsx +543 -0
  182. package/src/multi-items/prop-type-builders.js +105 -0
  183. package/src/multi-items/shape-types.js +47 -0
  184. package/src/multi-items/shapes.js +53 -0
  185. package/src/multi-items/tree-types.js +42 -0
  186. package/src/multi-items/trees.js +345 -0
  187. package/src/multi-items.js +76 -0
  188. package/src/perseus-api.jsx +221 -0
  189. package/src/perseus-env.js +26 -0
  190. package/src/perseus-error.js +19 -0
  191. package/src/perseus-markdown.jsx +408 -0
  192. package/src/perseus-types.js +1475 -0
  193. package/src/question-paragraph.jsx +30 -0
  194. package/src/renderability.jsx +108 -0
  195. package/src/renderer.jsx +1937 -0
  196. package/src/server-item-renderer.jsx +467 -0
  197. package/src/sigfigs.jsx +492 -0
  198. package/src/styles/articles.less +747 -0
  199. package/src/styles/constants.js +96 -0
  200. package/src/styles/global-constants.js +344 -0
  201. package/src/styles/global-styles.js +307 -0
  202. package/src/styles/khan-exercise.css +1280 -0
  203. package/src/styles/media-queries.js +48 -0
  204. package/src/styles/perseus-renderer.less +742 -0
  205. package/src/styles/shared.js +132 -0
  206. package/src/styles/util.less +47 -0
  207. package/src/styles/variables.boostrap.less +301 -0
  208. package/src/styles/variables.less +55 -0
  209. package/src/styles/variables.shared.less +346 -0
  210. package/src/styles/widgets/categorizer.less +39 -0
  211. package/src/styles/widgets/dropdown.less +3 -0
  212. package/src/styles/widgets/expression.less +145 -0
  213. package/src/styles/widgets/graded-group.less +36 -0
  214. package/src/styles/widgets/grapher.less +11 -0
  215. package/src/styles/widgets/group.less +19 -0
  216. package/src/styles/widgets/image.less +29 -0
  217. package/src/styles/widgets/interactive-graph.less +61 -0
  218. package/src/styles/widgets/label-image.less +41 -0
  219. package/src/styles/widgets/matcher.less +8 -0
  220. package/src/styles/widgets/matrix.less +122 -0
  221. package/src/styles/widgets/measurer.less +20 -0
  222. package/src/styles/widgets/orderer.less +97 -0
  223. package/src/styles/widgets/passage.less +160 -0
  224. package/src/styles/widgets/plotter.less +29 -0
  225. package/src/styles/widgets/radio.less +56 -0
  226. package/src/styles/widgets/reaction-diagram.less +35 -0
  227. package/src/styles/widgets/sequence.less +5 -0
  228. package/src/styles/widgets/sortable.less +113 -0
  229. package/src/styles/widgets/table.less +56 -0
  230. package/src/styles/widgets/transformer.less +28 -0
  231. package/src/styles/widgets/unit.less +14 -0
  232. package/src/tex-wrangler.js +176 -0
  233. package/src/translation-linter.js +125 -0
  234. package/src/traversal.jsx +141 -0
  235. package/src/types.js +500 -0
  236. package/src/util/a11y.js +24 -0
  237. package/src/util/answer-types.js +861 -0
  238. package/src/util/answer-types_test.js +115 -0
  239. package/src/util/colors.js +94 -0
  240. package/src/util/fix-passage-refs.jsx +122 -0
  241. package/src/util/graph-utils.js +16 -0
  242. package/src/util/graphie.js +1586 -0
  243. package/src/util/interactive.js +4078 -0
  244. package/src/util/katex-preprocess.js +16 -0
  245. package/src/util/math.js +289 -0
  246. package/src/util/mobile-native-utils.js +14 -0
  247. package/src/util/mobile-native-utils_test.js +24 -0
  248. package/src/util/react-render.js +27 -0
  249. package/src/util/register-all-widgets-for-testing.js +12 -0
  250. package/src/util/scroll-utils.js +162 -0
  251. package/src/util/sizing-utils.js +46 -0
  252. package/src/util/tex.js +203 -0
  253. package/src/util/url-utils.js +36 -0
  254. package/src/util.js +984 -0
  255. package/src/version.js +11 -0
  256. package/src/widget-container.jsx +179 -0
  257. package/src/widgets/__stories__/categorizer.stories.jsx +15 -0
  258. package/src/widgets/__stories__/cs-program.stories.jsx +15 -0
  259. package/src/widgets/__stories__/definition.stories.jsx +108 -0
  260. package/src/widgets/__stories__/dropdown.stories.jsx +15 -0
  261. package/src/widgets/__stories__/explanation.stories.jsx +19 -0
  262. package/src/widgets/__stories__/expression.stories.jsx +26 -0
  263. package/src/widgets/__stories__/graded-group-set.stories.jsx +32 -0
  264. package/src/widgets/__stories__/graded-group.stories.jsx +32 -0
  265. package/src/widgets/__stories__/grapher.stories.jsx +47 -0
  266. package/src/widgets/__stories__/group.stories.jsx +15 -0
  267. package/src/widgets/__stories__/iframe.stories.jsx +15 -0
  268. package/src/widgets/__stories__/image.stories.jsx +62 -0
  269. package/src/widgets/__stories__/input-number.stories.jsx +102 -0
  270. package/src/widgets/__stories__/interaction.stories.jsx +15 -0
  271. package/src/widgets/__stories__/interactive-graph.stories.jsx +61 -0
  272. package/src/widgets/__stories__/matcher.stories.jsx +15 -0
  273. package/src/widgets/__stories__/matrix.stories.jsx +15 -0
  274. package/src/widgets/__stories__/number-line.stories.jsx +15 -0
  275. package/src/widgets/__stories__/numeric-input.stories.jsx +106 -0
  276. package/src/widgets/__stories__/on-screen-keypad.stories.jsx +118 -0
  277. package/src/widgets/__stories__/orderer.stories.jsx +15 -0
  278. package/src/widgets/__stories__/passage-ref.stories.jsx +23 -0
  279. package/src/widgets/__stories__/passage.stories.jsx +27 -0
  280. package/src/widgets/__stories__/radio.stories.jsx +90 -0
  281. package/src/widgets/__stories__/sorter.stories.jsx +15 -0
  282. package/src/widgets/__stories__/transformer.stories.jsx +15 -0
  283. package/src/widgets/__stories__/unit.stories.jsx +45 -0
  284. package/src/widgets/__stories__/video-transcript-link.stories.jsx +24 -0
  285. package/src/widgets/__stories__/video.stories.jsx +15 -0
  286. package/src/widgets/__testdata__/base-radio_testdata.js +22 -0
  287. package/src/widgets/__testdata__/categorizer_testdata.js +50 -0
  288. package/src/widgets/__testdata__/cs-program_testdata.js +28 -0
  289. package/src/widgets/__testdata__/dropdown_testdata.js +34 -0
  290. package/src/widgets/__testdata__/explanation_testdata.js +56 -0
  291. package/src/widgets/__testdata__/expression_testdata.js +95 -0
  292. package/src/widgets/__testdata__/graded-group-set_testdata.js +358 -0
  293. package/src/widgets/__testdata__/graded-group_testdata.js +79 -0
  294. package/src/widgets/__testdata__/grapher_testdata.js +376 -0
  295. package/src/widgets/__testdata__/group_testdata.js +156 -0
  296. package/src/widgets/__testdata__/iframe_testdata.js +36 -0
  297. package/src/widgets/__testdata__/image_testdata.js +38 -0
  298. package/src/widgets/__testdata__/input-number_testdata.js +73 -0
  299. package/src/widgets/__testdata__/interaction_testdata.js +264 -0
  300. package/src/widgets/__testdata__/interactive-graph_testdata.js +646 -0
  301. package/src/widgets/__testdata__/matcher_testdata.js +34 -0
  302. package/src/widgets/__testdata__/matrix_testdata.js +29 -0
  303. package/src/widgets/__testdata__/number-line_testdata.js +31 -0
  304. package/src/widgets/__testdata__/numeric-input_testdata.js +266 -0
  305. package/src/widgets/__testdata__/orderer_testdata.js +58 -0
  306. package/src/widgets/__testdata__/passage-ref_testdata.js +103 -0
  307. package/src/widgets/__testdata__/passage_testdata.js +96 -0
  308. package/src/widgets/__testdata__/radio_testdata.js +262 -0
  309. package/src/widgets/__testdata__/sorter_testdata.js +20 -0
  310. package/src/widgets/__testdata__/transformer_testdata.js +109 -0
  311. package/src/widgets/__testdata__/video_testdata.js +22 -0
  312. package/src/widgets/__tests__/__snapshots__/categorizer_test.jsx.snap +996 -0
  313. package/src/widgets/__tests__/__snapshots__/cs-program_test.jsx.snap +75 -0
  314. package/src/widgets/__tests__/__snapshots__/definition_test.js.snap +105 -0
  315. package/src/widgets/__tests__/__snapshots__/dropdown_test.jsx.snap +157 -0
  316. package/src/widgets/__tests__/__snapshots__/explanation_test.js.snap +473 -0
  317. package/src/widgets/__tests__/__snapshots__/expression_test.jsx.snap +38 -0
  318. package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt_test.jsx.snap +757 -0
  319. package/src/widgets/__tests__/__snapshots__/graded-group-set_test.jsx.snap +320 -0
  320. package/src/widgets/__tests__/__snapshots__/graded-group_test.jsx.snap +865 -0
  321. package/src/widgets/__tests__/__snapshots__/grapher_test.jsx.snap +2897 -0
  322. package/src/widgets/__tests__/__snapshots__/group_test.jsx.snap +1274 -0
  323. package/src/widgets/__tests__/__snapshots__/iframe_test.jsx.snap +69 -0
  324. package/src/widgets/__tests__/__snapshots__/image_test.jsx.snap +404 -0
  325. package/src/widgets/__tests__/__snapshots__/input-number_test.jsx.snap +978 -0
  326. package/src/widgets/__tests__/__snapshots__/interaction_test.jsx.snap +311 -0
  327. package/src/widgets/__tests__/__snapshots__/interactive-graph_test.jsx.snap +3017 -0
  328. package/src/widgets/__tests__/__snapshots__/matcher_test.jsx.snap +1039 -0
  329. package/src/widgets/__tests__/__snapshots__/matrix_test.jsx.snap +522 -0
  330. package/src/widgets/__tests__/__snapshots__/number-line_test.jsx.snap +888 -0
  331. package/src/widgets/__tests__/__snapshots__/numeric-input_test.jsx.snap +488 -0
  332. package/src/widgets/__tests__/__snapshots__/orderer_test.jsx.snap +275 -0
  333. package/src/widgets/__tests__/__snapshots__/passage-ref_test.jsx.snap +446 -0
  334. package/src/widgets/__tests__/__snapshots__/passage_test.jsx.snap +1988 -0
  335. package/src/widgets/__tests__/__snapshots__/radio_test.jsx.snap +4505 -0
  336. package/src/widgets/__tests__/__snapshots__/video_test.jsx.snap +161 -0
  337. package/src/widgets/__tests__/categorizer_test.jsx +205 -0
  338. package/src/widgets/__tests__/cs-program_test.jsx +45 -0
  339. package/src/widgets/__tests__/definition_test.js +137 -0
  340. package/src/widgets/__tests__/dropdown_test.jsx +106 -0
  341. package/src/widgets/__tests__/explanation_test.js +199 -0
  342. package/src/widgets/__tests__/expression_test.jsx +439 -0
  343. package/src/widgets/__tests__/graded-group-set-jipt_test.jsx +32 -0
  344. package/src/widgets/__tests__/graded-group-set_test.jsx +290 -0
  345. package/src/widgets/__tests__/graded-group_test.jsx +233 -0
  346. package/src/widgets/__tests__/grapher.cypress.jsx +546 -0
  347. package/src/widgets/__tests__/grapher_test.jsx +35 -0
  348. package/src/widgets/__tests__/group_test.jsx +512 -0
  349. package/src/widgets/__tests__/iframe_test.jsx +47 -0
  350. package/src/widgets/__tests__/image_test.jsx +65 -0
  351. package/src/widgets/__tests__/input-number_test.jsx +360 -0
  352. package/src/widgets/__tests__/interaction_test.jsx +33 -0
  353. package/src/widgets/__tests__/interactive-graph.cypress.jsx +777 -0
  354. package/src/widgets/__tests__/interactive-graph_test.jsx +105 -0
  355. package/src/widgets/__tests__/matcher_test.jsx +157 -0
  356. package/src/widgets/__tests__/matrix_test.jsx +84 -0
  357. package/src/widgets/__tests__/number-line_test.jsx +81 -0
  358. package/src/widgets/__tests__/numeric-input_test.jsx +514 -0
  359. package/src/widgets/__tests__/orderer_test.jsx +75 -0
  360. package/src/widgets/__tests__/passage-ref_test.jsx +166 -0
  361. package/src/widgets/__tests__/passage_test.jsx +212 -0
  362. package/src/widgets/__tests__/radio/base-radio_test.jsx +443 -0
  363. package/src/widgets/__tests__/radio/choice-icon_test.jsx +91 -0
  364. package/src/widgets/__tests__/radio/choice_test.jsx +311 -0
  365. package/src/widgets/__tests__/radio/focus-ring_test.jsx +23 -0
  366. package/src/widgets/__tests__/radio/option-status_test.jsx +65 -0
  367. package/src/widgets/__tests__/radio_test.jsx +810 -0
  368. package/src/widgets/__tests__/renderQuestion.jsx +66 -0
  369. package/src/widgets/__tests__/unit_test.jsx +144 -0
  370. package/src/widgets/__tests__/video_test.jsx +55 -0
  371. package/src/widgets/categorizer.jsx +343 -0
  372. package/src/widgets/cs-program.jsx +227 -0
  373. package/src/widgets/definition.jsx +121 -0
  374. package/src/widgets/dropdown.jsx +141 -0
  375. package/src/widgets/explanation.jsx +315 -0
  376. package/src/widgets/expression.jsx +652 -0
  377. package/src/widgets/graded-group-answer-bar.jsx +152 -0
  378. package/src/widgets/graded-group-set.jsx +296 -0
  379. package/src/widgets/graded-group.jsx +453 -0
  380. package/src/widgets/grapher/util.jsx +806 -0
  381. package/src/widgets/grapher.jsx +663 -0
  382. package/src/widgets/group.jsx +195 -0
  383. package/src/widgets/iframe.jsx +198 -0
  384. package/src/widgets/image.jsx +310 -0
  385. package/src/widgets/input-number.jsx +515 -0
  386. package/src/widgets/interaction/arrow-picker.jsx +39 -0
  387. package/src/widgets/interaction/color-picker.jsx +69 -0
  388. package/src/widgets/interaction/dash-picker.jsx +46 -0
  389. package/src/widgets/interaction/element-container.jsx +97 -0
  390. package/src/widgets/interaction.jsx +742 -0
  391. package/src/widgets/interactive-graph.jsx +2820 -0
  392. package/src/widgets/label-image/__stories__/answer-choices.stories.jsx +93 -0
  393. package/src/widgets/label-image/__stories__/marker.stories.jsx +172 -0
  394. package/src/widgets/label-image/answer-choices.jsx +311 -0
  395. package/src/widgets/label-image/marker.jsx +365 -0
  396. package/src/widgets/label-image/types.js +33 -0
  397. package/src/widgets/label-image.jsx +841 -0
  398. package/src/widgets/label-image_test.js +840 -0
  399. package/src/widgets/lights-puzzle.jsx +356 -0
  400. package/src/widgets/matcher.jsx +274 -0
  401. package/src/widgets/matrix.jsx +632 -0
  402. package/src/widgets/measurer.jsx +215 -0
  403. package/src/widgets/molecule/__tests__/layout_test.jsx +159 -0
  404. package/src/widgets/molecule/__tests__/parser_test.jsx +142 -0
  405. package/src/widgets/molecule/molecule-drawing.jsx +175 -0
  406. package/src/widgets/molecule/molecule-layout.jsx +367 -0
  407. package/src/widgets/molecule/smiles-parser.jsx +300 -0
  408. package/src/widgets/molecule.jsx +172 -0
  409. package/src/widgets/number-line.jsx +858 -0
  410. package/src/widgets/numeric-input.jsx +553 -0
  411. package/src/widgets/orderer.jsx +756 -0
  412. package/src/widgets/passage/__tests__/passage-markdown_test.jsx +373 -0
  413. package/src/widgets/passage/passage-markdown.jsx +472 -0
  414. package/src/widgets/passage-ref-target.jsx +73 -0
  415. package/src/widgets/passage-ref.jsx +214 -0
  416. package/src/widgets/passage.jsx +576 -0
  417. package/src/widgets/plotter.jsx +1198 -0
  418. package/src/widgets/radio/__stories__/base-radio.stories.jsx +189 -0
  419. package/src/widgets/radio/__stories__/choice-icon.stories.jsx +166 -0
  420. package/src/widgets/radio/__stories__/choice-none-above.stories.jsx +41 -0
  421. package/src/widgets/radio/__stories__/choice.stories.jsx +138 -0
  422. package/src/widgets/radio/__stories__/focus-ring.stories.jsx +44 -0
  423. package/src/widgets/radio/__stories__/option-status.stories.jsx +104 -0
  424. package/src/widgets/radio/base-radio.jsx +494 -0
  425. package/src/widgets/radio/choice-a11y-text.js +62 -0
  426. package/src/widgets/radio/choice-icon/choice-icon.jsx +214 -0
  427. package/src/widgets/radio/choice-icon/cross-out-line.jsx +52 -0
  428. package/src/widgets/radio/choice-icon/shared-styles.js +16 -0
  429. package/src/widgets/radio/choice-none-above.jsx +63 -0
  430. package/src/widgets/radio/choice.jsx +382 -0
  431. package/src/widgets/radio/choice.jsx.fixture.js +46 -0
  432. package/src/widgets/radio/focus-ring.jsx +58 -0
  433. package/src/widgets/radio/option-status.jsx +98 -0
  434. package/src/widgets/radio/util.js +32 -0
  435. package/src/widgets/radio/util_test.js +19 -0
  436. package/src/widgets/radio/widget.jsx +515 -0
  437. package/src/widgets/radio.jsx +155 -0
  438. package/src/widgets/reaction-diagram.jsx +137 -0
  439. package/src/widgets/sequence.jsx +143 -0
  440. package/src/widgets/simulator.jsx +806 -0
  441. package/src/widgets/sorter.jsx +149 -0
  442. package/src/widgets/table.jsx +397 -0
  443. package/src/widgets/transformer.jsx +2876 -0
  444. package/src/widgets/unit.jsx +372 -0
  445. package/src/widgets/video-transcript-link.jsx +84 -0
  446. package/src/widgets/video-transcript-link_test.js +211 -0
  447. package/src/widgets/video.jsx +126 -0
  448. package/src/widgets.js +431 -0
  449. package/src/zoom.js +539 -0
package/.babelrc.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * HACK(kevinb): Due to https://github.com/facebook/jest/issues/11741,
3
+ * we need to have this file, or updating inline snapshots can fail rather
4
+ * cryptically.
5
+ *
6
+ * We should remove this when jest is fixed.
7
+ */
8
+ module.exports = require("../../config/build/babel.config.js");
package/.eslintrc.js ADDED
@@ -0,0 +1,11 @@
1
+ /* eslint-disable import/no-commonjs */
2
+ const path = require("path");
3
+
4
+ module.exports = {
5
+ rules: {
6
+ "import/no-extraneous-dependencies": [
7
+ "error",
8
+ {packageDir: [__dirname, path.join(__dirname, "../../")]},
9
+ ],
10
+ },
11
+ };
package/CHANGELOG.md ADDED
@@ -0,0 +1,367 @@
1
+ # @khanacademy/perseus
2
+
3
+ ## 0.0.0-PR418-20230323233458
4
+
5
+ ### Minor Changes
6
+
7
+ - 53bfddab: Configure Perseus to render numeric-input widgets in place of input-number
8
+
9
+ ## 2.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 2c843b38: Update to use wonder-blocks deps after migrating wonder-blocks to TS
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [2c843b38]
18
+ - @khanacademy/math-input@0.6.8
19
+
20
+ ## 2.0.1
21
+
22
+ ### Patch Changes
23
+
24
+ - 6272dfbe: Bugfix for definition prompt size in articles
25
+
26
+ ## 2.0.0
27
+
28
+ ### Major Changes
29
+
30
+ - b850ebee: Remove `satStyling` from `APIOptions`
31
+ - b850ebee: Remove `styling` from `APIOptions`
32
+
33
+ ### Patch Changes
34
+
35
+ - 55841525: Fix graphie font-size to a specific size
36
+ - a325f740: Switch Definition's prompt from Button to Clickable to resolve text not matching
37
+
38
+ ## 1.4.1
39
+
40
+ ### Patch Changes
41
+
42
+ - a1b4ab3c: Update wonder-blocks and wonder-stuff deps to fix an issue with wonder-stuff's generated flow types
43
+ - Updated dependencies [a1b4ab3c]
44
+ - @khanacademy/math-input@0.6.7
45
+ - @khanacademy/perseus-linter@0.2.5
46
+ - @khanacademy/pure-markdown@0.1.5
47
+
48
+ ## 1.4.0
49
+
50
+ ### Minor Changes
51
+
52
+ - 324a197c: Quick font fixup
53
+ - f5693311: Indicators on exercises are now accessible via the keyboard! Additionally, they use explicit list markup! 🟢⚪⚪
54
+
55
+ ### Patch Changes
56
+
57
+ - 6a7f36be: Update wonder-stuff and wonder-blocks dependencies
58
+ - 7b94ca05: Update categorizer to have no empty "th" cells per a11y audit
59
+ - Updated dependencies [6a7f36be]
60
+ - @khanacademy/math-input@0.6.6
61
+ - @khanacademy/perseus-linter@0.2.4
62
+ - @khanacademy/pure-markdown@0.1.4
63
+
64
+ ## 1.3.7
65
+
66
+ ### Patch Changes
67
+
68
+ - c238d540: Wrap all ReactDOM.render() calls in `<RenderStateRoot>` to ensure it propagates properly
69
+ - Updated dependencies [c238d540]
70
+ - @khanacademy/math-input@0.6.5
71
+
72
+ ## 1.3.6
73
+
74
+ ### Patch Changes
75
+
76
+ - 859d3c28: Fixes styling of input-number when answer is incorrect in review mode
77
+
78
+ ## 1.3.5
79
+
80
+ ### Patch Changes
81
+
82
+ - c4feda94: allow users to select text in radio choice
83
+ - 6f79dc58: Fix regression in input-number widget to respect `size` and `rightAlign` options again.
84
+
85
+ ## 1.3.4
86
+
87
+ ### Patch Changes
88
+
89
+ - 5a565227: bugfix for Radio editor selection and deletion
90
+
91
+ ## 1.3.3
92
+
93
+ ### Patch Changes
94
+
95
+ - 47d2afc0: Force radio text to be dark for contrast
96
+
97
+ ## 1.3.2
98
+
99
+ ### Patch Changes
100
+
101
+ - 1454c80a: Change to shape/space Radio Choice's "cross out" button
102
+
103
+ ## 1.3.1
104
+
105
+ ### Patch Changes
106
+
107
+ - 9b3bf30f: CSS bug fixes for SAT Radio widget
108
+ - Updated dependencies [113953e8]
109
+ - @khanacademy/math-input@0.6.4
110
+
111
+ ## 1.3.0
112
+
113
+ ### Minor Changes
114
+
115
+ - e783be76: Fix passage fonts because content depends on it being an exact size
116
+
117
+ ### Patch Changes
118
+
119
+ - ec92d308: Fix bug with Passage where line numbers stopped abruptly
120
+ - dd55b5e4: Update gutter line numbers in passage
121
+
122
+ ## 1.2.0
123
+
124
+ ### Minor Changes
125
+
126
+ - cede09bd: Fix passage widget bug bug where highlight is immediately lost when tooltip appears
127
+
128
+ ### Patch Changes
129
+
130
+ - 5ba90816: CSS fix to remove gradient background on math
131
+ - 96ddd9b7: Update package.json with yarn start command
132
+ - a90a52c6: Update body fonts
133
+
134
+ ## 1.1.2
135
+
136
+ ### Patch Changes
137
+
138
+ - b8b0ff7e: Update graded-group widget title to use a darker gray to meet a11y requirements
139
+ - 1dad999d: bugfix: add indention back to Passage widget
140
+ - cc5103be: Small fix to communicate the "current" state of graded-group-sets to screen readers.
141
+
142
+ ## 1.1.1
143
+
144
+ ### Patch Changes
145
+
146
+ - 5b86aba4: bugfix: add size and rightAlign back to numeric-input widget
147
+ - 5b86aba4: bugfix for Matrix styles not getting passed through
148
+ - 6b48ca35: A tiny change that adds some aria labels to our message container so that the content will be read to screen readers upon update.
149
+
150
+ ## 1.1.0
151
+
152
+ ### Minor Changes
153
+
154
+ - 178987d6: Creates a native accessibility experience for Radio widget
155
+
156
+ ### Patch Changes
157
+
158
+ - f046585a: add shared PerseusNumericInputAnswerForm and MathFormat types to perseus-types
159
+ - e342e6b2: Update CSS to match wonderblocks, round I
160
+
161
+ ## 1.0.0
162
+
163
+ ### Major Changes
164
+
165
+ - f9e0cda6: Change API shape: remove radioStyleVersion, add primaryProductColor to styling
166
+
167
+ ### Minor Changes
168
+
169
+ - 61a7084e: make multi-select options look more like checkboxes
170
+
171
+ ### Patch Changes
172
+
173
+ - 2a3ac714: adds better flow coverage to base-radio.jsx
174
+ - 28170809: refactors base-radio to be a functional component
175
+ - ea104d1c: Delete original choice icon now that it's been refactored and moved
176
+ - 8c6c60f5: Converts OptionStatus component to a functional component
177
+ - 80e2cafc: refactor focus-ring to functional component
178
+ - f567f660: Update the eslint config to look at both the package.json for the package and the one from the root
179
+ - e8a60745: increase story/test coverage of base-radio
180
+ - 61a7084e: code cleanup for the choice-icon radio sub-component
181
+ - 16eccaea: convert Radio's Choice component into a functional component
182
+ - eeaa9010: Add more Flow typing to passage and passage-markdown widgets
183
+ - d4d2b3a6: removes unused crossOutButton component
184
+ - 46859806: Increases flow coverage for Radio's Widget component to 100%
185
+ - f5682ad6: fixes a bug in the multiselect radio widget to allow selected choices to be unselected
186
+ - Updated dependencies [f567f660]
187
+ - Updated dependencies [eeaa9010]
188
+ - @khanacademy/kas@0.2.7
189
+ - @khanacademy/kmath@0.0.8
190
+ - @khanacademy/math-input@0.6.3
191
+ - @khanacademy/perseus-linter@0.2.3
192
+ - @khanacademy/pure-markdown@0.1.3
193
+ - @khanacademy/simple-markdown@0.8.6
194
+
195
+ ## 0.4.3
196
+
197
+ ### Patch Changes
198
+
199
+ - bf180fe1: Fix our use of import/no-extraneous-dependencies
200
+ - Updated dependencies [bf180fe1]
201
+ - @khanacademy/kas@0.2.6
202
+ - @khanacademy/kmath@0.0.7
203
+ - @khanacademy/math-input@0.6.2
204
+ - @khanacademy/perseus-linter@0.2.2
205
+ - @khanacademy/pure-markdown@0.1.2
206
+ - @khanacademy/simple-markdown@0.8.5
207
+
208
+ ## 0.4.2
209
+
210
+ ### Patch Changes
211
+
212
+ - b317b553: Update tooltip design
213
+ - 1a91b6c2: Adds missing wonder-blocks deps, makes wonder-blocks peerDeps
214
+ - Updated dependencies [1a91b6c2]
215
+ - @khanacademy/math-input@0.6.1
216
+
217
+ ## 0.4.1
218
+
219
+ ### Patch Changes
220
+
221
+ - Updated dependencies [8fcd2a28]
222
+ - @khanacademy/math-input@0.6.0
223
+
224
+ ## 0.4.0
225
+
226
+ ### Minor Changes
227
+
228
+ - fe5fedeb: Fix bug: 2 definitions displayed at once
229
+ - c13a5c93: Wonderblock numeric-input
230
+ - 7f92fd27: Remove JIPT.domInsertChecks from `PerseusDependencies` as its no longer used/needed by Perseus
231
+ - 8a49423f: Update radio widget with KA styling
232
+ - 988726bd: Change default "preloader" for `SvgImage` to use a WonderBlocks spinner. This avoids the need to deal with a bundled spinner GIF entirely.
233
+
234
+ ### Patch Changes
235
+
236
+ - 8a53d9e0: removes unused function from numeric-input.jsx named getClasses
237
+ - 23662202: Remove `isPhone` and `isTablet` from `PerseusDependencies`
238
+ - 98d283ff: Fix storybook
239
+ - Updated dependencies [98d283ff]
240
+ - @khanacademy/kas@0.2.5
241
+ - @khanacademy/kmath@0.0.6
242
+ - @khanacademy/math-input@0.5.6
243
+ - @khanacademy/perseus-linter@0.2.1
244
+ - @khanacademy/pure-markdown@0.1.1
245
+ - @khanacademy/simple-markdown@0.8.4
246
+
247
+ ## 0.3.4
248
+
249
+ ### Patch Changes
250
+
251
+ - 397c3660: Fix: remove gap between popover and popover anchor in definition widget
252
+ - Updated dependencies [6f8f1ac9]
253
+ - @khanacademy/math-input@0.5.5
254
+
255
+ ## 0.3.3
256
+
257
+ ### Patch Changes
258
+
259
+ - Updated dependencies [f29b4975]
260
+ - @khanacademy/math-input@0.5.4
261
+
262
+ ## 0.3.2
263
+
264
+ ### Patch Changes
265
+
266
+ - Updated dependencies [96288b87]
267
+ - @khanacademy/math-input@0.5.3
268
+
269
+ ## 0.3.1
270
+
271
+ ### Patch Changes
272
+
273
+ - bfbcf273: Export new type: VideoKind (a parameter for the `useVideo` hook)
274
+
275
+ ## 0.3.0
276
+
277
+ ### Minor Changes
278
+
279
+ - 2578bd16: Rename NotGorgon to TranslationLinter
280
+ - 2578bd16: Rename Gorgon to PerseusLinter
281
+
282
+ ### Patch Changes
283
+
284
+ - 4fb18745: Consume math-input .less directly instead of post-compilation
285
+ - Updated dependencies [2578bd16]
286
+ - Updated dependencies [2578bd16]
287
+ - @khanacademy/perseus-linter@0.2.0
288
+
289
+ ## 0.2.8
290
+
291
+ ### Patch Changes
292
+
293
+ - a4f10ace: Move Gorgon, PerseusError, PureMarkdown into their own packages
294
+ - Updated dependencies [a4f10ace]
295
+ - @khanacademy/perseus-linter@0.1.0
296
+ - @khanacademy/pure-markdown@0.1.0
297
+
298
+ ## 0.2.7
299
+
300
+ ### Patch Changes
301
+
302
+ - 3921a385: Fix bug where JIPT integration parsing rules returned incorrect type
303
+ - Updated dependencies [3921a385]
304
+ - @khanacademy/simple-markdown@0.8.3
305
+
306
+ ## 0.2.6
307
+
308
+ ### Patch Changes
309
+
310
+ - 5d67bb03: Add missing deps to peer/dev deps in package.json files
311
+
312
+ ## 0.2.5
313
+
314
+ ### Patch Changes
315
+
316
+ - Updated dependencies [a15b0e86]
317
+ - @khanacademy/kas@0.2.4
318
+ - @khanacademy/math-input@0.5.2
319
+ - @khanacademy/simple-markdown@0.8.2
320
+
321
+ ## 0.2.4
322
+
323
+ ### Patch Changes
324
+
325
+ - 5d86a625: Remove all unused fields from `Dependencies.InitialRequestUrl`
326
+
327
+ ## 0.2.3
328
+
329
+ ### Patch Changes
330
+
331
+ - 73095170: Add `VideoData` to set of exported Perseus types.
332
+
333
+ ## 0.2.2
334
+
335
+ ### Patch Changes
336
+
337
+ - 591420a6: Add @flow comment to math-input's index.js and missing props to ProvidedKeypad
338
+ - Updated dependencies [591420a6]
339
+ - @khanacademy/math-input@0.5.1
340
+
341
+ ## 0.2.1
342
+
343
+ ### Patch Changes
344
+
345
+ - e56ab24b: Exclude all deps from bundle except for vendored deps
346
+ - Updated dependencies [ca76baa3]
347
+ - @khanacademy/simple-markdown@0.8.1
348
+
349
+ ## 0.2.0
350
+
351
+ ### Minor Changes
352
+
353
+ - 116df39b: Extract math-input strings from source and save them to packages/math-input/dist
354
+
355
+ ### Patch Changes
356
+
357
+ - Updated dependencies [ea57be17]
358
+ - Updated dependencies [116df39b]
359
+ - Updated dependencies [570c5800]
360
+ - @khanacademy/math-input@0.5.0
361
+ - @khanacademy/kas@0.2.3
362
+
363
+ ## 0.1.0
364
+
365
+ ### Minor Changes
366
+
367
+ - 21ee944a: Code from webapp has been copied over and all checks are passing.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @khanacademy/perseus
2
+
3
+ Perseus is the set of components that we use at Khan Academy to power our Exercises and Articles.
4
+
5
+ The [perseus monorepo](https://www.github.com/Khan/perseus) is home to several packages, and this is the main one! Import this to render perseus items. Currently, UI that's outside of a perseus item (check answer button, anything at the higher-than-assessment-item level) is left as an exercise for the client.